PullDMenu.st
author Claus Gittinger <cg@exept.de>
Mon, 26 Feb 1996 22:42:02 +0100
changeset 403 ee8f6d080077
parent 392 81343306d796
child 456 83c37597d5fa
permissions -rw-r--r--
preserve cursor (error while searching)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
     3
	      All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
119
claus
parents: 116
diff changeset
    13
SimpleView subclass:#PullDownMenu
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
    14
	instanceVariableNames:'receiver menus titles selectors activeMenuNumber
250
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    15
		showSeparatingLines topMargin fgColor bgColor activeFgColor
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    16
		activeBgColor onLevel offLevel edgeStyle keepMenu toggleKeep
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    17
		raiseTopWhenActivated'
392
81343306d796 eliminated all DefaultFont classVars (are now classINSTvars)
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
    18
	classVariableNames:'DefaultViewBackground DefaultForegroundColor
250
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    19
		DefaultBackgroundColor DefaultHilightForegroundColor
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    20
		DefaultHilightBackgroundColor DefaultLevel DefaultHilightLevel
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    21
		DefaultShadowColor DefaultLightColor DefaultEdgeStyle
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    22
		DefaultKeepMenu DefaultToggleKeep DefaultSeparatingLines'
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
    23
	poolDictionaries:''
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
    24
	category:'Views-Menus'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
3
claus
parents: 0
diff changeset
    27
!PullDownMenu class methodsFor:'documentation'!
claus
parents: 0
diff changeset
    28
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    29
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    30
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    31
 COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    32
	      All Rights Reserved
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    33
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    34
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    35
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    37
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    38
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    39
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    40
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    41
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    42
3
claus
parents: 0
diff changeset
    43
documentation
claus
parents: 0
diff changeset
    44
"
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    45
    PullDown menu provides the top (always visible) part of these menus. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    46
    It controls display of its menus, which become visible when one of the 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    47
    PullDownMenus entries is pressed.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
128
claus
parents: 119
diff changeset
    49
    A PullDownMenu itself consists of a single row of labels, which activate
claus
parents: 119
diff changeset
    50
    a pulled menu when clicked. Entries may be empty (i.e. have no menu)
claus
parents: 119
diff changeset
    51
    and empty entries may (optionally) also perform some action when clicked.
claus
parents: 119
diff changeset
    52
    An entries selector is used as the key to define and access submenus
claus
parents: 119
diff changeset
    53
    and (for empty entries:) the selector sent to the receiver of the menu.
claus
parents: 119
diff changeset
    54
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    55
    Instance variables:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
128
claus
parents: 119
diff changeset
    57
      menus                   <Collection>    the sub menus
claus
parents: 119
diff changeset
    58
claus
parents: 119
diff changeset
    59
      titles                  <Collection>    the strings in the menu
claus
parents: 119
diff changeset
    60
claus
parents: 119
diff changeset
    61
      selectors               <Collection>    the selectors to send to the menu-
claus
parents: 119
diff changeset
    62
					      receiver (for empty pull-menus)
claus
parents: 119
diff changeset
    63
					      if nil (the default), title entries
claus
parents: 119
diff changeset
    64
					      do not send anything.
claus
parents: 119
diff changeset
    65
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    66
      activeMenuNumber        <Number>        the index of the currently active menu
128
claus
parents: 119
diff changeset
    67
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    68
      showSeparatingLines     <Boolean>       show separating lines between my menu-strings
128
claus
parents: 119
diff changeset
    69
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    70
      topMargin               <Number>        number of pixels at top
128
claus
parents: 119
diff changeset
    71
claus
parents: 119
diff changeset
    72
      fgColor                 <Color>         fg color to draw passive menu-titles
claus
parents: 119
diff changeset
    73
      bgColor                 <Color>         bg color to draw passive menu-titles
claus
parents: 119
diff changeset
    74
claus
parents: 119
diff changeset
    75
      activeFgColor           <Color>         fg color to draw activated menu-titles
claus
parents: 119
diff changeset
    76
      activeBgColor           <Color>         bg color to draw activated menu-titles
claus
parents: 119
diff changeset
    77
claus
parents: 119
diff changeset
    78
      onLevel                 <Integer>       3D level of entry-buttons when pressed
claus
parents: 119
diff changeset
    79
      offLevel                <Integer>       3D level of entry-buttons when released
claus
parents: 119
diff changeset
    80
claus
parents: 119
diff changeset
    81
      edgeStyle               <Symbol>        how to draw edges
claus
parents: 119
diff changeset
    82
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    83
      keepmenu                <Boolean>       if on, pulled menu stays on click,
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    84
					      till clicked again (motif & windows behavior)
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    85
128
claus
parents: 119
diff changeset
    86
      toggleKeep              <Boolean>       if on and keepMenu is on,
claus
parents: 119
diff changeset
    87
					      clicking again on label closes menu
claus
parents: 119
diff changeset
    88
claus
parents: 119
diff changeset
    89
     except menus, titles and selectors, instvars are usually defined from
claus
parents: 119
diff changeset
    90
     defaults in the styleSheet; you should not care for them.
claus
parents: 119
diff changeset
    91
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    92
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    93
    StyleSheet values:
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    94
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    95
      pullDownMenuViewBackground              view background Color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    96
					      default: menuViewBackground
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    97
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    98
      pullDownMenuForegroundColor             foreground drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    99
					      default: menuForegroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   100
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   101
      pullDownMenuBackgroundColor             background drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   102
					      default: menuBackgroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   103
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   104
      pullDownMenuHilightForegroundColor      active foreground drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   105
					      default: menuHilightForegroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   106
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   107
      pullDownMenuHilightBackgroundColor      active background drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   108
					      default: menuHilightBackgroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   109
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   110
      pullDownMenuHilightLevel                level (3D only) when active
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   111
					      default: menuHilightLevel
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   112
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   113
      pullDownMenuEdgeStyle                   edge style (nil or #soft)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   114
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   115
      pullDownMenuKeepMenu                    if true, pulled menu stays open until button
128
claus
parents: 119
diff changeset
   116
					      is pressed again outside of the item-area (motif behavior)
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   117
					      if false, menu closes on release (default)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   118
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   119
      pullDownMenuToggleKeep                  if true, pulled menu closes when an entry is pressed
128
claus
parents: 119
diff changeset
   120
					      again. Otherwise, only press outside of the items area
claus
parents: 119
diff changeset
   121
					      hides it. default is false
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   122
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   123
      pullDownMenuLevel                       level (3D only)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   124
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   125
      pullDownMenuFont                        font to use for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   126
					      default: menuFont
128
claus
parents: 119
diff changeset
   127
claus
parents: 119
diff changeset
   128
      pullDownMenuShowSeparatingLines         if true, lines are drawn between items.
claus
parents: 119
diff changeset
   129
					      default: false
133
claus
parents: 131
diff changeset
   130
claus
parents: 131
diff changeset
   131
      pullDownMenuRaiseTop                    if true, topview is raised whenever an entry
claus
parents: 131
diff changeset
   132
					      is activated.
claus
parents: 131
diff changeset
   133
					      default: true
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   134
"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   135
!
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   136
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   137
examples 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   138
"
128
claus
parents: 119
diff changeset
   139
	|top menu|
claus
parents: 119
diff changeset
   140
claus
parents: 119
diff changeset
   141
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   142
	top extent:300@300.
claus
parents: 119
diff changeset
   143
claus
parents: 119
diff changeset
   144
	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
claus
parents: 119
diff changeset
   145
	menu labels:#('foo' 'bar').
claus
parents: 119
diff changeset
   146
	menu selectors:#(foo bar).
claus
parents: 119
diff changeset
   147
	menu at:#foo
claus
parents: 119
diff changeset
   148
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   149
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   150
	     receiver:nil.
claus
parents: 119
diff changeset
   151
	menu at:#bar 
claus
parents: 119
diff changeset
   152
	     putLabels:#('bar1' 'bar2' 'bar3')
claus
parents: 119
diff changeset
   153
	     selectors:#(bar1 bar2 bar3)
claus
parents: 119
diff changeset
   154
	     receiver:nil.
claus
parents: 119
diff changeset
   155
	top open
claus
parents: 119
diff changeset
   156
claus
parents: 119
diff changeset
   157
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   158
128
claus
parents: 119
diff changeset
   159
    empty entries are possible as selectable items (with non-nil seletor) ...
claus
parents: 119
diff changeset
   160
claus
parents: 119
diff changeset
   161
	|top menu|
claus
parents: 119
diff changeset
   162
claus
parents: 119
diff changeset
   163
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   164
	top extent:300@300.
claus
parents: 119
diff changeset
   165
claus
parents: 119
diff changeset
   166
	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
claus
parents: 119
diff changeset
   167
	menu labels:#('foo' 'bar' 'baz').
claus
parents: 119
diff changeset
   168
	menu selectors:#(foo bar baz).
claus
parents: 119
diff changeset
   169
	menu at:#foo
claus
parents: 119
diff changeset
   170
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   171
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   172
	     receiver:nil.
claus
parents: 119
diff changeset
   173
	menu at:#baz 
claus
parents: 119
diff changeset
   174
	     putLabels:#('baz1' 'baz2' 'baz3')
claus
parents: 119
diff changeset
   175
	     selectors:#(baz1 baz2 baz3)
claus
parents: 119
diff changeset
   176
	     receiver:nil.
claus
parents: 119
diff changeset
   177
	top open
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   178
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   179
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   180
128
claus
parents: 119
diff changeset
   181
    ... or as separators (with nil selector)
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   182
128
claus
parents: 119
diff changeset
   183
	|top menu|
claus
parents: 119
diff changeset
   184
claus
parents: 119
diff changeset
   185
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   186
	top extent:500@200.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   187
128
claus
parents: 119
diff changeset
   188
	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
claus
parents: 119
diff changeset
   189
	menu labels:#('foo' '    ' 'bar' ' baz' '    ' 'moreFoo' 'moreBar' 'moreBaz').
claus
parents: 119
diff changeset
   190
	menu selectors:#(foo nil bar baz nil moreFoo moreBar moreBaz).
claus
parents: 119
diff changeset
   191
	menu at:#foo
claus
parents: 119
diff changeset
   192
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   193
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   194
	     receiver:nil.
claus
parents: 119
diff changeset
   195
	menu at:#bar 
claus
parents: 119
diff changeset
   196
	     putLabels:#('bar1' 'bar2' 'bar3')
claus
parents: 119
diff changeset
   197
	     selectors:#(bar1 bar2 bar3)
claus
parents: 119
diff changeset
   198
	     receiver:nil.
claus
parents: 119
diff changeset
   199
	menu at:#baz 
claus
parents: 119
diff changeset
   200
	     putLabels:#('baz1' 'baz2' 'baz3')
claus
parents: 119
diff changeset
   201
	     selectors:#(baz1 baz2 baz3)
claus
parents: 119
diff changeset
   202
	     receiver:nil.
claus
parents: 119
diff changeset
   203
	top open
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   204
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   205
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   206
128
claus
parents: 119
diff changeset
   207
claus
parents: 119
diff changeset
   208
    use the menus default height
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   209
128
claus
parents: 119
diff changeset
   210
	|top menu|
claus
parents: 119
diff changeset
   211
claus
parents: 119
diff changeset
   212
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   213
	top extent:300@300.
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   214
128
claus
parents: 119
diff changeset
   215
	menu := PullDownMenu in:top.
claus
parents: 119
diff changeset
   216
	menu origin:0.0@0.0 corner:1.0@(menu height).
claus
parents: 119
diff changeset
   217
	menu labels:#('foo' 'bar').
claus
parents: 119
diff changeset
   218
	menu selectors:#(foo bar).
claus
parents: 119
diff changeset
   219
	menu at:#foo
claus
parents: 119
diff changeset
   220
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   221
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   222
	     receiver:nil.
claus
parents: 119
diff changeset
   223
	top open
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   224
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   225
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   226
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   227
128
claus
parents: 119
diff changeset
   228
    although you can change the font, colors etc (as shown below)
claus
parents: 119
diff changeset
   229
    you should NOT do it - since if you do so, the styleSheet settings
claus
parents: 119
diff changeset
   230
    are ineffective (which users wont like probably)
claus
parents: 119
diff changeset
   231
    BTW: The styleSheet entries for below are pullDownMenuForegroundColor,
claus
parents: 119
diff changeset
   232
	 pullDownMenuBackgroundColor and pullDownMenuFont
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   233
128
claus
parents: 119
diff changeset
   234
	|top menu|
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   235
128
claus
parents: 119
diff changeset
   236
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   237
	menu := PullDownMenu in:top.
claus
parents: 119
diff changeset
   238
	menu font:(Font family:'courier' size:20).
claus
parents: 119
diff changeset
   239
	menu foregroundColor:Color red.
claus
parents: 119
diff changeset
   240
	menu backgroundColor:Color yellow.
claus
parents: 119
diff changeset
   241
	menu viewBackground:Color yellow.
claus
parents: 119
diff changeset
   242
	menu showSeparatingLines:true.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   243
128
claus
parents: 119
diff changeset
   244
	menu origin:0.0@0.0 corner:1.0@(menu height).
claus
parents: 119
diff changeset
   245
	menu labels:#('foo' 'bar').
claus
parents: 119
diff changeset
   246
	menu selectors:#(foo bar).
claus
parents: 119
diff changeset
   247
	menu at:#foo
claus
parents: 119
diff changeset
   248
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   249
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   250
	     receiver:nil.
claus
parents: 119
diff changeset
   251
	(menu menuAt:#foo) font:(Font family:'courier' size:36).
claus
parents: 119
diff changeset
   252
	top open
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   253
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   254
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   255
128
claus
parents: 119
diff changeset
   256
    you can use icons, too ...
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   257
128
claus
parents: 119
diff changeset
   258
	|labels top menu|
claus
parents: 119
diff changeset
   259
claus
parents: 119
diff changeset
   260
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   261
	top extent:300@300.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   262
128
claus
parents: 119
diff changeset
   263
	menu := PullDownMenu in:top.
claus
parents: 119
diff changeset
   264
	menu origin:0.0@0.0 corner:1.0@(menu height).
claus
parents: 119
diff changeset
   265
	labels := Array with:((Image fromFile:'SmalltalkX.xbm') magnifiedTo:16@16)
claus
parents: 119
diff changeset
   266
			with:'foo'
claus
parents: 119
diff changeset
   267
			with:'bar'.
claus
parents: 119
diff changeset
   268
	menu labels:labels.
claus
parents: 119
diff changeset
   269
	menu selectors:#(about foo bar).
claus
parents: 119
diff changeset
   270
	menu at:#about 
claus
parents: 119
diff changeset
   271
	     putLabels:#('about PullDownMenus')
claus
parents: 119
diff changeset
   272
	     selectors:#(aboutMenus)
claus
parents: 119
diff changeset
   273
	     receiver:nil.
claus
parents: 119
diff changeset
   274
	menu at:#foo
claus
parents: 119
diff changeset
   275
	     putLabels:#('foo1' 'foo2' 'foo3')
claus
parents: 119
diff changeset
   276
	     selectors:#(foo1 foo2 foo3)
claus
parents: 119
diff changeset
   277
	     receiver:nil.
claus
parents: 119
diff changeset
   278
	top open
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   279
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   280
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   281
128
claus
parents: 119
diff changeset
   282
    a concrete example (combining things described above)
claus
parents: 119
diff changeset
   283
    (using a Plug, since we have no application class here):
claus
parents: 119
diff changeset
   284
claus
parents: 119
diff changeset
   285
	|labels top menu textView appModel|
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   286
128
claus
parents: 119
diff changeset
   287
	appModel := Plug new.
claus
parents: 119
diff changeset
   288
	appModel respondTo:#quit with:[top destroy].
claus
parents: 119
diff changeset
   289
	appModel respondTo:#showAbout with:[self information:'some info here ...'].
claus
parents: 119
diff changeset
   290
	appModel respondTo:#help with:[self information:'some help here ...'].
claus
parents: 119
diff changeset
   291
claus
parents: 119
diff changeset
   292
	top := StandardSystemView new.
claus
parents: 119
diff changeset
   293
	top extent:300@300.
claus
parents: 119
diff changeset
   294
claus
parents: 119
diff changeset
   295
	menu := PullDownMenu in:top.
claus
parents: 119
diff changeset
   296
	menu receiver:appModel.
claus
parents: 119
diff changeset
   297
	menu origin:0.0@0.0 corner:1.0@(menu height).
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   298
128
claus
parents: 119
diff changeset
   299
	textView := ScrollableView forView:(EditTextView new).
claus
parents: 119
diff changeset
   300
	textView origin:0.0@menu height corner:1.0@1.0.
claus
parents: 119
diff changeset
   301
	top addSubView:textView.
claus
parents: 119
diff changeset
   302
claus
parents: 119
diff changeset
   303
	labels := Array with:((Image fromFile:'SmalltalkX.xbm') magnifiedTo:16@16)
claus
parents: 119
diff changeset
   304
			with:'file'
claus
parents: 119
diff changeset
   305
			with:'edit'
claus
parents: 119
diff changeset
   306
			with:'help'.
claus
parents: 119
diff changeset
   307
	menu labels:labels.
claus
parents: 119
diff changeset
   308
	menu selectors:#(about file edit help).
claus
parents: 119
diff changeset
   309
	menu at:#about 
claus
parents: 119
diff changeset
   310
	     putLabels:#('about PullDownMenus')
claus
parents: 119
diff changeset
   311
	     selectors:#(showAbout)
claus
parents: 119
diff changeset
   312
	     receiver:appModel.
claus
parents: 119
diff changeset
   313
	menu at:#file 
claus
parents: 119
diff changeset
   314
	     putLabels:#('quit')
claus
parents: 119
diff changeset
   315
	     selectors:#(quit)
claus
parents: 119
diff changeset
   316
	     receiver:appModel.
claus
parents: 119
diff changeset
   317
	menu at:#edit 
claus
parents: 119
diff changeset
   318
	     putLabels:#('copy' 'cut' 'paste')
claus
parents: 119
diff changeset
   319
	     selectors:#(copySelection cut paste)
claus
parents: 119
diff changeset
   320
	     receiver:textView.
claus
parents: 119
diff changeset
   321
	top open
3
claus
parents: 0
diff changeset
   322
"
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   323
! !
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   324
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   325
!PullDownMenu class methodsFor:'instance creation'!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   326
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   327
labels:titleArray
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   328
    "create and return a new PullDownMenu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   329
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   330
    ^ self new labels:titleArray
3
claus
parents: 0
diff changeset
   331
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   333
!PullDownMenu class methodsFor:'defaults'!
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   334
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   335
updateStyleCache
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   336
    "extract values from the styleSheet and cache them in class variables"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   337
133
claus
parents: 131
diff changeset
   338
    |styleSheet|
claus
parents: 131
diff changeset
   339
claus
parents: 131
diff changeset
   340
    styleSheet := StyleSheet.
claus
parents: 131
diff changeset
   341
claus
parents: 131
diff changeset
   342
    DefaultViewBackground := styleSheet colorAt:'pullDownMenuViewBackground'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   343
    DefaultViewBackground isNil ifTrue:[
133
claus
parents: 131
diff changeset
   344
	DefaultViewBackground := styleSheet colorAt:'menuViewBackground'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   345
    ].
133
claus
parents: 131
diff changeset
   346
    DefaultForegroundColor := styleSheet colorAt:'pullDownMenuForegroundColor'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   347
    DefaultForegroundColor isNil ifTrue:[
133
claus
parents: 131
diff changeset
   348
	DefaultForegroundColor := styleSheet colorAt:'menuForegroundColor'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   349
    ].
133
claus
parents: 131
diff changeset
   350
    DefaultBackgroundColor := styleSheet colorAt:'pullDownMenuBackgroundColor'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   351
    DefaultBackgroundColor isNil ifTrue:[
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   352
	DefaultViewBackground notNil ifTrue:[
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   353
	    DefaultBackgroundColor := DefaultViewBackground
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   354
	] ifFalse:[
133
claus
parents: 131
diff changeset
   355
	    DefaultBackgroundColor := styleSheet colorAt:'menuBackgroundColor'.
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   356
	]
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   357
    ].
133
claus
parents: 131
diff changeset
   358
    DefaultHilightForegroundColor := styleSheet colorAt:'pullDownMenuHilightForegroundColor'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   359
    DefaultHilightForegroundColor isNil ifTrue:[
133
claus
parents: 131
diff changeset
   360
	DefaultHilightForegroundColor := styleSheet colorAt:'menuHilightForegroundColor'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   361
    ].
133
claus
parents: 131
diff changeset
   362
    DefaultHilightBackgroundColor := styleSheet colorAt:'pullDownMenuHilightBackgroundColor'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   363
    DefaultHilightBackgroundColor isNil ifTrue:[
133
claus
parents: 131
diff changeset
   364
	DefaultHilightBackgroundColor := styleSheet colorAt:'menuHilightBackgroundColor'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   365
    ].
133
claus
parents: 131
diff changeset
   366
    DefaultHilightLevel := styleSheet at:'pullDownMenuHilightLevel'.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   367
    DefaultHilightLevel isNil ifTrue:[
133
claus
parents: 131
diff changeset
   368
	DefaultHilightLevel := styleSheet at:'menuHilightLevel' default:0.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   369
    ].
133
claus
parents: 131
diff changeset
   370
    DefaultEdgeStyle := styleSheet at:'pullDownMenuEdgeStyle'.
claus
parents: 131
diff changeset
   371
    DefaultKeepMenu := styleSheet at:'pullDownMenuKeepMenu' default:false.
claus
parents: 131
diff changeset
   372
    DefaultToggleKeep := styleSheet at:'pullDownMenuToggleKeep' default:false.
claus
parents: 131
diff changeset
   373
    DefaultLevel := styleSheet at:'pullDownMenuLevel' default:1.
claus
parents: 131
diff changeset
   374
    DefaultFont := styleSheet fontAt:'pullDownMenuFont'.
392
81343306d796 eliminated all DefaultFont classVars (are now classINSTvars)
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
   375
    DefaultFont isNil ifTrue:[DefaultFont := styleSheet fontAt:'menuFont'].
133
claus
parents: 131
diff changeset
   376
    DefaultSeparatingLines := styleSheet at:'pullDownMenuSeparatingLines' default:false.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   377
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   378
    "
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   379
     PullDownMenu updateStyleCache
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   380
    "
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   381
! !
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   382
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   383
!PullDownMenu methodsFor:'accessing'!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   384
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   385
add:label selector:selector
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   386
	"add a new title-item at the end.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   387
	 The corresponding label can later be set with #at:putMenu:
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   388
	 or #at:putLabels:selectors:..."
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   389
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   390
	self add:label selector:selector after:nil
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   391
!
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   392
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   393
add:label selector:selector after:indexOrString
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   394
	"add a new title-item after an existing item, indexOrString,
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   395
	 or at the end if the after-arg is nil.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   396
	 The corresponding label can later be set with #at:putMenu:
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   397
	 or #at:putLabels:selectors:..."
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   398
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   399
	|idx|
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   400
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   401
	indexOrString isNil ifTrue:[
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   402
	    idx := titles size
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   403
	] ifFalse:[
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   404
	    idx := self indexOf:indexOrString.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   405
	].
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   406
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   407
	titles isNil ifTrue:[
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   408
	    menus := Array with:nil.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   409
	    titles := Array with:label.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   410
	    selectors := Array with:nil.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   411
	] ifFalse:[
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   412
	    menus := (menus copyTo:idx) , #(nil) , (menus copyFrom:idx+1).
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   413
	    titles := ((titles copyTo:idx) copyWith:label) , (titles copyFrom:idx+1).
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   414
	    selectors := ((selectors copyTo:idx) copyWith:selector) , (selectors copyFrom:idx+1).
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   415
	].
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   416
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   417
	"
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   418
	 |top m|
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   419
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   420
	 top := StandardSystemView new.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   421
	 m := PullDownMenu in:top.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   422
	 m labels:#('file' 'edit').
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   423
	 m selectors:#(file #edit).
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   424
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   425
	 m add:'help' selector:#help after:#file.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   426
	 m at:#help putMenu:(MenuView labels:#('foo' 'bar')
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   427
				   selectors:#(foo bar)
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   428
				    receiver:nil).
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   429
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   430
	 top open
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   431
	"
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   432
!
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   433
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   434
at:aString putLabels:labels selector:selector args:args receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   435
    "create and set the menu under the title, aString"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   436
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   437
    |menuView|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   438
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   439
    menuView := MenuView labels:labels
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   440
		       selector:selector
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   441
			   args:args
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   442
		       receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   443
			    for:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   444
    self at:aString putMenu:menuView
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   445
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   446
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   447
at:aString putLabels:labels selectors:selectors args:args receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   448
    "create and set the menu under the title, aString"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   449
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   450
    |menuView|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   451
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   452
    menuView := MenuView labels:labels
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   453
		      selectors:selectors
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   454
			   args:args
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   455
		       receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   456
			    for:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   457
    self at:aString putMenu:menuView
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   458
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   459
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   460
at:aString putLabels:labels selectors:selectors receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   461
    "create and set the menu under the title, aString"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   462
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   463
    |menuView|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   464
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   465
    menuView := MenuView labels:labels
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   466
		      selectors:selectors
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   467
		       receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   468
			    for:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   469
    self at:aString putMenu:menuView
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   470
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   471
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   472
at:aString putMenu:aMenu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   473
    "set the menu under the title, aString"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   474
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   475
    |index|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   476
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   477
    index := self indexOf:aString.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   478
    (index == 0) ifTrue:[
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   479
	self error:'no such menu entry'.
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   480
	^ nil
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   481
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   482
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   483
"/ not needed:
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   484
"/    aMenu origin:((left + (self titleLenUpTo:index)) 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   485
"/                  @
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   486
"/                  (height + aMenu borderWidth)).
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   487
    aMenu superView:(self superView).
291
71f4a66b3281 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 289
diff changeset
   488
    aMenu beInvisible.
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   489
    menus at:index put:aMenu.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   490
    aMenu masterView:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   491
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   492
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   493
labels
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   494
    "return the menu-titles (group-headers)"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   495
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   496
    ^ titles
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   497
!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   498
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   499
labels:titleArray
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   500
    "define the menu-titles (group-headers)"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   501
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   502
    |numberOfLabels|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   503
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   504
    numberOfLabels := titleArray size.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   505
    menus := Array new:numberOfLabels.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   506
    titles := Array new:numberOfLabels.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   507
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   508
    titleArray keysAndValuesDo:[:index :entry |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   509
	|e|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   510
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   511
	entry isImage ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   512
	    e := entry on:device
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   513
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   514
	    e := entry printString
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   515
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   516
	titles at:index put:e
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   517
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   518
    shown ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   519
	self clear.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   520
	self redraw
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   521
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   522
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   523
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   524
labels:titleArray selectors:selectorArray
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   525
    "define the menu-titles (group-headers) and selectors.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   526
     Selectors are mostly used as access keys to get to submenus later."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   527
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   528
    self labels:titleArray.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   529
    self selectors:selectorArray
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   530
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   531
    "Created: 20.10.1995 / 20:15:54 / cg"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   532
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   533
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   534
menuAt:stringOrNumber
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   535
    "return the menu with the title; return nil if not found"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   536
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   537
    |index|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   538
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   539
    index := self indexOf:stringOrNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   540
    (index == 0) ifTrue:[^ nil].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   541
    ^ menus at:index
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   542
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   543
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   544
numberOfTitles:n
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   545
    "setup blank title-space to be filled in later"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   546
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   547
    menus := Array new:n.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   548
    titles := Array new:n
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   549
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   550
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   551
receiver:anObject 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   552
    "set the menu-receiver. Thats the one who gets the
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   553
     messages (both from myself and from my submenus).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   554
     This only sets the receiver for menus which are already
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   555
     created - menus added later should get their receiver in
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   556
     the creation send."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   557
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   558
    receiver := anObject.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   559
    menus notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   560
	menus do:[:aMenu |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   561
	    aMenu notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   562
		aMenu receiver:anObject
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   563
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   564
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   565
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   566
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   567
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   568
selectors
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   569
    "return the menu-selectors"
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   570
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   571
    ^ selectors
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   572
!
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   573
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   574
selectors:selectorArray
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   575
    "define the menu-selectors. These are used as accesskey only
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   576
     in menuAt: accesses. This makes PullDownMenu accesss
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   577
     somewhat more compatible to PopUpMenus."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   578
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   579
    selectors := selectorArray.
283
f65545e96d72 protocol to add more items
ca
parents: 250
diff changeset
   580
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   581
! !
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   582
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   583
!PullDownMenu methodsFor:'accessing-look'!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   584
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   585
backgroundColor:aColor
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   586
    "set the background drawing color.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   587
     You should not use this method; instead leave the value as
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   588
     defined in the styleSheet."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   589
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   590
    bgColor := aColor on:device
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   591
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   592
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   593
font:aFont
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   594
    "set the menus font.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   595
     adjusts menu-origins when font changes.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   596
     You should not use this method; instead leave the value as
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   597
     defined in the styleSheet."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   598
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   599
    aFont ~~ font ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   600
	super font:(aFont on:device).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   601
	self height:(font height + (font descent * 2)).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   602
	shown ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   603
	    self setMenuOrigins
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   604
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   605
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   606
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   607
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   608
foregroundColor:aColor
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   609
    "set the foreground drawing color.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   610
     You should not use this method; instead leave the value as
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   611
     defined in the styleSheet."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   612
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   613
    fgColor := aColor on:device
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   614
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   615
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   616
showSeparatingLines:aBoolean
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   617
    "turn on/off drawing of separating lines.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   618
     You should not use this method; instead leave the value as
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   619
     defined in the styleSheet."
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   620
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   621
    showSeparatingLines := aBoolean.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   622
    shown ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   623
	self setMenuOrigins.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   624
	self redraw
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   625
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   626
! !
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   627
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   628
!PullDownMenu methodsFor:'drawing '!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   629
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   630
drawActiveTitleSelected:selected
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   631
    |x|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   632
    activeMenuNumber notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   633
	x := self titleLenUpTo:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   634
	self drawTitle:(titles at:activeMenuNumber) x:x selected:selected 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   635
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   636
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   637
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   638
drawTitle:stringOrImage x:x0 selected:selected
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   639
    |y w x wSpace fg bg map|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   640
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   641
    selected ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   642
	fg := activeFgColor.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   643
	bg := activeBgColor
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   644
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   645
	fg := fgColor.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   646
	bg := bgColor
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   647
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   648
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   649
    wSpace := font widthOf:' '.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   650
    x := x0.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   651
    stringOrImage isString ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   652
	y := ((height - (font height)) // 2) + (font ascent) "+ topMargin".
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   653
	w := font widthOf:stringOrImage.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   654
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   655
	y := ((height - stringOrImage height) // 2) max:0.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   656
	w := stringOrImage width
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   657
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   658
    w := w + (wSpace * 2).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   659
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   660
    self paint:bg.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   661
    self fillRectangleX:x y:0 width:w height:height.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   662
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   663
    self is3D ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   664
	self drawEdgesForX:x y:0
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   665
		     width:w
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   666
		    height:height
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   667
		     level:(selected ifTrue:[onLevel] ifFalse:[offLevel])
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   668
    ].
250
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
   669
    self paint:fg on:bg.
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   670
    x := x + wSpace.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   671
    stringOrImage isString ifTrue:[
250
77012e65ac84 draw strings as opaque strings - OS/2 server has a bug with non-image strings
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
   672
	self displayOpaqueString:stringOrImage x:x y:y
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   673
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   674
	stringOrImage isImageOrForm ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   675
	    stringOrImage depth == 1 ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   676
		(map := stringOrImage colorMap) notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   677
		    self paint:(map at:2) on:(map at:1).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   678
		    self displayOpaqueForm:stringOrImage x:x y:y.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   679
		    ^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   680
		]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   681
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   682
	    self displayForm:stringOrImage x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   683
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   684
	    stringOrImage displayOn:self x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   685
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   686
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   687
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   688
    "Modified: 20.10.1995 / 22:03:27 / cg"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   689
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   690
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   691
highlightActiveTitle
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   692
    self drawActiveTitleSelected:true 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   693
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   694
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   695
redraw
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   696
    |x     "{ Class: SmallInteger }"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   697
     y     "{ Class: SmallInteger }"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   698
     index "{ Class: SmallInteger }" 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   699
     wSpace clr|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   700
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   701
    shown ifFalse: [ ^ self ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   702
    titles isNil ifTrue:[^ self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   703
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   704
    wSpace := (font widthOf:' ').
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   705
    x := 0.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   706
    y := height "- 1".
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   707
    index := 1.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   708
    titles do:[:title |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   709
	self drawTitle:title x:x selected:(index == activeMenuNumber).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   710
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   711
	title isString ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   712
	    x := x + (font widthOf:title).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   713
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   714
	    x := x + title width
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   715
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   716
	x := x + wSpace + wSpace.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   717
	showSeparatingLines ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   718
	    self is3D ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   719
		self paint:shadowColor.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   720
		self displayLineFromX:x y:0 toX:x y:y.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   721
		x := x + 1.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   722
		clr := lightColor.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   723
	    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   724
		clr := fgColor.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   725
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   726
	    self paint:clr.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   727
	    self displayLineFromX:x y:0 toX:x y:y.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   728
	    x := x + 1
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   729
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   730
	index := index + 1
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   731
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   732
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   733
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   734
unHighlightActiveTitle
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   735
    self drawActiveTitleSelected:false 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   736
! !
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   737
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   738
!PullDownMenu methodsFor:'event handling'!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   739
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   740
buttonMotion:state x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   741
    |titleIndex activeMenu activeLeft activeTop|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   742
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   743
    state == 0 ifTrue:[^ self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   744
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   745
    activeMenuNumber notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   746
	activeMenu := menus at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   747
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   748
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   749
    (y < height) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   750
	"moving around in title line"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   751
	activeMenu notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   752
	    activeMenu selection:nil
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   753
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   754
	titleIndex := self titleIndexForX:x.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   755
	titleIndex notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   756
	    (titleIndex ~~ activeMenuNumber) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   757
		self pullMenu:titleIndex
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   758
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   759
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   760
	    self hideActiveMenu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   761
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   762
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   763
	"moving around below"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   764
	activeMenu isNil ifTrue:[^self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   765
	activeLeft := activeMenu left.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   766
	(x between:activeLeft and:(activeMenu right)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   767
	    activeTop := activeMenu top.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   768
	    (y between:activeTop and:(activeMenu bottom)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   769
		"moving around in menu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   770
		activeMenu buttonMotion:state
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   771
				      x:(x - activeLeft)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   772
				      y:(y - activeTop).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   773
		^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   774
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   775
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   776
	"moved outside menu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   777
	activeMenu selection:nil
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   778
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   779
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   780
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   781
buttonPress:button x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   782
    |titleIndex activeMenu activeLeft activeTop m|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   783
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   784
    device ungrabPointer.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   785
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   786
    (y between:0 and:height) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   787
	titleIndex := self titleIndexForX:x.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   788
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   789
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   790
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   791
     now, titleIndex is non-nil if pressed within myself
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   792
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   793
    (titleIndex notNil and:[titleIndex ~~ activeMenuNumber]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   794
	m := self pullMenu:titleIndex.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   795
	(keepMenu and:[m notNil]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   796
	    device grabPointerInView:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   797
	    self cursor:Cursor upRightArrow
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   798
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   799
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   800
	(keepMenu and:[toggleKeep not]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   801
	    titleIndex == activeMenuNumber ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   802
		"same pressed again ... stay"
289
82d20a3e2fe8 dont grab if no menu pulled
Claus Gittinger <cg@exept.de>
parents: 283
diff changeset
   803
		titleIndex notNil ifTrue:[
82d20a3e2fe8 dont grab if no menu pulled
Claus Gittinger <cg@exept.de>
parents: 283
diff changeset
   804
		    device grabPointerInView:self.
82d20a3e2fe8 dont grab if no menu pulled
Claus Gittinger <cg@exept.de>
parents: 283
diff changeset
   805
		].
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   806
		^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   807
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   808
	    "moving around below"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   809
	    activeMenuNumber isNil ifTrue:[^self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   810
	    activeMenu := menus at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   811
	    activeLeft := activeMenu left.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   812
	    (x between:activeLeft and:(activeMenu right)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   813
		activeTop := activeMenu top.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   814
		(y between:activeTop and:(activeMenu bottom)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   815
		    "moving around in menu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   816
		    activeMenu buttonPress:button
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   817
					 x:(x - activeLeft)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   818
					 y:(y - activeTop).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   819
		    ^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   820
		]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   821
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   822
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   823
	self hideActiveMenu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   824
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   825
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   826
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   827
buttonRelease:button x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   828
    |activeMenu activeLeft activeTop hideMenu sel|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   829
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   830
    activeMenuNumber isNil ifTrue:[^self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   831
    activeMenu := menus at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   832
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   833
    hideMenu := false.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   834
    (y >= height) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   835
	"release below title-line"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   836
	activeLeft := activeMenu left.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   837
	"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   838
	 released in a submenu ?
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   839
	"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   840
	(x between:activeLeft and:(activeMenu right)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   841
	    activeTop := activeMenu top.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   842
	    (y between:activeTop and:(activeMenu bottom)) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   843
		"release in menu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   844
		self hideActiveMenu.   
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   845
		activeMenu buttonRelease:button
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   846
				       x:(x - activeLeft)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   847
				       y:(y - activeTop).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   848
		^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   849
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   850
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   851
	hideMenu := true.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   852
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   853
	y < 0 ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   854
	    hideMenu := true
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   855
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   856
	    activeMenu isNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   857
		selectors notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   858
		    sel := selectors at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   859
		    sel notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   860
			receiver perform:sel
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   861
		    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   862
		].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   863
		hideMenu := true.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   864
	    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   865
		keepMenu ifFalse:[   
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   866
		    hideMenu := true
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   867
		]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   868
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   869
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   870
    ].                  
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   871
    hideMenu ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   872
       self hideActiveMenu.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   873
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   874
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   875
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   876
keyPress:key x:x y:y
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   877
    <resource: #keyboard (#CursorLeft #CursorRight #MenuSelect)>
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   878
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   879
    |index m sel|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   880
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   881
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   882
     handle CursorLeft/Right for non-mouse operation
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   883
     (for example, if it has the explicit focus)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   884
     These will pull the previous/next menu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   885
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   886
    ((key == #CursorRight) or:[key == #CursorLeft]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   887
	activeMenuNumber isNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   888
	    index := (key == #CursorRight) ifTrue:[1] ifFalse:[menus size].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   889
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   890
	    (key == #CursorRight) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   891
		index := activeMenuNumber+1
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   892
	    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   893
		index := activeMenuNumber-1
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   894
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   895
	    index == 0 ifTrue:[index := menus size]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   896
	    ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   897
		index > menus size ifTrue:[index := 1]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   898
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   899
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   900
	self pullMenu:index.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   901
	^ self
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   902
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   903
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   904
    activeMenuNumber isNil ifTrue:[^self].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   905
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   906
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   907
     Return, space or the (virtual) MenuSelect key trigger
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   908
     a menu entry (for non-submenu entries).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   909
     Otherwise, if we have a submenu open,
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   910
     pass the key on to it ...
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   911
    "
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   912
    m := menus at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   913
    m isNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   914
	(key == #Return 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   915
	or:[key == #MenuSelect
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   916
	or:[key == Character space]]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   917
	    sel := selectors at:activeMenuNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   918
	    sel notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   919
		receiver perform:sel
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   920
	    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   921
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   922
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   923
	m keyPress:key x:0 y:0.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   924
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   925
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   926
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   927
showNoFocus:explicit
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   928
    "when stepping focus, hide any active menu"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   929
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   930
    self hideActiveMenu.
309
b5c9d68e95e1 new tabbing scheme (asking via #canTab); new focus change (passing explicit to showFocus/noFocus);
Claus Gittinger <cg@exept.de>
parents: 291
diff changeset
   931
    super showNoFocus:explicit
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   932
! !
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   933
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   934
!PullDownMenu methodsFor:'hiding/showing menus'!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   935
317
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   936
hide 
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   937
    "sent by an aborted menu"
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   938
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   939
    self hideActiveMenu.
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   940
!
f23de8b78f5e Escape closes pullDownMenus & PopUpLists
Claus Gittinger <cg@exept.de>
parents: 309
diff changeset
   941
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   942
hideActiveMenu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   943
    "hide currently active menu - release grab if there is any grab (keepMenu)"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   944
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   945
    ^ self hideActiveMenuRelease:true
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   946
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   947
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   948
hideActiveMenuRelease:aBoolean
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   949
    "hide currently active menu - release grab if aBoolean is true
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   950
     and a grab was set (keepMenu)"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   951
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   952
    |m|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   953
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   954
    activeMenuNumber notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   955
	(m := menus at:activeMenuNumber) notNil ifTrue:[
291
71f4a66b3281 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 289
diff changeset
   956
	    m beInvisible.
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   957
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   958
	self unHighlightActiveTitle.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   959
	activeMenuNumber := nil
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   960
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   961
    aBoolean ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   962
	device ungrabPointer. 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   963
	self cursor:Cursor normal
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   964
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   965
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   966
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   967
pullMenu:aNumber
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   968
    "activate a menu, return it or nil"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   969
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   970
    |subMenu r posY|
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   971
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   972
    activeMenuNumber notNil ifTrue:[self hideActiveMenuRelease:false].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   973
    activeMenuNumber := aNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   974
    subMenu := menus at:aNumber.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   975
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   976
    raiseTopWhenActivated ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   977
	self topView raise.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   978
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   979
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   980
    (activeMenuNumber notNil 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   981
    and:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   982
	 subMenu notNil
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   983
	 or:[selectors notNil and:[(selectors at:activeMenuNumber) notNil]]]) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   984
	    self highlightActiveTitle.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   985
	 ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   986
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   987
    subMenu notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   988
	subMenu origin:((left + (self titleLenUpTo:aNumber)) 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   989
		       @
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   990
		       (posY := height + subMenu borderWidth)).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   991
	subMenu hiddenOnRealize:false.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   992
	subMenu deselect.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   993
	subMenu create.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   994
	subMenu saveUnder:true.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   995
	subMenu superMenu:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   996
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   997
	subMenu right > (r := self right) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   998
	    subMenu origin:((r - subMenu width) @ posY).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
   999
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1000
	subMenu raise show.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1001
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1002
    ^ subMenu
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1003
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1004
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1005
regainControl
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1006
    keepMenu ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1007
	device grabPointerInView:self.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1008
	self cursor:Cursor upRightArrow
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1009
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1010
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1011
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
  1012
!PullDownMenu methodsFor:'initialize / release'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1013
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1014
create
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1015
    super create.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1016
    self setMenuOrigins
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1017
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1018
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1019
destroy
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1020
    "have to destroy the menus manually here,
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1021
     since they are no real subviews of myself"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1022
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1023
    menus notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1024
	menus do:[:m |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1025
	    m notNil ifTrue:[m destroy]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1026
	].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1027
	menus := nil
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1028
    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1029
    activeMenuNumber := nil.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1030
    super destroy.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1031
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1032
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1033
initCursor
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1034
    "set up a hand cursor"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1035
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1036
    cursor := Cursor hand
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1037
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1038
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1039
initStyle
130
claus
parents: 128
diff changeset
  1040
    |style|
claus
parents: 128
diff changeset
  1041
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1042
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1043
392
81343306d796 eliminated all DefaultFont classVars (are now classINSTvars)
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
  1044
"/    DefaultFont notNil ifTrue:[font := DefaultFont on:device].
81343306d796 eliminated all DefaultFont classVars (are now classINSTvars)
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
  1045
128
claus
parents: 119
diff changeset
  1046
    showSeparatingLines := DefaultSeparatingLines. "/ false.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1047
    DefaultViewBackground notNil ifTrue:[
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
  1048
	viewBackground := DefaultViewBackground on:device
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1049
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1050
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1051
    DefaultForegroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1052
	fgColor := DefaultForegroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1053
    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1054
	fgColor := Black.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1055
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1056
    DefaultBackgroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1057
	bgColor := DefaultBackgroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1058
    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1059
	bgColor := viewBackground.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1060
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1061
    onLevel := DefaultHilightLevel.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1062
    offLevel := DefaultLevel.
21
9ef599238fea *** empty log message ***
claus
parents: 5
diff changeset
  1063
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1064
    self is3D ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1065
	device hasColors ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1066
	    activeFgColor := Color name:'yellow'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1067
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1068
	    activeFgColor := White
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1069
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1070
	device hasGreyscales ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1071
	    activeBgColor := bgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1072
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1073
	    activeBgColor := fgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1074
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1075
	topMargin := 2.
21
9ef599238fea *** empty log message ***
claus
parents: 5
diff changeset
  1076
130
claus
parents: 128
diff changeset
  1077
	style := styleSheet name.
claus
parents: 128
diff changeset
  1078
	((style == #iris) or:[style == #motif]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1079
	    self level:2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1080
	    onLevel := 2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1081
	    offLevel := 0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1082
	    activeFgColor := fgColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1083
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1084
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1085
	activeFgColor := bgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1086
	activeBgColor := fgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1087
	topMargin := 0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1088
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1089
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
  1090
    edgeStyle := DefaultEdgeStyle.
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
  1091
    keepMenu := DefaultKeepMenu.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1092
    toggleKeep := DefaultToggleKeep.
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
  1093
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1094
    DefaultHilightForegroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1095
	activeFgColor := DefaultHilightForegroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1096
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1097
    DefaultHilightBackgroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1098
	activeBgColor := DefaultHilightBackgroundColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1099
    ].
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1100
    DefaultShadowColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1101
	shadowColor := DefaultShadowColor on:device
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1102
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1103
    DefaultLightColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1104
	lightColor := DefaultLightColor on:device
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1105
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1106
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1107
    bgColor := bgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1108
    fgColor := fgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1109
    activeBgColor := activeBgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1110
    activeFgColor := activeFgColor on:device.
133
claus
parents: 131
diff changeset
  1111
claus
parents: 131
diff changeset
  1112
    raiseTopWhenActivated := styleSheet at:'pullDownMenuRaiseTop' default:true.
claus
parents: 131
diff changeset
  1113
!
claus
parents: 131
diff changeset
  1114
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1115
initialize
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1116
    super initialize.
133
claus
parents: 131
diff changeset
  1117
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1118
    font := font on:device.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1119
    self origin:(0.0 @ 0.0)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1120
	 extent:(1.0 @ self preferredExtent y)
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1121
"/         extent:(1.0 @ (font height + (font descent * 2)  + topMargin)).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1122
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1123
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1124
recreate
128
claus
parents: 119
diff changeset
  1125
    "if the image was saved with an active menu, hide it"
claus
parents: 119
diff changeset
  1126
claus
parents: 119
diff changeset
  1127
    |m|
115
claus
parents: 112
diff changeset
  1128
claus
parents: 112
diff changeset
  1129
    activeMenuNumber notNil ifTrue:[
128
claus
parents: 119
diff changeset
  1130
	(m := menus at:activeMenuNumber) notNil ifTrue:[
claus
parents: 119
diff changeset
  1131
	    m unrealize.
claus
parents: 119
diff changeset
  1132
	].
115
claus
parents: 112
diff changeset
  1133
	activeMenuNumber := nil.
claus
parents: 112
diff changeset
  1134
    ].
claus
parents: 112
diff changeset
  1135
    super recreate.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1136
    self setMenuOrigins
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1137
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1138
133
claus
parents: 131
diff changeset
  1139
superView:aView
claus
parents: 131
diff changeset
  1140
    "when my superView changes, all of my menus must change as well"
claus
parents: 131
diff changeset
  1141
claus
parents: 131
diff changeset
  1142
    super superView:aView.
claus
parents: 131
diff changeset
  1143
    menus notNil ifTrue:[
claus
parents: 131
diff changeset
  1144
	menus do:[:aMenu |
claus
parents: 131
diff changeset
  1145
	    aMenu notNil ifTrue:[
claus
parents: 131
diff changeset
  1146
		aMenu superView:aView
claus
parents: 131
diff changeset
  1147
	    ]
claus
parents: 131
diff changeset
  1148
	]
claus
parents: 131
diff changeset
  1149
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1150
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1151
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1152
!PullDownMenu methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1153
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1154
indexOf:stringOrNumber
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1155
    "return the index of the menu with title; return 0 if not found.
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1156
     stringOrNumber may be a number, a selector from the selectorArray
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1157
     or a string from the title array."
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1158
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1159
    |idx|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1160
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1161
    stringOrNumber isNumber ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
  1162
	^ stringOrNumber
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1163
    ].
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1164
    selectors notNil ifTrue:[
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1165
	idx := selectors indexOf:stringOrNumber.
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1166
	idx ~~ 0 ifTrue:[^ idx].
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
  1167
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1168
    ^ titles indexOf:stringOrNumber
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1169
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1170
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1171
setMenuOrigins
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1172
    "adjust origins of menus when font changes"
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1173
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1174
    (font device == device) ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1175
	menus keysAndValuesDo:[:index :aMenu |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1176
	    aMenu notNil ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1177
		aMenu origin:((left + (self titleLenUpTo:index)) 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1178
			      @
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1179
			      (height + aMenu borderWidth))
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1180
	    ].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1181
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1182
    ]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1183
!
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1184
133
claus
parents: 131
diff changeset
  1185
someMenuItemLabeled:aLabel
claus
parents: 131
diff changeset
  1186
    "find a menu item.
claus
parents: 131
diff changeset
  1187
     Currently, in ST/X, instances of MenuItem are only created as dummy"
claus
parents: 131
diff changeset
  1188
claus
parents: 131
diff changeset
  1189
    |idx|
claus
parents: 131
diff changeset
  1190
claus
parents: 131
diff changeset
  1191
    idx := self indexOf:aLabel.
claus
parents: 131
diff changeset
  1192
    idx ~~ 0 ifTrue:[
claus
parents: 131
diff changeset
  1193
	^ MenuItem new menu:self index:idx
claus
parents: 131
diff changeset
  1194
    ].
claus
parents: 131
diff changeset
  1195
    menus notNil ifTrue:[
claus
parents: 131
diff changeset
  1196
	menus do:[:aMenu |
claus
parents: 131
diff changeset
  1197
	    |item|
claus
parents: 131
diff changeset
  1198
claus
parents: 131
diff changeset
  1199
	    aMenu notNil ifTrue:[
claus
parents: 131
diff changeset
  1200
		(item := aMenu someMenuItemLabeled:aLabel) notNil ifTrue:[
claus
parents: 131
diff changeset
  1201
		    ^ item
claus
parents: 131
diff changeset
  1202
		]
claus
parents: 131
diff changeset
  1203
	    ]
claus
parents: 131
diff changeset
  1204
	]
claus
parents: 131
diff changeset
  1205
    ].
claus
parents: 131
diff changeset
  1206
    ^ nil
claus
parents: 131
diff changeset
  1207
!
claus
parents: 131
diff changeset
  1208
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1209
titleIndexForX:x
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1210
    "given a click x-position, return index in title or nil"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1211
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1212
    |xstart "{ Class: SmallInteger }"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1213
     xend   "{ Class: SmallInteger }" 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1214
     wSpace wSep|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1215
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1216
    wSpace := (font widthOf:' ') * 2. 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1217
    showSeparatingLines ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1218
	self is3D ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1219
	    wSep := 2
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1220
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1221
	    wSep := 1
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1222
	]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1223
    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1224
	wSep := 0
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1225
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1226
    xstart := 0.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1227
    1 to:(titles size) do:[:index |
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1228
	|entry thisLength|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1229
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1230
	entry := titles at:index.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1231
	entry isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1232
	    thisLength := font widthOf:entry.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1233
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1234
	    thisLength := entry width
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1235
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1236
	xend := xstart + thisLength + wSpace + wSep.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1237
	(x between:xstart and:xend) ifTrue:[^ index].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1238
	xstart := xend
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1239
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1240
    ^ nil
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1241
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1242
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1243
titleLenUpTo:index
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1244
    "answer len (in pixels) of all title-strings up-to 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1245
     (but excluding) title-index. Used to compute x-position when drawing
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1246
     individual entries."
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1247
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1248
    |len "{ Class: SmallInteger }" 
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1249
     wSpace wSep|
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1250
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1251
    (index <= 1) ifTrue:[^ 0].
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1252
    wSpace := (font widthOf:' ').
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1253
    showSeparatingLines ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1254
	self is3D ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1255
	    wSep := 2
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1256
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1257
	    wSep := 1
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1258
	]
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1259
    ] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1260
	wSep := 0
133
claus
parents: 131
diff changeset
  1261
    ].
claus
parents: 131
diff changeset
  1262
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1263
    len := 0.
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1264
    titles from:1 to:(index - 1) do:[:entry |
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1265
	|thisLength|
128
claus
parents: 119
diff changeset
  1266
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1267
	entry isString ifTrue:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1268
	    thisLength := (font widthOf:entry).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1269
	] ifFalse:[
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1270
	    thisLength := entry width
131
claus
parents: 130
diff changeset
  1271
	].
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1272
	len := len + thisLength + wSpace + wSep + wSpace.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1273
    ].
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1274
    ^ len
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1275
! !
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1276
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1277
!PullDownMenu methodsFor:'queries'!
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1278
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1279
preferredExtent
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1280
    |w|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1281
202
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1282
    w := self titleLenUpTo:(titles size + 1).
01f3cbb8e20e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 174
diff changeset
  1283
    ^ w @ (font height + (font descent * 2) "+ topMargin" + (margin*2)).
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1284
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1285
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1286
!PullDownMenu methodsFor:'submenu notifications'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1287
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1288
showActive
128
claus
parents: 119
diff changeset
  1289
    "sent by a menu to tell me that it starts to perform
claus
parents: 119
diff changeset
  1290
     its menu action."
131
claus
parents: 130
diff changeset
  1291
claus
parents: 130
diff changeset
  1292
    windowGroup notNil ifTrue:[windowGroup showCursor:Cursor wait]
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
  1293
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
  1294
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1295
showPassive
128
claus
parents: 119
diff changeset
  1296
    "sent by a menu to tell me that it finished its menu-action.
claus
parents: 119
diff changeset
  1297
     Here, we hide the currently active menu."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1298
131
claus
parents: 130
diff changeset
  1299
    self hideActiveMenu.
claus
parents: 130
diff changeset
  1300
    windowGroup notNil ifTrue:[windowGroup restoreCursors]
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
  1301
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
  1302
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1303
submenuTriggered 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1304
    "sent by a sub-submenu to tell me that it finished its menu-action."
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1305
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
  1306
    self showPassive
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1307
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
  1308
205
6814c0bf8df8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
  1309
!PullDownMenu class methodsFor:'documentation'!
6814c0bf8df8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
  1310
6814c0bf8df8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
  1311
version
392
81343306d796 eliminated all DefaultFont classVars (are now classINSTvars)
Claus Gittinger <cg@exept.de>
parents: 317
diff changeset
  1312
    ^ '$Header: /cvs/stx/stx/libwidg/Attic/PullDMenu.st,v 1.35 1996-02-24 16:34:55 cg Exp $'
205
6814c0bf8df8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
  1313
! !