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