PopUpMenu.st
author claus
Mon, 27 Feb 1995 11:41:57 +0100
changeset 95 7535cfca9509
parent 81 0c97b2905d5b
child 96 5996b2afa4fb
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
PopUpView subclass:#PopUpMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'menuView lastSelection memorize hideOnLeave
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    15
			      actionLabels actionLines actionValues'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
       category:'Views-Menus'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
PopUpMenu comment:'
5
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    23
	      All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
    25
$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.13 1995-02-27 10:40:35 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    28
!PopUpMenu class methodsFor:'documentation'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    29
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    30
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    31
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    32
 COPYRIGHT (c) 1989 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    33
	      All Rights Reserved
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    34
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    35
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    36
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    37
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    38
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    39
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    40
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    41
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    42
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    43
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    44
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    45
"
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
    46
$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.13 1995-02-27 10:40:35 claus Exp $
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    47
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    48
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    49
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    50
documentation
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    51
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    52
    This class provides PopUpMenu functionality; Actually, this class
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    53
    only provides the popup and shadow functionality and wraps another
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    54
    view, which is the actual menu-list (usually an instance of MenuView).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    55
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    56
    PopUpMenus are usually created with a list of labels, selectors and a
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    57
    receivier. Once activated, the specified receiver will be sent a
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    58
    'selector'-message.
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
    59
"
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
    60
!
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    61
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
    62
examples
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
    63
"
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    64
    Examples:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    65
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    66
	|p|
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    67
	p := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    68
		labels:#('foo'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    69
			 'bar'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    70
			 'baz')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    71
		selectors:#(
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    72
			    #foo
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    73
			    #bar
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    74
			    #baz)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    75
		receiver:nil.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    76
	p showAtPointer
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    77
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    78
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    79
    sometimes, you want to specify both selectors and some arguments
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    80
    to be sent; this is done by:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    81
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    82
	|p|
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    83
	p := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    84
		labels:#('foo' 'bar' 'baz')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    85
		selectors:#(#foo: #bar: #foo:)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    86
		args:#(1 2 3)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    87
		receiver:nil.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    88
	p showAtPointer
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    89
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    90
    or, the same selector but different arguments:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    91
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    92
	|p|
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    93
	p := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    94
		labels:#('foo' 'bar' 'baz')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    95
		selectors:#foo:
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    96
		args:#(1 2 3)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    97
		receiver:nil.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    98
	p showAtPointer
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
    99
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   100
    Normally, you do not show the menu explicitely, but install
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   101
    it as a middleButtonMenu of some view. (Views button-event handler
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   102
    will show it when the button is pressed ...)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   103
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   104
	|v m|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   105
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   106
	v := View new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   107
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   108
		labels:#('lower'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   109
			 'raise'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   110
			 '-'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   111
			 'destroy')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   112
		selectors:#(#lower #raise nil #destroy)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   113
		receiver:v.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   114
	v middleButtonMenu:m.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   115
	v open
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   116
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   117
    It is also possible, to add check-mark entries, with an entry string
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   118
    starting with the special sequence '\c' (for check-mark). The value
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   119
    passed will be the truth-state of the check-mark.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   120
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   121
	|m v|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   122
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   123
	v := View new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   124
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   125
		labels:#('\c foo'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   126
			 '\c bar')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   127
		selectors:#(#value: #value:)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   128
		receiver:[:v | Transcript show:'arg: '; showCr:v].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   129
	v middleButtonMenu:m.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   130
	v open
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   131
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   132
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   133
    Finally, you can wrap other views into a popup menu (for example,
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   134
    to implement menus with icons or other components).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   135
    The view should respond to some messages sent from here (for
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   136
    example: #hideSubmenus, #deselectWithoutRedraw and others).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   137
    Currently there is only one class in the system, which can be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   138
    this way (PatternMenu in the DrawTool demo):
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   139
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   140
	|v p|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   141
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   142
	v := View new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   143
	p := PatternMenu new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   144
	p patterns:(Array with:Color red
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   145
			  with:Color green
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   146
			  with:Color blue).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   147
	v middleButtonMenu:(PopUpMenu forMenu:p).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   148
	v open
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   149
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   150
    or try:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   151
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   152
	|v p|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   153
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   154
	v := View new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   155
	p := PatternMenu new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   156
	p patterns:(Array with:Color red
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   157
			  with:Color green
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   158
			  with:Color blue).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   159
	p selectors:#value:.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   160
	p receiver:[:val | v viewBackground:val. v clear].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   161
	p args:(Array with:Color red
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   162
		      with:Color green
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   163
		      with:Color blue).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   164
	v middleButtonMenu:(PopUpMenu forMenu:p).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   165
	v open
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   166
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   167
        
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   168
    ST-80 style:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   169
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   170
    The above menus all did some message send on selection; it is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   171
    also possible, to use Smalltalk-80 style menus (which return some value
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   172
    from their startup method):
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   173
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   174
	|m selection|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   175
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   176
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   177
		labels:#('one' 'two' 'three').
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   178
	selection := m startUp.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   179
	Transcript show:'the selection was: '; showCr:selection
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   180
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   181
    startUp will return the entries index, or 0 if there was no selection.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   182
    You can also specify an array of values to be returned instead of the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   183
    index:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   184
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   185
	|m selection|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   186
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   187
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   188
		labels:#('one' 'two' 'three')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   189
		values:#(10 20 30).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   190
	selection := m startUp.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   191
	Transcript show:'the value was: '; showCr:selection
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   192
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   193
    In ST/X style menus, separating lines between entries are created
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   194
    by a '-'-string as its label text (and corresponding nil-entries in the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   195
    selectors- and args-arrays).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   196
    In ST-80, you have to pass the indices of the lines in an extra array:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   197
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   198
	|m selection|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   199
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   200
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   201
		labels:#('one' 'two' 'three' 'four' 'five')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   202
		lines:#(2 4).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   203
	selection := m startUp.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   204
	Transcript show:'the value was: '; showCr:selection
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   205
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   206
    or:
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   207
	|m selection|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   208
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   209
	m := PopUpMenu
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   210
		labels:#('one' 'two' 'three')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   211
		lines:#(2)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   212
		values:#(10 20 30).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   213
	selection := m startUp.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   214
	Transcript show:'the value was: '; showCr:selection
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   215
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   216
    Use whichever interface you prefer.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   217
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   218
! !
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   219
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
!PopUpMenu class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   222
onSameDeviceAs:aView
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   223
    "this takes care of the device on which the view (for which
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   224
     the popup-menu is to be created) is located."
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   225
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   226
    aView isNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   227
	^ self on:Display
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   228
    ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   229
    ^ self on:(aView device)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   230
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   231
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   232
forMenu:aMenuView
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   233
    "this wraps an already existing menu - allowing to put any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   234
     view (not just MenuViews) into popups (for example, menus
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   235
     with icons, or other components).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   236
     Currently, there is only one example of different menus in
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   237
     the system (PatternMenu in the DrawTool) which could be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   238
     this way.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   239
     The view should respond to some of the menuView messages
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   240
     (such as hideSubmenu, deselectWithoutRedraw etc.)"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   241
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   242
    |newMenu|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   243
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   244
    newMenu := self onSameDeviceAs:aMenuView. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   245
    newMenu addSubView:aMenuView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   246
    newMenu menu:aMenuView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   247
    ^ newMenu
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   248
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   249
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
labels:labels selectors:selectors receiver:anObject for:aView
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   251
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   252
     Each item will send a corresponding selector from the selectors-array
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   253
     to anObject. The menu is created on the same physical device
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   254
     as aView (which is only of interrest in multi-Display applications; 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   255
     typical applications can use the sibbling message without the for: argument)."
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   256
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
    |newMenu|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   259
    newMenu := self onSameDeviceAs:aView. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   260
    newMenu menu:(MenuView
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   261
			labels:labels
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   262
			selectors:selectors
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   263
			receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   264
			in:newMenu).
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   265
    ^ newMenu
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   268
labels:labels selectors:selectors receiver:anObject
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   269
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   270
     Each item will send a message with a selector from the corresponding 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   271
     selectors-array.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   272
     The menu is created on the default Display."
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   273
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   274
    ^ self labels:labels selectors:selectors receiver:anObject for:nil
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   275
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   276
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   277
labels:labels selectors:selectors args:args receiver:anObject for:aView
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   278
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   279
     Each item will send a corresponding selector:argument from the selectors-
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   280
     and args array to anObject. The menu is created on the same physical device
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   281
     as aView (which is only of interrest in multi-Display applications; 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   282
     typical applications can use the sibbling message without the for: argument)."
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   283
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   284
    |newMenu|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   285
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   286
    newMenu := self onSameDeviceAs:aView. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   287
    newMenu menu:(MenuView
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   288
		    labels:labels
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   289
		    selectors:selectors
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   290
		    args:args
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   291
		    receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   292
		    in:newMenu).
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   293
    ^ newMenu
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   294
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   295
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   296
labels:labels selectors:selectors args:args receiver:anObject
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   297
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   298
     Each item will send a corresponding selector:argument from the selectors-
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   299
     and args array to anObject. The menu is created on the default Display"
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   300
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   301
    ^ self labels:labels 
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   302
	selectors:selectors 
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   303
	     args:args 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   304
	 receiver:anObject 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   305
	      for:nil
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   306
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   307
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   308
labels:labels selector:aSelector args:args receiver:anObject for:aView
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   309
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   310
     Each item will send aSelector with a corresponding argument from the
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   311
     args array to anObject. The menu is created on the same physical device
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   312
     as aView (which is only of interrest in multi-Display applications; 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   313
     typical applications can use the sibbling message without the for: argument)."
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   314
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   315
    |newMenu|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   316
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   317
    newMenu := self onSameDeviceAs:aView. 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   318
    newMenu menu:(MenuView
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   319
		    labels:labels
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   320
		    selector:aSelector
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   321
		    args:args
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   322
		    receiver:anObject
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   323
		    in:newMenu).
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   324
    ^ newMenu
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   325
!
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   326
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   327
labels:labels selector:aSelector args:args receiver:anObject
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   328
    "create and return a popup menu with labels as entries.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   329
     Each item will send aSelector with a corresponding argument from the
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   330
     args array to anObject. The menu is created on the default DIsplay"
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   331
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   332
    ^ self labels:labels 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   333
	 selector:aSelector 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   334
	     args:args 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   335
	 receiver:anObject 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   336
	      for:nil
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   337
!
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   338
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   339
labels:labels selectors:selectors 
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   340
    "create and return a menu with label-items and selectors. The receiver
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   341
     will either be defined later, or not used at all (if opened via startUp)"
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   342
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   343
    ^ self labels:labels selectors:selectors receiver:nil for:nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
!PopUpMenu class methodsFor:'ST-80 instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
labels:labels 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
    ^ self labels:labels lines:nil values:nil 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
labels:labels values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
    ^ self labels:labels lines:nil values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
labels:labels lines:lines 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
    ^ self labels:labels lines:lines values:nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   360
labels:labels lines:lines values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
    ^ (self new) labels:labels lines:lines values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
labelList:labels values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
    ^ self labels:labels lines:nil values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
labelList:labels lines:lines values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   369
    ^ (self new) labels:labels lines:lines values:values 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   370
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   371
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   372
!PopUpMenu methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   373
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   374
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   375
    super initialize.
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   376
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
    memorize := true.
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   378
    hideOnLeave := false.
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   379
"/    style == #iris ifTrue:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   380
"/        borderWidth := 1
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   381
"/    ].
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   382
"/    (style == #st80) ifTrue:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   383
"/        borderWidth := 1.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   384
"/        level := 0.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   385
"/        margin := 0.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   386
"/        shadowView := nil
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   387
"/    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   388
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   389
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
initEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
    super initEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
    self enableEnterLeaveEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
    self enableMotionEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
!PopUpMenu methodsFor:'realization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
fixSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
    "adjust my size to the size of the actual menu"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   400
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   401
    |extra newWidth newHeight|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
    extra := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
    newWidth := menuView width + extra.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
    newHeight := menuView height + extra.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
    ((newWidth ~~ width) or:[newHeight ~~ height]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   407
	self extent:(menuView width + extra) @ (menuView height + extra)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
    super fixSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
    menuView deselectWithoutRedraw.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
    super realize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
!PopUpMenu methodsFor:'private accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
menu:aMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
    "set the actual menu"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
    menuView := aMenu.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   423
    menuView origin:(margin @ margin).
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   424
    menuView borderWidth:0.
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   425
    menuView masterView:self
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   426
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
menuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   429
    "return the actual menu"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   430
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   431
    ^ menuView
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   432
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   433
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   434
superMenu:aMenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   435
    "return the superMenu"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   436
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   437
    menuView superMenu:aMenu
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   438
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   439
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   440
change:aSymbol
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   441
    menuView change:aSymbol
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   442
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   443
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   444
changeSymbol
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   445
    ^ menuView changeSymbol
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   446
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   447
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   448
model 
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   449
    ^ menuView model 
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   450
!
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   451
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   452
model:aModel
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   453
    menuView model:aModel
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   454
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   455
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   456
!PopUpMenu methodsFor:'menuview messages'!
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   457
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   458
doesNotUnderstand:aMessage
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   459
    "forward all menu-view messages"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   460
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   461
    (menuView respondsTo:(aMessage selector)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   462
	^ aMessage sendTo:menuView
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   463
    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   464
    ^ super doesNotUnderstand:aMessage
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   465
! !
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   466
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   467
!PopUpMenu methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   468
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   469
viewBackground:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   470
    "this is a kludge and will vanish ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   471
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   472
    super viewBackground:aColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
    menuView viewBackground:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   476
hideOnLeave:aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   477
    "set/clear the hideOnLeave attribute, which controls
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   478
     if the menu should be hidden when the pointer leaves
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   479
     the view (used with multiple-menus)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   480
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   481
    hideOnLeave := aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   482
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   483
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   484
font:aFont
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   485
    menuView font:aFont
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   486
!
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   487
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   488
labels
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   489
    "return the list of labels"
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   490
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   491
    actionLabels notNil ifTrue:[
81
0c97b2905d5b Text eliminated
claus
parents: 77
diff changeset
   492
	^ actionLabels asStringCollection
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   493
    ].
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   494
    ^ menuView list
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   495
!
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   496
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   497
indexOf:indexOrName
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   498
    "return the index of a submenu - or 0 if there is none"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   499
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   500
    ^ menuView indexOf:indexOrName
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   501
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   502
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   503
remove:indexOrName
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   504
    "remove a menu entry"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   505
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   506
    menuView remove:indexOrName
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   507
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   508
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   509
subMenuAt:indexOrName put:aMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   510
    "define a submenu to be shown for entry indexOrName"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   511
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   512
"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   513
    aMenu hideOnLeave:true.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   514
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   515
    menuView subMenuAt:indexOrName put:aMenu.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   516
    "tell the submenu to notify me when action is performed"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   517
    aMenu superMenu:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   518
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   519
    "|v m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   520
     v := View new.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   521
     m := PopUpMenu labels:#('1' '2' '3')
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   522
		 selectors:#(one two nil)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   523
		  receiver:v
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   524
		       for:nil.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   525
     m subMenuAt:3 put:(PopUpMenu
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   526
			     labels:#('a' 'b' 'c')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   527
			  selectors:#(a b c)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   528
			   receiver:v
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   529
				for:nil).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   530
     v middleButtonMenu:m.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   531
     v realize"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   532
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   533
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   534
numberOfItems
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   535
    "return the number of items in the menu"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   536
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   537
    actionLabels notNil ifTrue:[
81
0c97b2905d5b Text eliminated
claus
parents: 77
diff changeset
   538
	^ actionLabels asStringCollection size
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   539
    ].
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   540
    ^ menuView list size
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   541
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   542
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   543
values
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   544
    "st-80 compatibility"
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   545
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   546
    ^ actionValues
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   547
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   548
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   549
lines
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   550
    "st-80 compatibility"
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   551
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   552
    ^ actionLines
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   553
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   554
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   555
labels:labelString lines:lineArray values:valueArray
21
9ef599238fea *** empty log message ***
claus
parents: 12
diff changeset
   556
    "define the menu the ST-80 way (with labels and lines defined separately)"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   557
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   558
    |labelArray argArray convertedLabels 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   559
     offs dstOffs linePos|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   560
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   561
    actionLabels := labelString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   562
    actionLines := lineArray.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   563
    actionValues := valueArray.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   564
81
0c97b2905d5b Text eliminated
claus
parents: 77
diff changeset
   565
    labelArray := labelString asStringCollection.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   566
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   567
    convertedLabels := Array new:(labelArray size + lineArray size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   568
    argArray := Array new:(labelArray size + lineArray size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   569
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   570
    offs := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   571
    dstOffs := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   572
    1 to:lineArray size do:[:lineIndex |
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   573
	linePos := lineArray at:lineIndex.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   574
	[offs <= linePos] whileTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   575
	    convertedLabels at:dstOffs put:(labelArray at:offs).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   576
	    argArray at:dstOffs put:offs.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   577
	    offs := offs + 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   578
	    dstOffs := dstOffs + 1
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   579
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   580
	convertedLabels at:dstOffs put:'-'.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   581
	argArray at:dstOffs put:nil.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   582
	dstOffs := dstOffs + 1
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   583
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   584
    [offs <= labelArray size] whileTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   585
	convertedLabels at:dstOffs put:(labelArray at:offs).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   586
	argArray at:dstOffs put:offs.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   587
	offs := offs + 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   588
	dstOffs := dstOffs + 1
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   589
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   590
    self menu:(MenuView
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   591
			labels:convertedLabels
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   592
		      selector:nil
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   593
			  args:argArray
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   594
		      receiver:nil 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   595
			    in:self)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   596
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   597
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   598
!PopUpMenu methodsFor:'activation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   599
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   600
hide
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   601
    "hide the menu - if there are any pop-up-submenus, hide them also"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   602
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   603
    menuView hideSubmenu.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   604
    windowGroup notNil ifTrue:[
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   605
	windowGroup removeView:menuView.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   606
    ].
77
565b052f5277 *** empty log message ***
claus
parents: 70
diff changeset
   607
    super hide.
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   608
    menuView superMenu notNil ifTrue:[
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   609
	menuView superMenu regainControl
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   610
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   611
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   612
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   613
!PopUpMenu methodsFor:'ST-80 activation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   614
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   615
startUp
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   616
    "start the menu modal - return the selected value,
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   617
     or - if no values where specified - return the index.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   618
     If nothing was selected, return 0.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   619
     Modal - i.e. stay in the menu until finished.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   620
     This is the ST-80 way of launching a menu."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   621
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   622
    |return msel marg|
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   623
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   624
    menuView action:[:selected |
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   625
	|actionIndex value sel retVal|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   626
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   627
	retVal := 0.
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   628
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   629
	menuView args isNil ifTrue:[
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   630
	    menuView selectors notNil ifTrue:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   631
		sel := menuView selectors at:selected.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   632
		sel notNil ifTrue:[menuView receiver perform:sel].
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   633
	    ]
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   634
	] ifFalse:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   635
	    actionIndex := menuView args at:selected.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   636
	    actionIndex notNil ifTrue:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   637
		actionValues isNil ifTrue:[
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   638
		    menuView selectors notNil ifTrue:[
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   639
		    "/ mhmh an ST/X menu started the ST-80 way
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   640
			msel := menuView selectors at:selected.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   641
			marg := actionIndex.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   642
			retVal := nil.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   643
		    ] ifFalse:[
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   644
			retVal := actionIndex
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   645
		    ]
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   646
		] ifFalse:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   647
		    retVal := actionValues at:actionIndex.
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   648
		    (retVal isKindOf:PopUpMenu) ifTrue:[
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   649
			retVal := retVal startUp
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   650
		    ]
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   651
		]
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   652
	    ] ifFalse:[
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   653
		"/ mhmh an ST/X menu started the ST-80 way
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   654
		menuView selectors notNil ifTrue:[
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   655
		    msel := menuView selectors at:selected.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   656
		    marg := actionIndex.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   657
		    retVal := nil.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   658
		]
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   659
	    ]
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   660
	].
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   661
	return := retVal
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   662
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   663
    self showAtPointer.
95
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   664
    msel notNil ifTrue:[
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   665
	"/ mhmh an ST/X menu started the ST-80 way
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   666
	menuView receiver perform:msel with:marg.
7535cfca9509 *** empty log message ***
claus
parents: 81
diff changeset
   667
    ].
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   668
    ^ return
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   669
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   670
    "
63
f4eaf04d1eaf *** empty log message ***
claus
parents: 59
diff changeset
   671
     Transcript showCr:(PopUpMenu labels:#('foo' 'bar' 'baz')) startUp 
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   672
     Transcript showCr:(PopUpMenu labels:#('foo' 'bar' 'baz')
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   673
				  values:#(foo bar baz)) startUp
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   674
    "
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   675
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   676
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   677
!PopUpMenu methodsFor:'event handling'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   678
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   679
buttonMotion:button x:x y:y
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   680
    |p superMenu|
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   681
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   682
    ((x >= 0) and:[x < width]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   683
	((y >= 0) and:[y < height]) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   684
	    menuView buttonMotion:button x:x y:y.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   685
	    ^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   686
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   687
    ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   688
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   689
    "outside of myself"
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   690
    superMenu := menuView superMenu.
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   691
    superMenu notNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   692
	p := device translatePoint:(x @ y)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   693
			      from:drawableId
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   694
				to:(menuView superMenu id).
70
14443a9ea4ec *** empty log message ***
claus
parents: 63
diff changeset
   695
	superMenu buttonMotion:button x:p x y:p y
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   696
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   697
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   698
    menuView subMenuShown isNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   699
	menuView pointerLeave:button.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   700
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   701
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   702
    hideOnLeave ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   703
	self hide
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   704
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   705
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   706
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   707
pointerEnter:state x:x y:y
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   708
    "catch quick release of button"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   709
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   710
    state == 0 ifTrue:[^ self hide].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   711
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   712
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   713
pointerLeave:state
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   714
"/    menuView pointerLeave:state.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   715
"/    hideOnLeave ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   716
"/        self hide
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   717
"/    ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   718
"/    menuView superMenu notNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   719
"/        menuView superMenu regainControl
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 21
diff changeset
   720
"/    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   721
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   722
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   723
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   724
    self hide.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   725
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   726
    menuView buttonRelease:button x:x y:y.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   727
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   728
    menuView superMenu notNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   729
	menuView superMenu submenuTriggered 
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   730
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   731
    menuView buttonRelease:button x:x y:y.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   732
! !