Menu.st
changeset 724 898519684261
parent 696 a49928754789
child 729 7e22cc23fd1f
equal deleted inserted replaced
723:1b6645c38f89 724:898519684261
     1 'From Smalltalk/X, Version:3.1.10 on 13-sep-1997 at 10:55:54 pm'                !
       
     2 
       
     3 Object subclass:#Menu
     1 Object subclass:#Menu
     4 	instanceVariableNames:'items groupSizes receiver'
     2 	instanceVariableNames:'items groupSizes receiver'
     5 	classVariableNames:''
     3 	classVariableNames:''
     6 	poolDictionaries:''
     4 	poolDictionaries:''
     7 	category:'Views-Support'
     5 	category:'Views-Support'
    73 
    71 
    74     "Modified: 20.6.1997 / 10:46:45 / cg"
    72     "Modified: 20.6.1997 / 10:46:45 / cg"
    75     "Created: 13.9.1997 / 10:35:46 / cg"
    73     "Created: 13.9.1997 / 10:35:46 / cg"
    76 ! !
    74 ! !
    77 
    75 
       
    76 !Menu methodsFor:'ST-80 compatibility'!
       
    77 
       
    78 indexOfMenuItem:anItem
       
    79 
       
    80     ^ items indexOf:anItem
       
    81 
       
    82     "Created: / 27.10.1997 / 16:34:19 / cg"
       
    83 !
       
    84 
       
    85 menuButtons
       
    86     "ST-80 seems to use a special menuButton class here.
       
    87      Here, kludge a collection of menuItems."
       
    88 
       
    89     ^ items
       
    90 
       
    91     "Created: / 27.10.1997 / 16:33:35 / cg"
       
    92 ! !
       
    93 
    78 !Menu methodsFor:'accessing'!
    94 !Menu methodsFor:'accessing'!
    79 
    95 
    80 addItem:aMenuItem
    96 addItem:aMenuItem
    81     items isNil ifTrue:[
    97     items isNil ifTrue:[
    82         items := OrderedCollection new
    98         items := OrderedCollection new
    87 addItem:aMenuItem value:aValue
   103 addItem:aMenuItem value:aValue
    88     aMenuItem value:aValue.
   104     aMenuItem value:aValue.
    89     self addItem:aMenuItem.
   105     self addItem:aMenuItem.
    90 !
   106 !
    91 
   107 
       
   108 addItemGroup:aCollectionOfItems
       
   109     groupSizes isNil ifTrue:[
       
   110         groupSizes := OrderedCollection new
       
   111     ].
       
   112     groupSizes add:aCollectionOfItems size.
       
   113 
       
   114     aCollectionOfItems do:[:item |
       
   115         self addItem:item
       
   116     ].
       
   117 
       
   118     "Created: / 27.10.1997 / 15:02:15 / cg"
       
   119 !
       
   120 
    92 addItemGroup:aGroup values:values
   121 addItemGroup:aGroup values:values
    93     groupSizes isNil ifTrue:[
   122     groupSizes isNil ifTrue:[
    94         groupSizes := OrderedCollection new
   123         groupSizes := OrderedCollection new
    95     ].
   124     ].
    96     groupSizes add:items size.
   125     groupSizes add:items size.
    98     aGroup with:values do:[:item :value |
   127     aGroup with:values do:[:item :value |
    99         self addItem:item value:value
   128         self addItem:item value:value
   100     ].
   129     ].
   101 !
   130 !
   102 
   131 
       
   132 addItemGroupLabels:labels values:values
       
   133     |items|
       
   134 
       
   135     items := labels with:values
       
   136                 collect:[:label :value |
       
   137                             |item|
       
   138 
       
   139                             item := MenuItem new.
       
   140                             item label:label.
       
   141                             item value:value.
       
   142                         ].
       
   143     self addItemGroup:items
       
   144 
       
   145     "Created: / 27.10.1997 / 19:49:27 / cg"
       
   146 !
       
   147 
       
   148 addItemLabel:label value:value
       
   149     |item|
       
   150 
       
   151     item := MenuItem new.
       
   152     item label:label.
       
   153     item value:value.
       
   154     self addItem:item
       
   155 
       
   156     "Created: / 27.10.1997 / 19:47:12 / cg"
       
   157 !
       
   158 
   103 atNameKey:aNameKey
   159 atNameKey:aNameKey
   104     "return the menuItem for the given nameKey; nil if no such item is in the menu."
   160     "return the menuItem for the given nameKey; nil if no such item is in the menu.
   105 
   161      Searches in allItems (i.e. also in subMenus)"
   106     items do:[:anItem | anItem nameKey == aNameKey ifTrue:[^ anItem]].
   162 
       
   163     self allItemsDo:[:anItem|
       
   164         anItem nameKey == aNameKey ifTrue:[^ anItem]
       
   165     ].
   107     ^ nil
   166     ^ nil
   108 
   167 
   109     "Created: 13.9.1997 / 10:25:16 / cg"
   168     "Modified: / 27.10.1997 / 15:12:00 / cg"
   110     "Modified: 13.9.1997 / 10:28:44 / cg"
       
   111 !
   169 !
   112 
   170 
   113 groupSizes
   171 groupSizes
   114     "return the value of the instance variable 'groupSizes' (automatically generated)"
   172     "return the value of the instance variable 'groupSizes' (automatically generated)"
   115 
   173 
   177         ^ items at:index
   235         ^ items at:index
   178     ].
   236     ].
   179   ^ nil
   237   ^ nil
   180 !
   238 !
   181 
   239 
       
   240 menuItemLabeled:anItemLabel
       
   241     "return the menuItem for the given nameKey; nil if no such item is in the menu.
       
   242      Searches all items (i.e. also submenu items)"
       
   243 
       
   244     self allItemsDo:[:anItem|
       
   245                 |l|
       
   246 
       
   247                 ((l := anItem label) sameAs: anItemLabel) ifTrue:[
       
   248                     ^ anItem
       
   249                 ].
       
   250                 (l includes:$&) ifTrue:[
       
   251                     ((l copyWithout:$&) sameAs: anItemLabel) ifTrue:[
       
   252                         ^ anItem
       
   253                     ]
       
   254                 ]
       
   255              ].
       
   256     ^ nil
       
   257 
       
   258     "Created: / 13.9.1997 / 10:25:16 / cg"
       
   259     "Modified: / 27.10.1997 / 15:23:33 / cg"
       
   260 !
       
   261 
   182 menuItems
   262 menuItems
   183     ^ items
   263     ^ items
   184 !
   264 !
   185 
   265 
   186 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values
   266 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values
   242     "return a collection of values from my items"
   322     "return a collection of values from my items"
   243 
   323 
   244     ^ items collect:[:anItem | anItem value]
   324     ^ items collect:[:anItem | anItem value]
   245 
   325 
   246     "Created: 25.2.1997 / 19:49:29 / cg"
   326     "Created: 25.2.1997 / 19:49:29 / cg"
       
   327 !
       
   328 
       
   329 values:aCollectionOfValues
       
   330     "return a collection of values from my items"
       
   331 
       
   332     |s|
       
   333 
       
   334     s := aCollectionOfValues readStream.
       
   335     self itemsDo:[:item |
       
   336         |val|
       
   337 
       
   338         val := s next.
       
   339         item value:val
       
   340     ].
       
   341     s atEnd ifFalse:[self halt]
       
   342 
       
   343     "Created: / 27.10.1997 / 15:15:47 / cg"
       
   344 !
       
   345 
       
   346 visibleMenuItemGroups
       
   347         | itemGroups visibleItemGroups nextItem |
       
   348 
       
   349         itemGroups := OrderedCollection new.
       
   350         nextItem := 1.
       
   351         groupSizes do: [:groupSize |
       
   352                 itemGroups addLast: (items copyFrom: nextItem to: nextItem + groupSize - 1).
       
   353                 nextItem := nextItem + groupSize].
       
   354         self hasHiddenItems ifFalse: [^itemGroups].
       
   355 
       
   356         "Remove the hidden items."
       
   357         visibleItemGroups := OrderedCollection new.
       
   358         itemGroups do: [:eachItemGroup |
       
   359                 | visibleItemGroup |
       
   360                 visibleItemGroup := eachItemGroup reject:
       
   361                                         [:eachMenuItem | eachMenuItem hidden].
       
   362                 visibleItemGroup isEmpty ifFalse: [
       
   363                         visibleItemGroups addLast: visibleItemGroup]].
       
   364         ^visibleItemGroups
       
   365 
       
   366     "Created: / 27.10.1997 / 15:07:50 / cg"
   247 ! !
   367 ! !
   248 
   368 
   249 !Menu methodsFor:'accessing resource'!
   369 !Menu methodsFor:'accessing resource'!
   250 
   370 
   251 findGuiResourcesIn:aResourceContainerOrApplication
   371 findGuiResourcesIn:aResourceContainerOrApplication
   390 
   510 
   391 allItemsDo:aOneArgBlock
   511 allItemsDo:aOneArgBlock
   392     "evaluate block on each item and submenu items
   512     "evaluate block on each item and submenu items
   393     "
   513     "
   394     self itemsDo:[:anItem|
   514     self itemsDo:[:anItem|
       
   515         |sub|
       
   516 
   395         aOneArgBlock value:anItem.
   517         aOneArgBlock value:anItem.
   396         anItem submenu notNil ifTrue:[
   518         (sub := anItem submenu value) notNil ifTrue:[
   397             anItem submenu itemsDo:aOneArgBlock
   519             sub allItemsDo:aOneArgBlock
   398         ]
   520         ]
   399     ]
   521     ]
       
   522 
       
   523     "Modified: / 27.10.1997 / 15:09:08 / cg"
   400 !
   524 !
   401 
   525 
   402 itemsDo:aOneArgBlock
   526 itemsDo:aOneArgBlock
   403     "evaluate the block for each item in the current menu
   527     "evaluate the block for each item in the current menu
   404     "
   528     "
   408 menuAndSubmenusDetectItem:aOneArgBlock
   532 menuAndSubmenusDetectItem:aOneArgBlock
   409     "evaluate the block for each item in the current menu and all
   533     "evaluate the block for each item in the current menu and all
   410      submenus. In case that the block returns a non nil argument,
   534      submenus. In case that the block returns a non nil argument,
   411      the item will be returned
   535      the item will be returned
   412     "
   536     "
   413     |sm item|
   537     |item|
   414 
   538 
   415     items notNil ifTrue:[
   539     items notNil ifTrue:[
   416         items do:[:anItem|
   540         items do:[:anItem|
       
   541             |sub|
       
   542 
   417             (aOneArgBlock value:anItem) ifTrue:[
   543             (aOneArgBlock value:anItem) ifTrue:[
   418                 ^ anItem
   544                 ^ anItem
   419             ].
   545             ].
   420             (sm := anItem submenu) notNil ifTrue:[
   546             (sub := anItem submenu value) notNil ifTrue:[
   421                 item := anItem submenu menuAndSubmenusDetectItem:aOneArgBlock.
   547                 item := sub menuAndSubmenusDetectItem:aOneArgBlock.
   422                 item notNil ifTrue:[
   548                 item notNil ifTrue:[
   423                     ^ item
   549                     ^ item
   424                 ]
   550                 ]
   425             ]
   551             ]
   426         ]
   552         ]
   427     ].
   553     ].
   428   ^ nil
   554     ^ nil
       
   555 
       
   556     "Modified: / 27.10.1997 / 15:09:43 / cg"
   429 ! !
   557 ! !
   430 
   558 
   431 !Menu methodsFor:'kludged fixes'!
   559 !Menu methodsFor:'kludged fixes'!
   432 
   560 
   433 destroy
   561 destroy
   457     ].
   585     ].
   458   ^ exceptionBlock value
   586   ^ exceptionBlock value
   459 ! !
   587 ! !
   460 
   588 
   461 !Menu methodsFor:'queries'!
   589 !Menu methodsFor:'queries'!
       
   590 
       
   591 hasHiddenItems
       
   592     "test whether any item is hidden"
       
   593 
       
   594     self allItemsDo:[:anItem|
       
   595         anItem isHidden ifTrue:[^ true]
       
   596     ].
       
   597     ^ false
       
   598 
       
   599     "Modified: / 27.10.1997 / 15:12:44 / cg"
       
   600 !
   462 
   601 
   463 hasSubMenuAt:anIndex
   602 hasSubMenuAt:anIndex
   464     "test whether the menu item at the given index has a submenu
   603     "test whether the menu item at the given index has a submenu
   465     "
   604     "
   466     ^ (self menuItemAt:anIndex) hasSubmenu
   605     ^ (self menuItemAt:anIndex) hasSubmenu
   500 ! !
   639 ! !
   501 
   640 
   502 !Menu class methodsFor:'documentation'!
   641 !Menu class methodsFor:'documentation'!
   503 
   642 
   504 version
   643 version
   505     ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.18 1997-09-15 20:25:21 cg Exp $'
   644     ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.19 1997-10-28 19:50:41 cg Exp $'
   506 ! !
   645 ! !