PullDMenu.st
author claus
Sat, 25 Mar 1995 23:21:46 +0100
changeset 110 eb59f6e31e84
parent 95 7535cfca9509
child 112 81633ba1bf40
permissions -rw-r--r--
*** empty log message ***
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
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
View subclass:#PullDownMenu
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
    14
       instanceVariableNames:'menus titles selectors activeMenuNumber
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    15
			      showSeparatingLines topMargin
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    16
			      fgColor bgColor activeFgColor activeBgColor
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
    17
			      onLevel offLevel edgeStyle
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    18
			      keepMenu toggleKeep'
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    19
       classVariableNames:'DefaultFont
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    20
			   DefaultViewBackground 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    21
			   DefaultForegroundColor 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    22
			   DefaultBackgroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    23
			   DefaultHilightForegroundColor 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    24
			   DefaultHilightBackgroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    25
			   DefaultLevel DefaultHilightLevel
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
    26
			   DefaultShadowColor DefaultLightColor 
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    27
			   DefaultEdgeStyle DefaultKeepMenu DefaultToggleKeep'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
       category:'Views-Menus'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
PullDownMenu comment:'
5
claus
parents: 3
diff changeset
    33
COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    34
	     All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    36
$Header: /cvs/stx/stx/libwidg/Attic/PullDMenu.st,v 1.13 1995-03-25 22:21:03 claus Exp $
3
claus
parents: 0
diff changeset
    37
'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
3
claus
parents: 0
diff changeset
    39
!PullDownMenu class methodsFor:'documentation'!
claus
parents: 0
diff changeset
    40
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    41
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    42
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    43
 COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    44
	      All Rights Reserved
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    45
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    46
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    47
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    48
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    49
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    50
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    51
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    52
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    53
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    54
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    55
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    56
"
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    57
$Header: /cvs/stx/stx/libwidg/Attic/PullDMenu.st,v 1.13 1995-03-25 22:21:03 claus Exp $
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    58
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    59
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    60
3
claus
parents: 0
diff changeset
    61
documentation
claus
parents: 0
diff changeset
    62
"
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    63
    PullDown menu provides the top (always visible) part of these menus. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    64
    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
    65
    PullDownMenus entries is pressed.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    67
    Instance variables:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    69
      menus                   <aCollection>   the sub menus
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    70
      titles                  <aCollection>   the strings in the menu
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    71
      activeMenuNumber        <Number>        the index of the currently active menu
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    72
      showSeparatingLines     <Boolean>       show separating lines between my menu-strings
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    73
      topMargin               <Number>        number of pixels at top
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    74
      fgColor                 <Color>         color to draw passive menu-titles
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    75
      bgColor                 <Color>         color to draw passive menu-titles
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    76
      activeFgColor           <Color>         color to draw activated menu-titles
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    77
      activeBgColor           <Color>         color to draw activated menu-titles
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    78
      onLevel                 <Integer>       level of entry-buttons when pressed
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    79
      offLevel                <Integer>       level of entry-buttons when released
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    80
      keepmenu                <Boolean>       if on, pulled menu stays on click,
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    81
					      till clicked again (motif & windows behavior)
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    82
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    83
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    84
    StyleSheet values:
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
    85
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    86
      pullDownMenuViewBackground              view background Color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    87
					      default: menuViewBackground
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    88
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    89
      pullDownMenuForegroundColor             foreground drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    90
					      default: menuForegroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    91
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    92
      pullDownMenuBackgroundColor             background drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    93
					      default: menuBackgroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    94
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    95
      pullDownMenuHilightForegroundColor      active foreground drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    96
					      default: menuHilightForegroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    97
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    98
      pullDownMenuHilightBackgroundColor      active background drawing color for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
    99
					      default: menuHilightBackgroundColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   100
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   101
      pullDownMenuHilightLevel                level (3D only) when active
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   102
					      default: menuHilightLevel
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   103
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   104
      pullDownMenuEdgeStyle                   edge style (nil or #soft)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   105
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   106
      pullDownMenuKeepMenu                    if true, pulled menu stays open until button
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   107
					      is pressed again (motif behavior)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   108
					      if false, menu closes on release (default)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   109
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   110
      pullDownMenuToggleKeep                  if true, pulled menu closes when an entry is pressed
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   111
					      again. Otherwise, only press outside outside of
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   112
					      the entry hides it.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   113
					      default is false
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   114
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   115
      pullDownMenuLevel                       level (3D only)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   116
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   117
      pullDownMenuFont                        font to use for the menu bar
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   118
					      default: menuFont
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   119
"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   120
!
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   121
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   122
examples 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   123
"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   124
    |top menu|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   125
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   126
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   127
    menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   128
    menu labels:#('foo' 'bar').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   129
    menu selectors:#(foo bar).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   130
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   131
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   132
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   133
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   134
    menu at:#bar 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   135
	 putLabels:#('bar1' 'bar2' 'bar3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   136
	 selectors:#(bar1 bar2 bar3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   137
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   138
    top open
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   139
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   140
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   141
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   142
    'empty entries are possible ...'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   143
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   144
    |top menu|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   145
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   146
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   147
    menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   148
    menu labels:#('foo' 'bar').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   149
    menu selectors:#(foo bar).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   150
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   151
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   152
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   153
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   154
    top open
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   155
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   156
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   157
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   158
    '... for example as separators'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   159
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   160
    |top menu|
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   161
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   162
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   163
    menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   164
    menu labels:#('foo' '    ' 'bar' ' baz' '    ' 'moreFoo' 'moreBar' 'moreBaz').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   165
    menu selectors:#(foo nil bar baz nil moreFoo moreBar moreBaz).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   166
    menu showSeparatingLines:true.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   167
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   168
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   169
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   170
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   171
    menu at:#bar 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   172
	 putLabels:#('bar1' 'bar2' 'bar3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   173
	 selectors:#(bar1 bar2 bar3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   174
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   175
    menu at:#baz 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   176
	 putLabels:#('baz1' 'baz2' 'baz3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   177
	 selectors:#(baz1 baz2 baz3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   178
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   179
    top open
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   180
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   181
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   182
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   183
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   184
    'use menus default height'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   185
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   186
    |top menu|
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   187
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   188
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   189
    menu := PullDownMenu in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   190
    menu origin:0.0@0.0 corner:1.0@(menu height).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   191
    menu labels:#('foo' 'bar').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   192
    menu selectors:#(foo bar).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   193
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   194
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   195
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   196
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   197
    top open
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   198
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   199
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   200
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   201
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   202
    'although you can change the font, colors etc (as shown below)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   203
     you should NOT do it - since if you do so, the styleSheet settings
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   204
     are ineffective (which users wont like probably)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   205
     BTW: The styleSheet entries for below are pullDownMenuForegroundColor,
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   206
	  pullDownMenuBackgroundColor and pullDownMenuFont'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   207
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   208
    |top menu|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   209
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   210
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   211
    menu := PullDownMenu in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   212
    menu font:(Font family:'courier' size:20).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   213
    menu foregroundColor:Color red.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   214
    menu backgroundColor:Color yellow.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   215
    menu viewBackground:Color yellow.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   216
    menu showSeparatingLines:true.
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   217
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   218
    menu origin:0.0@0.0 corner:1.0@(menu height).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   219
    menu labels:#('foo' 'bar').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   220
    menu selectors:#(foo bar).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   221
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   222
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   223
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   224
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   225
    (menu menuAt:#foo) font:(Font family:'courier' size:36).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   226
    top open
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   227
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   228
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   229
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   230
    'you can use icons, too ...'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   231
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   232
    |labels top menu|
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   233
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   234
    top := StandardSystemView new.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   235
    menu := PullDownMenu in:top.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   236
    menu origin:0.0@0.0 corner:1.0@(menu height).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   237
    labels := Array with:(Image fromFile:'SmalltalkX.xbm')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   238
		    with:'foo'
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   239
		    with:'bar'.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   240
    menu labels:labels.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   241
    menu selectors:#(about foo bar).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   242
    menu at:#about 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   243
	 putLabels:#('about PullDownMenus')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   244
	 selectors:#(aboutMenus)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   245
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   246
    menu at:#foo
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   247
	 putLabels:#('foo1' 'foo2' 'foo3')
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   248
	 selectors:#(foo1 foo2 foo3)
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   249
	 receiver:nil.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   250
    top open
3
claus
parents: 0
diff changeset
   251
"
claus
parents: 0
diff changeset
   252
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   254
!PullDownMenu class methodsFor:'defaults'!
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   255
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   256
updateStyleCache
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   257
    "extract values from the styleSheet and cache them in class variables"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   258
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   259
    DefaultViewBackground := StyleSheet colorAt:'pullDownMenuViewBackground'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   260
    DefaultViewBackground isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   261
	DefaultViewBackground := StyleSheet colorAt:'menuViewBackground'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   262
    ].
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   263
    DefaultForegroundColor := StyleSheet colorAt:'pullDownMenuForegroundColor'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   264
    DefaultForegroundColor isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   265
	DefaultForegroundColor := StyleSheet colorAt:'menuForegroundColor'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   266
    ].
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   267
    DefaultBackgroundColor := StyleSheet colorAt:'pullDownMenuBackgroundColor'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   268
    DefaultBackgroundColor isNil ifTrue:[
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   269
	DefaultViewBackground notNil ifTrue:[
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   270
	    DefaultBackgroundColor := DefaultViewBackground
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   271
	] ifFalse:[
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   272
	    DefaultBackgroundColor := StyleSheet colorAt:'menuBackgroundColor'.
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   273
	]
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   274
    ].
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   275
    DefaultHilightForegroundColor := StyleSheet colorAt:'pullDownMenuHilightForegroundColor'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   276
    DefaultHilightForegroundColor isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   277
	DefaultHilightForegroundColor := StyleSheet colorAt:'menuHilightForegroundColor'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   278
    ].
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   279
    DefaultHilightBackgroundColor := StyleSheet colorAt:'pullDownMenuHilightBackgroundColor'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   280
    DefaultHilightBackgroundColor isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   281
	DefaultHilightBackgroundColor := StyleSheet colorAt:'menuHilightBackgroundColor'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   282
    ].
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   283
    DefaultHilightLevel := StyleSheet at:'pullDownMenuHilightLevel'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   284
    DefaultHilightLevel isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   285
	DefaultHilightLevel := StyleSheet at:'menuHilightLevel' default:0.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   286
    ].
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
   287
    DefaultEdgeStyle := StyleSheet at:'pullDownMenuEdgeStyle'.
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   288
    DefaultKeepMenu := StyleSheet at:'pullDownMenuKeepMenu' default:false.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   289
    DefaultToggleKeep := StyleSheet at:'pullDownMenuToggleKeep' default:false.
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   290
    DefaultLevel := StyleSheet at:'pullDownMenuLevel' default:1.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   291
    DefaultFont := StyleSheet fontAt:'pullDownMenuFont'.
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   292
    DefaultFont isNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   293
	DefaultFont := StyleSheet fontAt:'menuFont'.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   294
    ].
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   295
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   296
    "
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   297
     PullDownMenu updateStyleCache
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   298
    "
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   299
! !
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   300
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
!PullDownMenu class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
labels:titleArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
    "create and return a new PullDownMenu"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
    ^ self new labels:titleArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   309
!PullDownMenu methodsFor:'initialize / release'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
    font := font on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
    self origin:(0.0 @ 0.0)
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   316
	 extent:(1.0 @ (font height + (font descent * 2)  + topMargin)).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
initStyle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
    showSeparatingLines := false.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   323
    DefaultViewBackground notNil ifTrue:[
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   324
	viewBackground := DefaultViewBackground on:device
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   325
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   326
60
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   327
    DefaultFont notNil ifTrue:[
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   328
	font := DefaultFont on:device
f3c738c24ce6 mostly style
claus
parents: 59
diff changeset
   329
    ].
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   330
    DefaultForegroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   331
	fgColor := DefaultForegroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   332
    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   333
	fgColor := Black.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   334
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   335
    DefaultBackgroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   336
	bgColor := DefaultBackgroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   337
    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   338
	bgColor := viewBackground.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   339
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   340
    onLevel := DefaultHilightLevel.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   341
    offLevel := DefaultLevel.
21
9ef599238fea *** empty log message ***
claus
parents: 5
diff changeset
   342
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
    self is3D ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   344
	device hasColors ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   345
	    activeFgColor := Color name:'yellow'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   346
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   347
	    activeFgColor := White
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   348
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   349
	device hasGreyscales ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   350
	    activeBgColor := bgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   351
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   352
	    activeBgColor := fgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   353
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   354
	topMargin := 2.
21
9ef599238fea *** empty log message ***
claus
parents: 5
diff changeset
   355
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   356
	((StyleSheet name == #iris) or:[StyleSheet name == #motif]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   357
	    self level:2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   358
	    onLevel := 2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   359
	    offLevel := 0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   360
	    activeFgColor := fgColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   361
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   363
	activeFgColor := bgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   364
	activeBgColor := fgColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   365
	topMargin := 0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   366
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   367
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
   368
    edgeStyle := DefaultEdgeStyle.
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
   369
    keepMenu := DefaultKeepMenu.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   370
    toggleKeep := DefaultToggleKeep.
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 60
diff changeset
   371
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   372
    DefaultHilightForegroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   373
	activeFgColor := DefaultHilightForegroundColor
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   374
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   375
    DefaultHilightBackgroundColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   376
	activeBgColor := DefaultHilightBackgroundColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
    ].
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   378
    DefaultShadowColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   379
	shadowColor := DefaultShadowColor on:device
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   380
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   381
    DefaultLightColor notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   382
	lightColor := DefaultLightColor on:device
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   383
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   384
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   385
    bgColor := bgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   386
    fgColor := fgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   387
    activeBgColor := activeBgColor on:device.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   388
    activeFgColor := activeFgColor on:device.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   389
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
recreate
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
    super create.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
    self setMenuOrigins
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
create
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
    super create.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
    self setMenuOrigins
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   399
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   400
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   401
destroy
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   402
    super destroy.
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   403
    "
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   404
     have to destroy the menus manually here,
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   405
     since they are no real subviews of myself
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   406
    "
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   407
    menus notNil ifTrue:[
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   408
	menus do:[:m |
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   409
	    m notNil ifTrue:[m destroy]
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   410
	].
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   411
	menus := nil
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   412
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   413
    activeMenuNumber := nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
!PullDownMenu methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
showSeparatingLines:aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
    "turn on/off drawing of separating lines"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
    showSeparatingLines := aBoolean.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
    shown ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   423
	self redraw
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   424
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   425
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   426
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
numberOfTitles:n
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
    "setup blank title-space to be filled in later"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   429
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   430
    menus := Array new:n.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   431
    titles := Array new:n
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   432
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   433
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   434
labels:titleArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   435
    "define the menu-titles (group-headers)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   436
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   437
    |numberOfLabels|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   438
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   439
    numberOfLabels := titleArray size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   440
    menus := Array new:numberOfLabels.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   441
    titles := Array new:numberOfLabels.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   442
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   443
    titleArray keysAndValuesDo:[:index :entry |
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   444
	|e|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   445
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   446
	entry isImage ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   447
	    e := entry on:device
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   448
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   449
	    e := entry printString
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   450
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   451
	titles at:index put:e
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   452
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   453
    shown ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   454
	self clear.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   455
	self redraw
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   456
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   457
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   458
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   459
labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   460
    "return the menu-titles (group-headers)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   461
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   462
    ^ titles
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   463
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   464
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   465
selectors:selectorArray
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   466
    "define the menu-selectors. These are used as accesskey only
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   467
     in menuAt: accesses. This makes PullDownMenu accesss
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   468
     somewhat more compatible to PopUpMenus."
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   469
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   470
    selectors := selectorArray.
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   471
!
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   472
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
font:aFont
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
    "adjust menu-origins when font changes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
3
claus
parents: 0
diff changeset
   476
    super font:(aFont on:device).
claus
parents: 0
diff changeset
   477
    self height:(font height + (font descent * 2)).
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   478
    shown ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   479
	self setMenuOrigins
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   480
    ]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   481
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   482
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   483
foregroundColor:aColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   484
    fgColor := aColor on:device
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   485
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   486
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   487
backgroundColor:aColor
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   488
    bgColor := aColor on:device
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   489
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   490
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   491
menuAt:string
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   492
    "return the menu with the title; return nil if not found"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   493
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   494
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   495
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   496
    index := self indexOf:string.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   497
    (index == 0) ifTrue:[^ nil].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   498
    ^ menus at:index
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   499
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   500
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   501
at:aString putMenu:aMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   502
    "set the menu under the title, aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   503
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   504
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   505
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   506
    index := self indexOf:aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   507
    (index == 0) ifTrue:[^ nil].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   508
    aMenu origin:((left + (self titleLenUpTo:index)) 
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   509
		  @
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   510
		  (height + aMenu borderWidth)).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   511
    aMenu hidden:true.
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   512
    menus at:index put:aMenu.
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   513
    aMenu masterView:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   514
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   515
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   516
at:aString putLabels:labels selectors:selectors args:args receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   517
    "create and set the menu under the title, aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   518
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   519
    |menuView|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   520
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   521
    menuView := MenuView labels:labels
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   522
		      selectors:selectors
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   523
			   args:args
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   524
		       receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   525
			    for:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   526
    self at:aString putMenu:menuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   527
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   528
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   529
at:aString putLabels:labels selector:selector args:args receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   530
    "create and set the menu under the title, aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   531
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   532
    |menuView|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   533
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   534
    menuView := MenuView labels:labels
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   535
		       selector:selector
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   536
			   args:args
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   537
		       receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   538
			    for:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   539
    self at:aString putMenu:menuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   540
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   541
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   542
at:aString putLabels:labels selectors:selectors receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   543
    "create and set the menu under the title, aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   544
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   545
    |menuView|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   546
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   547
    menuView := MenuView labels:labels
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   548
		      selectors:selectors
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   549
		       receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   550
			    for:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   551
    self at:aString putMenu:menuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   552
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   553
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   554
!PullDownMenu methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   555
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   556
titleLenUpTo:index
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   557
    "answer len (in pixels) of all title-strings up-to 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   558
     (but excluding) title-index. Used to compute x-position when drawing
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   559
     individual entries."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   560
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   561
    |len "{ Class: SmallInteger }" 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   562
     wSpace wSep|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   563
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   564
    (index <= 1) ifTrue:[^ 0].
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   565
    wSpace := (font widthOf:' ').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   566
    showSeparatingLines ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   567
	self is3D ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   568
	    wSep := 2
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   569
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   570
	    wSep := 1
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   571
	]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   572
    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   573
	wSep := 0
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   574
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   575
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   576
    len := 0.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   577
    titles from:1 to:(index - 1) do:[:entry |
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   578
	|thisLength|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   579
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   580
	entry isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   581
	    thisLength := (font widthOf:entry).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   582
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   583
	    thisLength := entry width
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   584
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   585
	len := len + thisLength + wSpace + wSep + wSpace.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   586
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   587
    ^ len
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   588
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   589
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   590
indexOf:stringOrNumber
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   591
    "return the index of the menu with title; return 0 if not found.
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   592
     stringOrNumber may be a number, a selector from the selectorArray
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   593
     or a string from the title array."
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   594
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   595
    |idx|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   596
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   597
    stringOrNumber isNumber ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   598
	^ stringOrNumber
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   599
    ].
91
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   600
    selectors notNil ifTrue:[
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   601
	idx := selectors indexOf:stringOrNumber.
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   602
	idx ~~ 0 ifTrue:[^ idx].
e8db16616e97 *** empty log message ***
claus
parents: 77
diff changeset
   603
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   604
    ^ titles indexOf:stringOrNumber
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   605
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   606
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   607
setMenuOrigins
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   608
    "adjust origins of menus when font changes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   609
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   610
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   611
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   612
    (font device == device) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   613
	index := 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   614
	menus do:[:aMenu |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   615
	    aMenu notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   616
		aMenu origin:((left + (self titleLenUpTo:index)) 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   617
			      @
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   618
			      (height + aMenu borderWidth))
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   619
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   620
	    index := index + 1
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   621
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   622
    ]
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   623
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   624
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   625
titleIndexForX:x
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   626
    "given a click x-position, return index in title or nil"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   627
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   628
    |xstart "{ Class: SmallInteger }"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   629
     xend   "{ Class: SmallInteger }" 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   630
     wSpace wSep|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   631
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   632
    wSpace := (font widthOf:' ') * 2. 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   633
    showSeparatingLines ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   634
	self is3D ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   635
	    wSep := 2
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   636
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   637
	    wSep := 1
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   638
	]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   639
    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   640
	wSep := 0
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   641
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   642
    xstart := 0.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   643
    1 to:(titles size) do:[:index |
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   644
	|entry thisLength|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   645
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   646
	entry := titles at:index.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   647
	entry isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   648
	    thisLength := font widthOf:entry.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   649
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   650
	    thisLength := entry width
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   651
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   652
	xend := xstart + thisLength + wSpace + wSep.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   653
	(x between:xstart and:xend) ifTrue:[^ index].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   654
	xstart := xend
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   655
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   656
    ^ nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   657
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   658
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   659
!PullDownMenu methodsFor:'hiding/showing menus'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   660
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   661
hideActiveMenuRelease:aBoolean
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   662
    "hide currently active menu - release grab if aBoolean is true
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   663
     and a grab was set (keepMenu)"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   664
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   665
    activeMenuNumber notNil ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   666
	(menus at:activeMenuNumber) unrealize.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   667
	self unHighlightActiveTitle.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   668
	activeMenuNumber := nil
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   669
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   670
    aBoolean ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   671
	device ungrabPointer. 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   672
	self cursor:Cursor normal
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   673
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   674
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   675
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   676
hideActiveMenu
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   677
    "hide currently active menu - release grab if there is any grab (keepMenu)"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   678
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   679
    ^ self hideActiveMenuRelease:true
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   680
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   681
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   682
pullMenu:aNumber
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   683
    "activate a menu, return it or nil"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   684
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   685
    |subMenu|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   686
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   687
    activeMenuNumber notNil ifTrue:[self hideActiveMenuRelease:false].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   688
    subMenu := menus at:aNumber.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   689
    subMenu notNil ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   690
	activeMenuNumber := aNumber.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   691
	self highlightActiveTitle.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   692
	subMenu deselect.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   693
	subMenu create.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   694
	subMenu saveUnder:true.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   695
	subMenu superMenu:self.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   696
	subMenu raise show
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   697
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   698
    ^ subMenu
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   699
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   700
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   701
regainControl
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   702
    keepMenu ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   703
	device grabPointerInView:self.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   704
	self cursor:Cursor upRightArrow
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   705
    ]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   706
! !
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   707
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   708
!PullDownMenu methodsFor:'drawing '!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   709
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   710
redraw
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   711
    |string
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   712
     x     "{ Class: SmallInteger }"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   713
     y     "{ Class: SmallInteger }"
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   714
     index "{ Class: SmallInteger }" 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   715
     wSpace|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   716
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   717
    shown ifFalse: [ ^ self ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   718
    titles isNil ifTrue:[^ self].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   719
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   720
    wSpace := (font widthOf:' ').
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   721
    x := 0.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   722
    y := height "- 1".
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   723
    index := 1.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   724
    titles do:[:title |
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   725
	self drawTitle:title x:x selected:(index == activeMenuNumber).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   726
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   727
	title isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   728
	    x := x + (font widthOf:title).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   729
	] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   730
	    x := x + title width
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   731
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   732
	x := x + wSpace + wSpace.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   733
	showSeparatingLines ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   734
	    self is3D ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   735
		self paint:shadowColor.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   736
		self displayLineFromX:x y:0 toX:x y:y.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   737
		x := x + 1.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   738
		self paint:lightColor.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   739
	    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   740
		self paint:fgColor.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   741
	    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   742
	    self displayLineFromX:x y:0 toX:x y:y.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   743
	    x := x + 1
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   744
	].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   745
	index := index + 1
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   746
    ]
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   747
!
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   748
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   749
drawTitle:stringOrImage x:x0 selected:selected
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   750
    |y w x wSpace|
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   751
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   752
    wSpace := font widthOf:' '.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   753
    x := x0.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   754
    stringOrImage isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   755
	y := ((height - (font height)) // 2) + (font ascent) "+ topMargin".
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   756
	w := font widthOf:stringOrImage.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   757
    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   758
	y := ((height - stringOrImage height) // 2) max:0.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   759
	w := stringOrImage width
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   760
    ].
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   761
    w := w + (wSpace * 2).
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   762
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   763
    selected ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   764
	self paint:activeBgColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   765
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   766
	self paint:bgColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   767
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   768
    self fillRectangleX:x y:0 width:w height:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   769
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   770
    self is3D ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   771
	self drawEdgesForX:x y:0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   772
		     width:w
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   773
		    height:height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   774
		     level:(selected ifTrue:[onLevel] ifFalse:[offLevel])
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   775
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   776
    selected ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   777
	self paint:activeFgColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   778
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   779
	self paint:fgColor
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   780
    ].
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   781
    x := x + wSpace.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   782
    stringOrImage isString ifTrue:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   783
	self displayString:stringOrImage x:x y:y
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   784
    ] ifFalse:[
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   785
	self displayForm:stringOrImage x:x y:y
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   786
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   787
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   788
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   789
highlightActiveTitle
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   790
    |x|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   791
    activeMenuNumber notNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   792
	x := self titleLenUpTo:activeMenuNumber.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   793
	self drawTitle:(titles at:activeMenuNumber) x:x selected:true
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   794
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   795
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   796
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   797
unHighlightActiveTitle
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   798
    |x|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   799
    activeMenuNumber notNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   800
	x := self titleLenUpTo:activeMenuNumber.
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   801
	self drawTitle:(titles at:activeMenuNumber) x:x selected:false
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   802
    ]
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   803
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   804
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   805
!PullDownMenu methodsFor:'submenu notifications'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   806
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   807
showActive
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   808
    "sent by a submenu to tell me that it started to perform
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   809
     its menu action"
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   810
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   811
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   812
showPassive
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   813
    "sent by a submenu to tell me that it finished its menu-action."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   814
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   815
    self hideActiveMenu
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   816
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   817
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   818
submenuTriggered 
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   819
    "sent by a sub-submenu to tell me that it finished its menu-action."
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   820
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   821
    self showPassive
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   822
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   823
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   824
!PullDownMenu methodsFor:'event handling'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   825
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   826
buttonPress:button x:x y:y
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   827
    |titleIndex activeMenu activeLeft activeTop m|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   828
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   829
    device ungrabPointer.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   830
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   831
    (y between:0 and:height) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   832
	titleIndex := self titleIndexForX:x.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   833
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   834
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   835
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   836
     now, titleIndex is non-nil if pressed within myself
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   837
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   838
    (titleIndex notNil and:[titleIndex ~~ activeMenuNumber]) ifTrue:[
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   839
	m := self pullMenu:titleIndex.
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   840
	(keepMenu and:[m notNil]) ifTrue:[
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   841
	    device grabPointerInView:self.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   842
	    self cursor:Cursor upRightArrow
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   843
	]
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   844
    ] ifFalse:[
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   845
	(keepMenu and:[toggleKeep not]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   846
	    titleIndex == activeMenuNumber ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   847
		"same pressed again ... stay"
110
eb59f6e31e84 *** empty log message ***
claus
parents: 95
diff changeset
   848
		device grabPointerInView:self.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   849
		^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   850
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   851
	    "moving around below"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   852
	    activeMenuNumber isNil ifTrue:[^self].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   853
	    activeMenu := menus at:activeMenuNumber.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   854
	    activeLeft := activeMenu left.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   855
	    (x between:activeLeft and:(activeMenu right)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   856
		activeTop := activeMenu top.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   857
		(y between:activeTop and:(activeMenu bottom)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   858
		    "moving around in menu"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   859
		    activeMenu buttonPress:button
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   860
					 x:(x - activeLeft)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   861
					 y:(y - activeTop).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   862
		    ^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   863
		]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   864
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   865
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   866
	self hideActiveMenu
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   867
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   868
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   869
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   870
buttonMotion:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   871
    |titleIndex activeMenu activeLeft activeTop|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   872
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   873
    (y < height) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   874
	"moving around in title line"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   875
	activeMenuNumber notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   876
	    (menus at:activeMenuNumber) selection:nil
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   877
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   878
	titleIndex := self titleIndexForX:x.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   879
	titleIndex notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   880
	    (titleIndex ~~ activeMenuNumber) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   881
		self pullMenu:titleIndex
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   882
	    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   883
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   884
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   885
	"moving around below"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   886
	activeMenuNumber isNil ifTrue:[^self].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   887
	activeMenu := menus at:activeMenuNumber.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   888
	activeLeft := activeMenu left.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   889
	(x between:activeLeft and:(activeMenu right)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   890
	    activeTop := activeMenu top.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   891
	    (y between:activeTop and:(activeMenu bottom)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   892
		"moving around in menu"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   893
		activeMenu buttonMotion:button
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   894
				      x:(x - activeLeft)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   895
				      y:(y - activeTop).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   896
		^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   897
	    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   898
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   899
	"moved outside menu"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   900
	activeMenu selection:nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   901
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   902
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   903
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   904
buttonRelease:button x:x y:y
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   905
    |activeMenu activeLeft activeTop hideMenu|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   906
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   907
    hideMenu := false.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   908
    (y >= height) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   909
	"release below title-line"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   910
	activeMenuNumber isNil ifTrue:[^self].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   911
	activeMenu := menus at:activeMenuNumber.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   912
	activeLeft := activeMenu left.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   913
	"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   914
	 released in a submenu ?
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   915
	"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   916
	(x between:activeLeft and:(activeMenu right)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   917
	    activeTop := activeMenu top.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   918
	    (y between:activeTop and:(activeMenu bottom)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   919
		"release in menu"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   920
		self hideActiveMenu.   
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   921
		activeMenu buttonRelease:button
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   922
				       x:(x - activeLeft)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   923
				       y:(y - activeTop).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   924
		^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   925
	    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   926
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   927
	hideMenu := true.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   928
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   929
	y < 0 ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   930
	    hideMenu := true
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   931
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   932
	    keepMenu ifFalse:[   
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   933
		hideMenu := true
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   934
	    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   935
	]
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   936
    ].                  
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   937
    hideMenu ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   938
       self hideActiveMenu.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   939
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   940
! !