MenuView.st
author claus
Sat, 08 Jan 1994 18:27:56 +0100
changeset 21 9ef599238fea
parent 14 e79baf275786
child 38 4b9b70b2cc87
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
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
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
SelectionInListView subclass:#MenuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'selectors args receiver enableFlags
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
                              disabledFgColor onOffFlags subMenus
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
    16
                              subMenuShown superMenu checkColor'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
       category:'Views-Menus'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
MenuView comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
5
claus
parents: 3
diff changeset
    24
COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
    27
$Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.7 1994-01-08 17:27:32 claus Exp $
3
claus
parents: 0
diff changeset
    28
'!
claus
parents: 0
diff changeset
    29
claus
parents: 0
diff changeset
    30
!MenuView class methodsFor:'documentation'!
claus
parents: 0
diff changeset
    31
claus
parents: 0
diff changeset
    32
documentation
claus
parents: 0
diff changeset
    33
"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
a menu view used for both pull-down-menus and pop-up-menus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
the action to be performed can be defined either as:
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
1) action:aBlockWithOneArg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
   which defines a block to be called with the line number (1..n)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
   of the selected line.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
2) selectors:selectorArray [args: argarray] receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
   which defines the messages to be sent to receiver for each
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
   line.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
It is also possible to define both actionBlock and selectorArray.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
    47
menu entries starting with '\c' are check-entries.
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
    48
menu entries conisting of '-' alone, are separating lines.
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
    49
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
written summer 89 by claus
3
claus
parents: 0
diff changeset
    51
"
claus
parents: 0
diff changeset
    52
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
!MenuView class methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
    "setup some defaults - these are usually redefined during startup."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
    DefaultFont := Font family:'helvetica' face:'bold' style:'roman' size:12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
!MenuView class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
labels:labels selectors:selArray args:argArray receiver:anObject in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    "create and return a new MenuView in aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
     - receiverObject gets message from selectorArray with argument
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
       from argArray"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    ^ (self in:aView) labels:labels 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
                   selectors:selArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
                        args:argArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
                    receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
labels:labels selectors:selArray receiver:anObject in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
    "create and return a new MenuView in aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
     - receiverObject gets message from selectorArray without argument"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    ^ (self in:aView) labels:labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
                   selectors:selArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
                        args:nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
                    receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
labels:labels selector:aSelector args:argArray receiver:anObject in:aTopMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
    "create and return a new MenuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
     - receiverObject gets message aSelector with argument from
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
       argArray for all entries"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    ^ (self in:aTopMenu) labels:labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
                      selectors:aSelector
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
                           args:argArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
                       receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
labels:labels selector:aSelector args:argArray receiver:anObject for:aTopMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
    "create and return a new MenuView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
     - receiverObject gets message aSelector with argument from
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
       argArray for all entries"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
    ^ (self in:(aTopMenu superView)) labels:labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
                                  selectors:aSelector
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
                                       args:argArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
                                   receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
labels:labels selectors:selArray args:argArray receiver:anObject for:aTopMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
    ^ (self in:(aTopMenu superView)) labels:labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
                                  selectors:selArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
                                       args:argArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
                                   receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
labels:labels selectors:selArray receiver:anObject for:aTopMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
    ^ (self in:(aTopMenu superView)) labels:labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
                                  selectors:selArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
                                       args:nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
                                   receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
!MenuView methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    disabledFgColor := Color darkGrey.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
        borderWidth := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
        self level:1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
reinitialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
    "this is called right after snapIn;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
     a kind of kludge - reset cursor"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
    super reinitialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
    selection := nil. "self selection:nil."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
    self cursor:Cursor hand
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   143
initStyle
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   144
    super initStyle.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   145
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   146
    checkColor := fgColor.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   147
    (style == #iris) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   148
        device hasGreyscales ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   149
            hilightFgColor := fgColor.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   150
            hilightBgColor := bgColor.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   151
            hilightLevel := 2.
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   152
        ].
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   153
        device hasColors ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   154
            checkColor := Color red.
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   155
        ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   156
    ]
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   157
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   158
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
initEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
    super initEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
    self enableLeaveEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
    self enableButtonMotionEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
create
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
    super create.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   167
    subMenuShown := nil.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
recreate
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
    super recreate.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
!MenuView methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   178
superMenu:aMenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   179
    "set the menu I am contained in 
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   180
     - need this to hide main menus when a submenu performed its action"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   181
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   182
    superMenu := aMenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   183
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   184
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   185
superMenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   186
    "ret the menu I am contained in 
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   187
     - need this to hide main menus when a submenu performed its action"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   188
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   189
    ^ superMenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   190
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   191
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   192
subMenuShown
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   193
    "return the currently visible submenu - or nil if there is none"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   194
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   195
    ^ subMenuShown
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   196
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   197
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
labels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
    "return the menu-labels"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
    ^ list
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
labels:text
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
    "set the labels to the argument, text"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
    (text isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
        self list:(text asText)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
        self list:text
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
    ].
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   212
    enableFlags := Array new:(list size) withAll:true.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
labelAt:indexOrName put:aString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
    "change the label at index to be aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    |i|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
    i := self indexOf:indexOrName.
3
claus
parents: 0
diff changeset
   222
    i == 0 ifTrue:[^ self].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
    list at:i put:aString.
3
claus
parents: 0
diff changeset
   224
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
    "create onOff flags, if this label has a check-mark"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
    (aString startsWith:'\c') ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
        onOffFlags isNil ifTrue:[
14
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   228
            onOffFlags := Array new:(list size) withAll:false
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
        ] ifFalse:[
14
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   230
            [onOffFlags size < list size] whileTrue:[
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   231
                onOffFlags := onOffFlags copyWith:false
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
        onOffFlags at:i put:false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
font:aFont
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
    "adjust size for new font"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
    super font:(aFont on:device).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
addLabel:aLabel selector:aSelector
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
    "add another label/selector pair"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
    list isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
        list := Array with:aLabel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
        list := list copyWith:aLabel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
    selectors := selectors copyWith:aSelector.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
    enableFlags := enableFlags copyWith:true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
addLabel:aLabel selector:aSelector arg:anArg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
    "add another label/selector/argument trio"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
    list isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
        list := Array with:aLabel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
        list := list copyWith:aLabel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
    selectors := selectors copyWith:aSelector.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
    args := args copyWith:anArg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
    enableFlags := enableFlags copyWith:true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
    self recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
indexOf:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
    "return the index of the label named:aName or , if its a symbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
     the index in the selector list"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
    (indexOrName isMemberOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
        ^ list indexOf:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
    (indexOrName isMemberOf:Symbol) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
        ^ selectors indexOf:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
    ^ indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
disable:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
    "disable an entry"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
    index := self indexOf:indexOrName.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
    index ~~ 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
        (enableFlags at:index) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
            enableFlags at:index put:false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
            shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
                self redrawLine:index
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
        ]
12
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   299
    ] ifFalse:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   300
        "try submenus for convenience"
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   301
        (indexOrName isNumber not and:[subMenus notNil]) ifTrue:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   302
            subMenus do:[:m |
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   303
                m notNil ifTrue:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   304
                    m disable:indexOrName
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   305
                ]
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   306
            ]
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   307
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
enable:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
    "enable an entry"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
    index := self indexOf:indexOrName.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
    index ~~ 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
        (enableFlags at:index) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
            enableFlags at:index put:true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
            shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
                self redrawLine:index
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
        ]
12
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   324
    ] ifFalse:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   325
        "try submenus for convenience"
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   326
        (indexOrName isNumber not and:[subMenus notNil]) ifTrue:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   327
            subMenus do:[:m |
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   328
                m notNil ifTrue:[
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   329
                    m enable:indexOrName
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   330
                ]
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   331
            ]
1c8e8c53e8cf *** empty log message ***
claus
parents: 7
diff changeset
   332
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
receiver
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
    "return the receiver of the message"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
    ^ receiver
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
selectors
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
    "return the selector array"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
    ^ selectors
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
selectors:anArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
    "set the selector array"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
    selectors := anArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
selectorAt:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
    "return an individual selector"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
    |i|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
    i := self indexOf:indexOrName.
3
claus
parents: 0
diff changeset
   360
    i ~~ 0 ifTrue:[^ selectors at:i].
claus
parents: 0
diff changeset
   361
    ^ nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
selectorAt:indexOrName put:aSelector
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
    "set an individual selector"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
    |i|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   369
    i := self indexOf:indexOrName.
3
claus
parents: 0
diff changeset
   370
    i ~~ 0 ifTrue:[selectors at:i put:aSelector]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   371
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   372
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   373
args
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   374
    "return the argument array"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   375
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   376
    ^ args
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   378
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   379
args:anArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   380
    "set the argument array"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   381
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   382
    args := anArray
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   383
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   384
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   385
argsAt:indexOrName put:something
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   386
    "set an individual selector"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   387
3
claus
parents: 0
diff changeset
   388
    |i|
claus
parents: 0
diff changeset
   389
claus
parents: 0
diff changeset
   390
    i := self indexOf:indexOrName.
claus
parents: 0
diff changeset
   391
    i ~~ 0 ifTrue:[args at:i put:something]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
    "set the receiver of the message"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
    receiver := anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   400
labels:text selectors:selArray args:argArray receiver:anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   401
    "set all relevant stuff"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
    self labels:text.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
    selectors := selArray.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
    args := argArray.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
    receiver := anObject
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
checkToggleAt:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
    "return a check-toggles boolean state"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
    index := self indexOf:indexOrName.
3
claus
parents: 0
diff changeset
   415
    index == 0 ifTrue:[^ false].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
    onOffFlags isNil ifTrue:[^ false].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
    ^ onOffFlags at:index
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
checkToggleAt:indexOrName put:aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
    "set/clear a check-toggle"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   423
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   424
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   425
    onOffFlags isNil ifTrue:[
14
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   426
        onOffFlags := Array new:(list size) withAll:false
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
    index := self indexOf:indexOrName.
3
claus
parents: 0
diff changeset
   429
    index == 0 ifTrue:[^ self].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   430
    onOffFlags at:index put:aBoolean.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   431
    shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   432
        self redrawLine:index
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   433
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   434
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   435
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   436
subMenuAt:indexOrName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   437
    "return a submenu, or nil"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   438
3
claus
parents: 0
diff changeset
   439
    |i|
claus
parents: 0
diff changeset
   440
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   441
    subMenus isNil ifTrue:[^ nil].
3
claus
parents: 0
diff changeset
   442
    i := self indexOf:indexOrName.
claus
parents: 0
diff changeset
   443
    i == 0 ifTrue:[^ nil].
claus
parents: 0
diff changeset
   444
    ^ subMenus at:i
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   445
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   446
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   447
subMenuAt:indexOrName put:aPopUpMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   448
    "define a submenu"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   449
3
claus
parents: 0
diff changeset
   450
    |i|
claus
parents: 0
diff changeset
   451
claus
parents: 0
diff changeset
   452
    i := self indexOf:indexOrName.
claus
parents: 0
diff changeset
   453
    i == 0 ifTrue:[^ nil].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   454
    subMenus isNil ifTrue:[
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   455
        subMenus := Array new:(list size).
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   456
        self recomputeSize
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   457
    ].
3
claus
parents: 0
diff changeset
   458
    subMenus at:i put:aPopUpMenu
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   459
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   460
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   461
!MenuView methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   462
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   463
hideSubmenu
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   464
    subMenuShown notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   465
        subMenuShown hide.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   466
        subMenuShown := nil
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   467
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   468
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   469
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   470
recomputeSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   471
    |margin2 w h|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   472
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
    margin2 := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
    w := self widthOfContents + leftMargin + leftMargin + margin2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
    h := (self numberOfLines) * fontHeight + (2 * topMargin) + margin2.
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   476
    "if there is a submenu, add some space for the right arrow"
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   477
    subMenus notNil ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   478
        w := w + 16
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   479
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   480
    self extent:(w @ h).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   481
    (font device == device) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   482
        self computeNumberOfLinesShown
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   483
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   484
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   485
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   486
setSelectionForX:x y:y
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   487
    |newSelection org mx my|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   488
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   489
    newSelection := self positionToSelectionX:x y:y.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   490
    newSelection ~= selection ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   491
        self selection:newSelection.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   492
        subMenuShown notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   493
            subMenuShown hide.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   494
            subMenuShown := nil
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   495
        ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   496
        newSelection notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   497
            (enableFlags at:newSelection) ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   498
                newSelection := nil
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   499
            ] ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   500
                subMenus notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   501
                    subMenuShown := subMenus at:newSelection.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   502
                    subMenuShown notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   503
                        "old: show at pointer"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   504
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   505
                        org := device translatePoint:(x @ y)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   506
                                                from:(self id)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   507
                                                  to:(DisplayRootView new id).
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   508
                        org := org - 10.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   509
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   510
                        "new: show at right of this menu"
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   511
                        mx := width - 5.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   512
                        my := self yOfLine:newSelection.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   513
                        org := device translatePoint:(mx @ my)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   514
                                                from:(self id)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   515
                                                  to:(DisplayRootView new id).
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   516
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   517
                        ActiveGrab == self ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   518
                            device ungrabPointer.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   519
                            ActiveGrab := nil
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   520
                        ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   521
                        subMenuShown superMenu:self.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   522
                        subMenuShown showAt:org.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   523
                        ^ self
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   524
                    ]
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   525
                ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   526
                    subMenuShown := nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   527
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   528
            ]
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   529
        ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   530
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   531
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   532
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   533
!MenuView methodsFor:'showing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   534
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   535
show
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   536
    hidden := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   537
    super realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   538
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   539
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   540
!MenuView methodsFor:'redrawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   541
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   542
drawMarkInVisibleLine:visLineNr with:fg and:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   543
    "draw an on-mark"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   544
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   545
    |w h y x l check|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   546
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   547
    l := self visibleLineToListLine:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   548
    onOffFlags isNil ifTrue:[
14
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   549
        onOffFlags := Array new:(list size) withAll:false.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   550
        check := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   551
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   552
        check := onOffFlags at:l.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   553
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   554
14
e79baf275786 *** empty log message ***
claus
parents: 12
diff changeset
   555
    w := font widthOf:'\c'.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   556
    h := font ascent.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   557
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   558
    x := (self xOfCol:1 inLine:visLineNr) - leftOffset.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   559
    y := self yOfLine:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   560
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   561
    self paint:bg.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   562
    self fillRectangleX:x y:y width:w height:fontHeight.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   563
    self paint:fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   564
    check ifTrue:[
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   565
        self paint:checkColor.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   566
        self displayLineFromX:x 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   567
                            y:(y + (h // 2))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   568
                          toX:(x + (w // 3))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   569
                            y:(y + h - 1).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   570
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   571
        self displayLineFromX:(x + (w // 3)) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   572
                            y:(y + h - 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   573
                          toX:(x + w - 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   574
                            y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   575
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   576
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   577
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   578
drawVisibleLine:visLineNr with:fg and:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   579
    |line isSpecial special|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   580
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   581
    line := self visibleAt:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   582
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   583
    isSpecial := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   584
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   585
    ((line at:1) == $\) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   586
        special := line at:2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   587
        (special == $c) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   588
            isSpecial := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   589
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   590
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   591
    isSpecial ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   592
        super drawVisibleLine:visLineNr with:fg and:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   593
    ] ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   594
        super drawVisibleLine:visLineNr "from:3" with:fg and:bg.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   595
        self drawMarkInVisibleLine:visLineNr with:fg and:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   596
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   597
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   598
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   599
redrawVisibleLine:visLine col:col
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   600
    self redrawVisibleLine:visLine
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   601
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   602
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   603
redrawVisibleLine:visLine from:startCol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   604
    self redrawVisibleLine:visLine
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   605
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   606
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   607
redrawVisibleLine:visLine from:startCol to:endCol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   608
    self redrawVisibleLine:visLine
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   609
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   610
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   611
redrawVisibleLine:visLineNr
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   612
    |line lineNr y isSpecial isSeparatingLine mm right|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   613
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   614
    line := self visibleAt:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   615
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   616
    isSpecial := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   617
    (line = '-') ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   618
        isSeparatingLine := true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   619
        isSpecial := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   620
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   621
        (line = '') ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   622
            isSeparatingLine := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   623
            isSpecial := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   624
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   625
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   626
    isSpecial ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   627
        lineNr := self visibleLineToListLine:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   628
        (enableFlags at:lineNr) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   629
            self drawVisibleLine:visLineNr with:disabledFgColor and:bgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   630
        ] ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   631
            super redrawVisibleLine:visLineNr
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   632
        ].
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   633
        "is there a submenu ?"
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   634
        (subMenus notNil and:[(subMenus at:lineNr) notNil]) ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   635
            self drawRightArrowInVisibleLine:visLineNr
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   636
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   637
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   638
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   639
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   640
    "handle separating lines"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   641
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   642
    y := self yOfLine:visLineNr.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   643
    self is3D ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   644
        self paint:bgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   645
        self fillRectangleX:0 y:y 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   646
                      width:width height:fontHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   647
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   648
    isSeparatingLine ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   649
        y := y + (fontHeight // 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   650
        self is3D ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   651
            self paint:fgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   652
            self displayLineFromX:0 y:y toX:width y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   653
        ] ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   654
            "the inset on each side"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   655
            mm := (device horizontalPixelPerMillimeter * 0.8) rounded.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   656
            right := width - 1 - mm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   657
            self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   658
            self displayLineFromX:mm y:y toX:right y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   659
            self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   660
            y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   661
            self displayLineFromX:mm y:y toX:right y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   662
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   663
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   664
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   665
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   666
redrawFromVisibleLine:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   667
    "redraw a line range"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   668
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   669
    "the natural way to do it is:
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   670
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   671
    start to:stop do:[:visLine |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   672
        self redrawVisibleLine:visLine
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   673
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   674
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   675
    but I want to draw the stuff in big chunks for slow machines ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   676
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   677
    |first current line special index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   678
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   679
    first := start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   680
    current := start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   681
    index := self visibleLineToListLine:start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   682
    index notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   683
        [current <= stop] whileTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   684
            line := self visibleAt:current.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   685
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   686
            special := (line = '-') or:[(line = '') or:[(line at:1) == $\]].
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   687
            (special 
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   688
            or:[(enableFlags at:index) not]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   689
                "a special case"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   690
                (first < current) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   691
                    super redrawFromVisibleLine:first to:(current - 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   692
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   693
                self redrawVisibleLine:current.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   694
                first := current + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   695
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   696
            current := current + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   697
            index := index + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   698
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   699
        (first < current) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   700
            super redrawFromVisibleLine:first to:(current - 1)
21
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   701
        ].
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   702
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   703
        "draw submenu marks"
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   704
        subMenus notNil ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   705
            index := self visibleLineToListLine:start.
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   706
            start to:stop do:[:l |
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   707
                index <= subMenus size ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   708
                    (subMenus at:index) notNil ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   709
                        self drawRightArrowInVisibleLine:l
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   710
                    ].
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   711
                    index := index + 1
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   712
                ]
9ef599238fea *** empty log message ***
claus
parents: 14
diff changeset
   713
            ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   714
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   715
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   716
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   717
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   718
!MenuView methodsFor:'submenu actions'!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   719
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   720
submenuTriggered
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   721
    "submenu has performed some action - have to deselect here"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   722
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   723
    self selection:nil.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   724
    "a bad kludge - 5 minutes before writing the alpha tapes ..."
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   725
    (superView isKindOf:PopUpMenu) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   726
        superView hide
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   727
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   728
    superMenu notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   729
        superMenu submenuTriggered 
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   730
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   731
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   732
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   733
regainControl
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   734
    "take over pointer control from a submenu"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   735
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   736
    ^ self
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   737
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   738
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   739
showActive
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   740
    "submenu is about to perform an action - show wait cursor here as well"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   741
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   742
    self cursor:(Cursor wait)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   743
!
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   744
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   745
showPassive
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   746
    "submenu has performed its action - show normal cursor again"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   747
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   748
    self cursor:(Cursor hand)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   749
! !
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   750
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   751
!MenuView methodsFor:'event handling'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   752
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   753
buttonPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   754
    self setSelectionForX:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   755
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   756
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   757
buttonMotion:state x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   758
    self setSelectionForX:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   759
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   760
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   761
pointerLeave:state
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   762
    subMenuShown notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   763
        ^ self
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   764
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   765
    self setSelectionForX:-1 y:-1. "force deselect"
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   766
    subMenuShown isNil ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   767
        self selection:nil
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   768
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   769
    superMenu notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   770
        superMenu regainControl.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   771
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   772
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   773
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   774
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   775
    |theSelector isCheck|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   776
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   777
    subMenuShown notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   778
        ^ self
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   779
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   780
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   781
    (x >= 0 and:[x < width]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   782
        (y >= 0 and:[y < height]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   783
            selection notNil ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   784
                (subMenus isNil or:[(subMenus at:selection) isNil]) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   785
                    self cursor:Cursor wait.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   786
                    superMenu notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   787
                        superMenu showActive
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   788
                    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   789
                    actionBlock notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   790
                        actionBlock value:(self selection)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   791
                    ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   792
                    selectors notNil ifTrue: [
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   793
                        ActiveGrab == self ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   794
                            device ungrabPointer.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   795
                            ActiveGrab := nil.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   796
                        ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   797
                        (selectors isKindOf:Symbol) ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   798
                            selection <= (selectors size) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   799
                                theSelector := selectors at:selection
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   800
                            ]
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   801
                        ] ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   802
                            theSelector := selectors
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   803
                        ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   804
                        theSelector notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   805
                            isCheck := false.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   806
                            onOffFlags notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   807
                                onOffFlags size >= selection ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   808
                                    isCheck := (onOffFlags at:selection) notNil
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   809
                                ]
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   810
                            ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   811
                            isCheck ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   812
                                onOffFlags at:selection
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   813
                                          put:(onOffFlags at:selection) not.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   814
                                self redrawLine:selection.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   815
                                receiver perform:theSelector
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   816
                                            with:(onOffFlags at:selection)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   817
                            ] ifFalse:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   818
                                args isNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   819
                                    receiver perform:theSelector
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   820
                                ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   821
                                    receiver perform:theSelector
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   822
                                                with:(args at:selection)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   823
                                ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   824
                            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   825
                        ]
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   826
                    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   827
                    realized ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   828
                        self cursor:Cursor hand.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   829
                    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   830
                    superMenu notNil ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   831
                        superMenu showPassive
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   832
                    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   833
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   834
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   835
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   836
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   837
! !