ExtendedComboBox.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 02 Sep 2022 11:25:39 +0100
branchjv
changeset 6261 9b7eb7159d29
parent 5313 0bf66dd418b5
child 5443 79f472b09304
permissions -rw-r--r--
Fix loong standing bug with some menus not being translated / resolved This has happened with browser "View" menu when sometimes it had the slice resolved and sometimes not. It turned out that it was because the code disabled resources (and therefore slices) resolution when processing shortcuts, so the menu was created and cached unresolved. This fixes the issue. eXept apparently run into the same problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1281
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     1
"
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     2
 COPYRIGHT (c) 1998 by eXept Software AG
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     3
              All Rights Reserved
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     4
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     5
 This software is furnished under a license and may be used
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     6
 only in accordance with the terms of that license and with the
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     8
 be provided or otherwise made available to, or used by, any
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
     9
 other person.  No title to or ownership of the software is
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    10
 hereby transferred.
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    11
"
1830
66c131adec9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1713
diff changeset
    12
"{ Package: 'stx:libwidg2' }"
66c131adec9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1713
diff changeset
    13
4728
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
    14
"{ NameSpace: Smalltalk }"
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
    15
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    16
View subclass:#ExtendedComboBox
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    17
	instanceVariableNames:'menuButton menuField menuWrapper adjust menuWidgetHolder
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    18
		menuWidget menuHeight openAction isReadOnly closeOnSelect
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    19
		menuExtent usePreferredWidthForMenu hasHorizontalScrollBar
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    20
		hasVerticalScrollBar miniScrollerHorizontal miniScrollerVertical
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    21
		autoHideScrollBars'
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    22
	classVariableNames:''
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    23
	poolDictionaries:''
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    24
	category:'Views-Interactors'
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
    25
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
    26
1273
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
    27
PopUpView subclass:#MenuWrapper
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    28
	instanceVariableNames:'comboBox widget lastPointerView implicitGrabView eventHandler
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    29
		resizeCursor restoreCursor'
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    30
	classVariableNames:''
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    31
	poolDictionaries:''
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
    32
	privateIn:ExtendedComboBox
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
    33
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
    34
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    35
!ExtendedComboBox class methodsFor:'documentation'!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    36
1281
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    37
copyright
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    38
"
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    39
 COPYRIGHT (c) 1998 by eXept Software AG
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    40
              All Rights Reserved
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    41
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    42
 This software is furnished under a license and may be used
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    43
 only in accordance with the terms of that license and with the
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    44
 inclusion of the above copyright notice.   This software may not
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    45
 be provided or otherwise made available to, or used by, any
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    46
 other person.  No title to or ownership of the software is
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    47
 hereby transferred.
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    48
"
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    49
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    50
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    51
!
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    52
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    53
documentation
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    54
"
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    55
    An ExtendedComboBox looks much like a ComboBox, but allows for any view
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    56
    to be popped up (in contrast to a ComboBox, which has a hardWired selectionInList-
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    57
    menu).
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    58
    The popped view may optionally be decorated with scrollBars.
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    59
    As a side effect, an ExtendedComboBox with a SelectionInListView or Menu
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    60
    can now be used as a replacement for ComboBoxes when long-lists are to be shown,
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    61
    since those can now be scrolled.
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    62
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    63
    [author:]
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    64
        Claus Atzkern
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    65
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    66
    [see also:]
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    67
        ComboBox ComboView
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    68
        PopUpList SelectionInListView
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    69
        ComboListView
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    70
        PullDownMenu Label EntryField
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    71
"
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    72
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    73
!
94b22cb9c19f documentation
Claus Gittinger <cg@exept.de>
parents: 1274
diff changeset
    74
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    75
examples
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    76
"
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    77
    example 1: SelectionInListView
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    78
                                                                                [exBegin]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    79
    |top menu widget list sidx|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    80
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    81
    top  := StandardSystemView extent:200@35.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    82
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    83
    list := #('foo' 'bar' 'baz' 'hjh' 'kk' 'claus' 'gjhj').
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    84
    sidx := 4.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    85
    menu bottomInset:(menu preferredExtent y negated).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    86
    menu contents:(list at:sidx).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    87
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    88
    widget := SelectionInListView new.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    89
    widget list:list.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    90
    widget doubleClickAction:[:i| menu contents:(widget at:i) ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    91
    widget selection:sidx.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    92
    menu menuWidget:widget.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    93
    top open.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    94
                                                                                [exEnd]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    95
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    96
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    97
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    98
    example 2: FileSelectionTree
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
    99
                                                                                [exBegin]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   100
    |top menu widget|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   101
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   102
    top  := StandardSystemView extent:200@35.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   103
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   104
    menu bottomInset:(menu preferredExtent y negated).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   105
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   106
    widget := FileSelectionTree new.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   107
    widget directory:(Filename homeDirectory).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   108
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   109
    widget doubleClickAction:[:i||n|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   110
        n := widget selectedNode.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   111
        n isDirectory ifFalse:[menu contents:(n pathName)]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   112
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   113
    menu menuHeight:400.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   114
    menu menuWidget:widget.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   115
    top  open.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   116
                                                                                [exEnd]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   117
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   118
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   119
1286
d22e114ac9e2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
   120
    example 3: SelectionInTreeView
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   121
                                                                                [exBegin]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   122
    |top menu widget|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   123
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   124
    top  := StandardSystemView extent:200@35.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   125
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   126
    menu bottomInset:(menu preferredExtent y negated).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   127
    menu contents:'foo'.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   128
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   129
    widget := SelectionInTreeView new.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   130
    widget root:(TreeItem newAsTreeFromSmalltalkClass:Object).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   131
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   132
    widget doubleClickAction:[:i||n|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   133
        n := widget selectedNode.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   134
        n hasChildren ifFalse:[menu contents:(n name)]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   135
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   136
    menu menuHeight:300.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   137
    menu menuWidget:widget.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   138
    top  open.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   139
                                                                                [exEnd]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   140
1282
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   141
    example 3: Funny
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   142
                                                                                [exBegin]
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   143
    |top menu widget|
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   144
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   145
    top  := StandardSystemView extent:250@35.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   146
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   147
    menu bottomInset:(menu preferredExtent y negated).
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   148
    menu contents:'lets do the timeWarp again...'.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   149
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   150
    widget := ClockView new.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   151
    menu menuHeight:[widget width].
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   152
    menu menuWidget:widget.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   153
    top open.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   154
                                                                                [exEnd]
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   155
1285
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   156
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   157
    example 3: Funny - again 
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   158
               (use widgets pref-width; even if the combo-box is smaller)
1282
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   159
                                                                                [exBegin]
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   160
    |top menu widget|
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   161
1284
1fb5f5cbd4d3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
   162
    top  := StandardSystemView extent:80@35.
1282
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   163
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   164
    menu bottomInset:(menu preferredExtent y negated).
1284
1fb5f5cbd4d3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
   165
    menu contents:'time...'.
1282
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   166
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   167
    widget := ClockView new.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   168
    menu menuWidget:widget.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   169
    menu usePreferredWidthForMenu:true.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   170
    top open.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
   171
                                                                                [exEnd]
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   172
1285
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   173
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   174
    example 4: Funny - again 
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   175
               (use widgets pref-width; even if the combo-box is smaller,
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   176
                adjust the height for the width)
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   177
                                                                                [exBegin]
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   178
    |top menu widget|
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   179
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   180
    top  := StandardSystemView extent:80@35.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   181
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   182
    menu bottomInset:(menu preferredExtent y negated).
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   183
    menu contents:'time...'.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   184
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   185
    widget := ClockView new.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   186
    menu menuWidget:widget.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   187
    menu usePreferredWidthForMenu:true.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   188
    menu menuHeight:[widget width].
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   189
    top open.
839acde3f42c fixed width when usePrefWidgetWidth is true
Claus Gittinger <cg@exept.de>
parents: 1284
diff changeset
   190
                                                                                [exEnd]
1406
982b813545c8 example
ah
parents: 1395
diff changeset
   191
982b813545c8 example
ah
parents: 1395
diff changeset
   192
    example 5: Subcanvas with a spec
982b813545c8 example
ah
parents: 1395
diff changeset
   193
                                                                                [exBegin]
982b813545c8 example
ah
parents: 1395
diff changeset
   194
    |top menu widget list sidx spec|
982b813545c8 example
ah
parents: 1395
diff changeset
   195
982b813545c8 example
ah
parents: 1395
diff changeset
   196
    spec :=  #(#FullSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   197
          #window: 
982b813545c8 example
ah
parents: 1395
diff changeset
   198
           #(#WindowSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   199
              #name: 'Define Color'
982b813545c8 example
ah
parents: 1395
diff changeset
   200
              #layout: #(#LayoutFrame 13 0 29 0 352 0 159 0)
982b813545c8 example
ah
parents: 1395
diff changeset
   201
              #label: 'Define Color'
982b813545c8 example
ah
parents: 1395
diff changeset
   202
              #min: #(#Point 340 110)
982b813545c8 example
ah
parents: 1395
diff changeset
   203
              #max: #(#Point 1152 900)
982b813545c8 example
ah
parents: 1395
diff changeset
   204
              #bounds: #(#Rectangle 13 29 353 160)
982b813545c8 example
ah
parents: 1395
diff changeset
   205
              #usePreferredExtent: false
982b813545c8 example
ah
parents: 1395
diff changeset
   206
          )
982b813545c8 example
ah
parents: 1395
diff changeset
   207
          #component: 
982b813545c8 example
ah
parents: 1395
diff changeset
   208
           #(#SpecCollection
982b813545c8 example
ah
parents: 1395
diff changeset
   209
              #collection: 
982b813545c8 example
ah
parents: 1395
diff changeset
   210
               #(
982b813545c8 example
ah
parents: 1395
diff changeset
   211
                 #(#VerticalPanelViewSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   212
                    #name: 'VerticalPanel1'
982b813545c8 example
ah
parents: 1395
diff changeset
   213
                    #layout: #(#LayoutFrame 0 0.0 0 0.0 58 0 -40 1.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   214
                    #component: 
982b813545c8 example
ah
parents: 1395
diff changeset
   215
                     #(#SpecCollection
982b813545c8 example
ah
parents: 1395
diff changeset
   216
                        #collection: 
982b813545c8 example
ah
parents: 1395
diff changeset
   217
                         #(
982b813545c8 example
ah
parents: 1395
diff changeset
   218
                           #(#LabelSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   219
                              #name: 'RedLabel'
982b813545c8 example
ah
parents: 1395
diff changeset
   220
                              #label: 'Red:'
982b813545c8 example
ah
parents: 1395
diff changeset
   221
                              #translateLabel: true
982b813545c8 example
ah
parents: 1395
diff changeset
   222
                              #adjust: #right
982b813545c8 example
ah
parents: 1395
diff changeset
   223
                              #extent: #(#Point 58 26)
982b813545c8 example
ah
parents: 1395
diff changeset
   224
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   225
                           #(#LabelSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   226
                              #name: 'GreenLabel'
982b813545c8 example
ah
parents: 1395
diff changeset
   227
                              #label: 'Green:'
982b813545c8 example
ah
parents: 1395
diff changeset
   228
                              #translateLabel: true
982b813545c8 example
ah
parents: 1395
diff changeset
   229
                              #adjust: #right
982b813545c8 example
ah
parents: 1395
diff changeset
   230
                              #extent: #(#Point 58 27)
982b813545c8 example
ah
parents: 1395
diff changeset
   231
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   232
                           #(#LabelSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   233
                              #name: 'BlueLabel'
982b813545c8 example
ah
parents: 1395
diff changeset
   234
                              #label: 'Blue:'
982b813545c8 example
ah
parents: 1395
diff changeset
   235
                              #translateLabel: true
982b813545c8 example
ah
parents: 1395
diff changeset
   236
                              #adjust: #right
982b813545c8 example
ah
parents: 1395
diff changeset
   237
                              #extent: #(#Point 58 26)
982b813545c8 example
ah
parents: 1395
diff changeset
   238
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   239
                        )
982b813545c8 example
ah
parents: 1395
diff changeset
   240
                    )
982b813545c8 example
ah
parents: 1395
diff changeset
   241
                    #horizontalLayout: #fit
982b813545c8 example
ah
parents: 1395
diff changeset
   242
                    #verticalLayout: #fitSpace
982b813545c8 example
ah
parents: 1395
diff changeset
   243
                    #horizontalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   244
                    #verticalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   245
                )
982b813545c8 example
ah
parents: 1395
diff changeset
   246
                 #(#VerticalPanelViewSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   247
                    #name: 'VerticalPanel2'
982b813545c8 example
ah
parents: 1395
diff changeset
   248
                    #layout: #(#LayoutFrame 60 0 0 0.0 -160 1.0 -40 1.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   249
                    #component: 
982b813545c8 example
ah
parents: 1395
diff changeset
   250
                     #(#SpecCollection
982b813545c8 example
ah
parents: 1395
diff changeset
   251
                        #collection: 
982b813545c8 example
ah
parents: 1395
diff changeset
   252
                         #(
982b813545c8 example
ah
parents: 1395
diff changeset
   253
                           #(#SliderSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   254
                              #name: 'RedSlider'
982b813545c8 example
ah
parents: 1395
diff changeset
   255
                              #tabable: true
982b813545c8 example
ah
parents: 1395
diff changeset
   256
                              #model: #red
982b813545c8 example
ah
parents: 1395
diff changeset
   257
                              #orientation: #horizontal
982b813545c8 example
ah
parents: 1395
diff changeset
   258
                              #stop: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   259
                              #step: 1
982b813545c8 example
ah
parents: 1395
diff changeset
   260
                              #backgroundColor: #(#Color 100.0 0.0 0.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   261
                              #extent: #(#Point 118 16)
982b813545c8 example
ah
parents: 1395
diff changeset
   262
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   263
                           #(#SliderSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   264
                              #name: 'GreenSlider'
982b813545c8 example
ah
parents: 1395
diff changeset
   265
                              #tabable: true
982b813545c8 example
ah
parents: 1395
diff changeset
   266
                              #model: #green
982b813545c8 example
ah
parents: 1395
diff changeset
   267
                              #orientation: #horizontal
982b813545c8 example
ah
parents: 1395
diff changeset
   268
                              #stop: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   269
                              #step: 1
982b813545c8 example
ah
parents: 1395
diff changeset
   270
                              #backgroundColor: #(#Color 0.0 100.0 0.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   271
                              #extent: #(#Point 118 16)
982b813545c8 example
ah
parents: 1395
diff changeset
   272
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   273
                           #(#SliderSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   274
                              #name: 'BlueSlider'
982b813545c8 example
ah
parents: 1395
diff changeset
   275
                              #tabable: true
982b813545c8 example
ah
parents: 1395
diff changeset
   276
                              #model: #blue
982b813545c8 example
ah
parents: 1395
diff changeset
   277
                              #orientation: #horizontal
982b813545c8 example
ah
parents: 1395
diff changeset
   278
                              #stop: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   279
                              #step: 1
982b813545c8 example
ah
parents: 1395
diff changeset
   280
                              #backgroundColor: #(#Color 0.0 0.0 100.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   281
                              #extent: #(#Point 118 16)
982b813545c8 example
ah
parents: 1395
diff changeset
   282
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   283
                        )
982b813545c8 example
ah
parents: 1395
diff changeset
   284
                    )
982b813545c8 example
ah
parents: 1395
diff changeset
   285
                    #horizontalLayout: #fit
982b813545c8 example
ah
parents: 1395
diff changeset
   286
                    #verticalLayout: #spreadSpace
982b813545c8 example
ah
parents: 1395
diff changeset
   287
                    #horizontalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   288
                    #verticalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   289
                )
982b813545c8 example
ah
parents: 1395
diff changeset
   290
                 #(#VerticalPanelViewSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   291
                    #name: 'VerticalPanel3'
982b813545c8 example
ah
parents: 1395
diff changeset
   292
                    #layout: #(#LayoutFrame -158 1 0 0.0 -120 1 -40 1.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   293
                    #component: 
982b813545c8 example
ah
parents: 1395
diff changeset
   294
                     #(#SpecCollection
982b813545c8 example
ah
parents: 1395
diff changeset
   295
                        #collection: 
982b813545c8 example
ah
parents: 1395
diff changeset
   296
                         #(
982b813545c8 example
ah
parents: 1395
diff changeset
   297
                           #(#InputFieldSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   298
                              #name: 'RedField'
982b813545c8 example
ah
parents: 1395
diff changeset
   299
                              #model: #red
982b813545c8 example
ah
parents: 1395
diff changeset
   300
                              #type: #numberInRange
982b813545c8 example
ah
parents: 1395
diff changeset
   301
                              #numChars: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   302
                              #minValue: 0
982b813545c8 example
ah
parents: 1395
diff changeset
   303
                              #maxValue: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   304
                              #extent: #(#Point 38 20)
982b813545c8 example
ah
parents: 1395
diff changeset
   305
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   306
                           #(#InputFieldSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   307
                              #name: 'GreenField'
982b813545c8 example
ah
parents: 1395
diff changeset
   308
                              #model: #green
982b813545c8 example
ah
parents: 1395
diff changeset
   309
                              #type: #numberInRange
982b813545c8 example
ah
parents: 1395
diff changeset
   310
                              #numChars: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   311
                              #minValue: 0
982b813545c8 example
ah
parents: 1395
diff changeset
   312
                              #maxValue: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   313
                              #extent: #(#Point 38 20)
982b813545c8 example
ah
parents: 1395
diff changeset
   314
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   315
                           #(#InputFieldSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   316
                              #name: 'BlueField'
982b813545c8 example
ah
parents: 1395
diff changeset
   317
                              #model: #blue
982b813545c8 example
ah
parents: 1395
diff changeset
   318
                              #type: #numberInRange
982b813545c8 example
ah
parents: 1395
diff changeset
   319
                              #numChars: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   320
                              #minValue: 0
982b813545c8 example
ah
parents: 1395
diff changeset
   321
                              #maxValue: 255
982b813545c8 example
ah
parents: 1395
diff changeset
   322
                              #extent: #(#Point 38 20)
982b813545c8 example
ah
parents: 1395
diff changeset
   323
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   324
                        )
982b813545c8 example
ah
parents: 1395
diff changeset
   325
                    )
982b813545c8 example
ah
parents: 1395
diff changeset
   326
                    #horizontalLayout: #fit
982b813545c8 example
ah
parents: 1395
diff changeset
   327
                    #verticalLayout: #spreadSpace
982b813545c8 example
ah
parents: 1395
diff changeset
   328
                    #horizontalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   329
                    #verticalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   330
                )
982b813545c8 example
ah
parents: 1395
diff changeset
   331
                 #(#LabelSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   332
                    #name: 'PreviewBox'
982b813545c8 example
ah
parents: 1395
diff changeset
   333
                    #layout: #(#LayoutFrame -116 1 0 0.0 -2 1.0 -40 1.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   334
                    #label: 'Preview'
982b813545c8 example
ah
parents: 1395
diff changeset
   335
                    #translateLabel: true
982b813545c8 example
ah
parents: 1395
diff changeset
   336
                    #level: -1
982b813545c8 example
ah
parents: 1395
diff changeset
   337
                )
982b813545c8 example
ah
parents: 1395
diff changeset
   338
                 #(#HorizontalPanelViewSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   339
                    #name: 'HorizontalPanel1'
982b813545c8 example
ah
parents: 1395
diff changeset
   340
                    #layout: #(#LayoutFrame 0 0.0 -32 1 0 1.0 0 1.0)
982b813545c8 example
ah
parents: 1395
diff changeset
   341
                    #component: 
982b813545c8 example
ah
parents: 1395
diff changeset
   342
                     #(#SpecCollection
982b813545c8 example
ah
parents: 1395
diff changeset
   343
                        #collection: 
982b813545c8 example
ah
parents: 1395
diff changeset
   344
                         #(
982b813545c8 example
ah
parents: 1395
diff changeset
   345
                           #(#ActionButtonSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   346
                              #name: 'CancelButton'
982b813545c8 example
ah
parents: 1395
diff changeset
   347
                              #label: 'Cancel'
982b813545c8 example
ah
parents: 1395
diff changeset
   348
                              #translateLabel: true
4729
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   349
                              #model: #doCancel
1406
982b813545c8 example
ah
parents: 1395
diff changeset
   350
                              #extent: #(#Point 165 26)
982b813545c8 example
ah
parents: 1395
diff changeset
   351
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   352
                           #(#ActionButtonSpec
982b813545c8 example
ah
parents: 1395
diff changeset
   353
                              #name: 'OKButton'
982b813545c8 example
ah
parents: 1395
diff changeset
   354
                              #label: 'OK'
982b813545c8 example
ah
parents: 1395
diff changeset
   355
                              #translateLabel: true
4729
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   356
                              #model: #doAccept
1406
982b813545c8 example
ah
parents: 1395
diff changeset
   357
                              #extent: #(#Point 166 26)
982b813545c8 example
ah
parents: 1395
diff changeset
   358
                          )
982b813545c8 example
ah
parents: 1395
diff changeset
   359
                        )
982b813545c8 example
ah
parents: 1395
diff changeset
   360
                    )
982b813545c8 example
ah
parents: 1395
diff changeset
   361
                    #horizontalLayout: #fitSpace
982b813545c8 example
ah
parents: 1395
diff changeset
   362
                    #verticalLayout: #centerMax
982b813545c8 example
ah
parents: 1395
diff changeset
   363
                    #horizontalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   364
                    #verticalSpace: 3
982b813545c8 example
ah
parents: 1395
diff changeset
   365
                )
982b813545c8 example
ah
parents: 1395
diff changeset
   366
              )
982b813545c8 example
ah
parents: 1395
diff changeset
   367
          )
982b813545c8 example
ah
parents: 1395
diff changeset
   368
      ).
982b813545c8 example
ah
parents: 1395
diff changeset
   369
982b813545c8 example
ah
parents: 1395
diff changeset
   370
    top  := StandardSystemView extent:200@35.
982b813545c8 example
ah
parents: 1395
diff changeset
   371
    menu := ExtendedComboBox origin:5 @ 5 corner:1.0 @ 0.0 in:top.
982b813545c8 example
ah
parents: 1395
diff changeset
   372
    list := #('foo' 'bar' 'baz' 'hjh' 'kk' 'claus' 'gjhj').
982b813545c8 example
ah
parents: 1395
diff changeset
   373
    sidx := 4.
982b813545c8 example
ah
parents: 1395
diff changeset
   374
    menu bottomInset:(menu preferredExtent y negated).
982b813545c8 example
ah
parents: 1395
diff changeset
   375
    menu contents:(list at:sidx).
982b813545c8 example
ah
parents: 1395
diff changeset
   376
982b813545c8 example
ah
parents: 1395
diff changeset
   377
    widget := SubCanvas new.
4729
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
   378
    widget client:(SimpleDialog new).
1406
982b813545c8 example
ah
parents: 1395
diff changeset
   379
    widget spec:spec.
982b813545c8 example
ah
parents: 1395
diff changeset
   380
    menu menuWidget:widget.
982b813545c8 example
ah
parents: 1395
diff changeset
   381
    top open.
982b813545c8 example
ah
parents: 1395
diff changeset
   382
                                                                                [exEnd]
982b813545c8 example
ah
parents: 1395
diff changeset
   383
982b813545c8 example
ah
parents: 1395
diff changeset
   384
982b813545c8 example
ah
parents: 1395
diff changeset
   385
982b813545c8 example
ah
parents: 1395
diff changeset
   386
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   387
"
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   388
! !
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   389
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   390
!ExtendedComboBox methodsFor:'accessing'!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   391
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   392
contents
4833
2d9306d5cef1 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4831
diff changeset
   393
    "return the value of the field (the model's value)"
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   394
4833
2d9306d5cef1 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4831
diff changeset
   395
    model isNil ifTrue:[
2d9306d5cef1 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4831
diff changeset
   396
        ^ menuField contents
2d9306d5cef1 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4831
diff changeset
   397
    ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   398
    ^ model value
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   399
!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   400
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   401
contents:aValue
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   402
    "set the value of the field (the models value)"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   403
3629
625d247dec4b changed #contents:
Claus Gittinger <cg@exept.de>
parents: 3567
diff changeset
   404
    model notNil ifTrue:[
625d247dec4b changed #contents:
Claus Gittinger <cg@exept.de>
parents: 3567
diff changeset
   405
        model value:aValue.
625d247dec4b changed #contents:
Claus Gittinger <cg@exept.de>
parents: 3567
diff changeset
   406
    ]
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   407
!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   408
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   409
menuExtent
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   410
    ^ menuExtent
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   411
!
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   412
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   413
menuExtent:anExtent
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   414
    menuExtent := anExtent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   415
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   416
    anExtent notNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   417
        menuHeight := nil.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   418
    ] ifFalse:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   419
        menuHeight := anExtent y max:50.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   420
    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   421
    usePreferredWidthForMenu := true.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   422
!
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
   423
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   424
menuWidget
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   425
    "get the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   426
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   427
    ^ menuWidget
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   428
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   429
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   430
menuWidget:aWidgetOrFilenameOrSequenceableCollectionOrNil
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   431
    "set the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   432
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   433
    menuWidget ~~ aWidgetOrFilenameOrSequenceableCollectionOrNil ifTrue:[
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   434
        menuWrapper notNil ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   435
            self closeMenu.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   436
            menuWrapper destroy.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   437
            menuWrapper := nil.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   438
        ].
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   439
        aWidgetOrFilenameOrSequenceableCollectionOrNil isView ifTrue:[
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   440
            menuWidget := aWidgetOrFilenameOrSequenceableCollectionOrNil.
2013
3f550c902871 care for someone setting menuWrapper to nil,
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
   441
            ^ self
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
   442
        ].
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
   443
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   444
        aWidgetOrFilenameOrSequenceableCollectionOrNil isFilename ifTrue:[
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   445
            self setupMenuWidgetForDirectory:aWidgetOrFilenameOrSequenceableCollectionOrNil.
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   446
            ^ self
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
   447
        ].
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
   448
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   449
        aWidgetOrFilenameOrSequenceableCollectionOrNil isSequenceable ifTrue:[
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   450
            self setupMenuWidgetForList:aWidgetOrFilenameOrSequenceableCollectionOrNil.
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   451
            ^ self
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   452
        ].
2904
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   453
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   454
        aWidgetOrFilenameOrSequenceableCollectionOrNil isNil ifTrue:[
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   455
            menuWidget := aWidgetOrFilenameOrSequenceableCollectionOrNil.
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   456
            ^ self
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   457
        ].
b0b7eb41d6fa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2903
diff changeset
   458
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   459
        self error:'invalid menuWidget'
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   460
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   461
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   462
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   463
!ExtendedComboBox methodsFor:'accessing-actions'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   464
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   465
openAction
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   466
    "returns the action, called before opening the pulldown menu"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   467
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   468
    ^ openAction
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   469
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   470
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   471
openAction:aOneArgBlock
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   472
    "set the action, called before opening the pulldown menu;
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   473
     the argument to the action is the menu widget"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   474
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   475
    openAction := aOneArgBlock
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   476
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   477
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   478
!ExtendedComboBox methodsFor:'accessing-behavior'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   479
2411
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   480
closeOnSelect
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   481
    "if true, then the comboList is closed when the model value/selection changed"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   482
2411
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   483
    ^ closeOnSelect
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   484
!
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   485
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   486
closeOnSelect:aBoolean
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   487
    "if true, then the comboList is closed when the model value/selection changed"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   488
2411
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   489
    closeOnSelect := aBoolean.
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   490
!
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   491
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   492
disable
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   493
    "disable me and my components"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   494
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   495
    self closeMenu.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   496
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   497
    menuField disable.
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   498
    menuButton disable.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   499
!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   500
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   501
enable
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   502
    "enable me and my components"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   503
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   504
    menuField enable.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   505
    menuButton enable
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   506
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   507
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   508
enabled
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   509
    "returns true, if enabled"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   510
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   511
    ^ menuButton enabled
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   512
!
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   513
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   514
readOnly
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   515
    "returns true if the menuField is readonly"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   516
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   517
    ^ isReadOnly
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   518
!
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   519
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   520
readOnly:aBoolean
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   521
    "set the menuField to be readonly or writable"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   522
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   523
    isReadOnly == aBoolean ifTrue:[ ^ self ].
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   524
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   525
    isReadOnly := aBoolean.
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   526
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   527
    menuField isNil ifTrue:[
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   528
        self createEditField.
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   529
    ].
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   530
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   531
    menuField readOnly:aBoolean.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   532
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   533
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   534
!ExtendedComboBox methodsFor:'accessing-bg & border'!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   535
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   536
backgroundColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   537
    "get the background color of the menu field"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   538
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   539
    ^ menuField backgroundColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   540
!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   541
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   542
backgroundColor:aColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   543
    "set the background color of the menu field"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   544
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   545
    menuField backgroundColor:aColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   546
!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   547
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   548
foregroundColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   549
    "return the foreground color of the menu field"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   550
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   551
    ^ menuField foregroundColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   552
!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   553
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   554
foregroundColor:aColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   555
    "set the foreground color of the menu field"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   556
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   557
    menuField foregroundColor:aColor
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   558
! !
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   559
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   560
!ExtendedComboBox methodsFor:'accessing-channels'!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   561
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   562
enableChannel 
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   563
    "return a valueHolder for enable/disable"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   564
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   565
    ^ menuButton enableChannel
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   566
!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   567
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   568
enableChannel:aValueHolder 
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   569
    "set a valueHolder for enable/disable"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   570
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   571
    menuField enableChannel:aValueHolder.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   572
    menuButton enableChannel:aValueHolder.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   573
!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   574
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   575
menuWidgetHolder
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   576
    "returns the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   577
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   578
    ^ menuWidgetHolder
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   579
!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   580
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   581
menuWidgetHolder:aHolder
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   582
    "returns the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   583
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   584
    menuWidgetHolder notNil ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   585
        menuWidgetHolder removeDependent:self
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   586
    ].
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   587
    menuWidgetHolder := aHolder.
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   588
    menuWidgetHolder notNil ifTrue:[
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   589
        menuWidgetHolder addDependent:self
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   590
    ].
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   591
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   592
    self menuWidget:(menuWidgetHolder value).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   593
!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   594
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   595
model:aModel
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   596
    "set the model"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   597
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   598
    super model:(aModel ? ValueHolder new).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   599
    menuField notNil ifTrue:[ menuField model:model ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   600
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   601
1848
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   602
!ExtendedComboBox methodsFor:'accessing-components'!
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   603
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   604
editor
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   605
    ^ menuField
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   606
!
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   607
1848
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   608
menuField
2707
8643fcf4e814 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 2472
diff changeset
   609
    <resource: #obsolete>
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   610
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   611
    self obsoleteMethodWarning:'Use #editor for ComboBox compatibility'.
1848
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   612
    ^ menuField
1857
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   613
!
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   614
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   615
menuHolder:anObject
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   616
    "change the one that provides the menu (via menuMsg)."
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   617
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   618
    super menuHolder:anObject.
2461
208fed751e87 do not use a Label if readOnly;
tm
parents: 2411
diff changeset
   619
    menuField notNil ifTrue:[  
1857
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   620
        menuField menuHolder:anObject
3c1a9729f46c popup menu holder added
Claus Gittinger <cg@exept.de>
parents: 1851
diff changeset
   621
    ]
1848
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   622
! !
5256c7de1045 access to input-field
Claus Gittinger <cg@exept.de>
parents: 1847
diff changeset
   623
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   624
!ExtendedComboBox methodsFor:'accessing-default menus'!
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   625
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   626
directory:aDirectory
3646
1c9015f99ef3 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3629
diff changeset
   627
    <resource: #obsolete>
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   628
    "creates a FileSelectionTree as menuWidget - menu, setting the root to the directory"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   629
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   630
    self obsoleteMethodWarning:'use #setupMenuWidgetForDirectory:'.
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   631
    self setupMenuWidgetForDirectory:aDirectory
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   632
!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   633
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   634
list:aList
3646
1c9015f99ef3 Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3629
diff changeset
   635
    <resource: #obsolete>
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   636
    "creates a SelectionInListView as menuWidget - menu setting the list"
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   637
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   638
    self obsoleteMethodWarning:'use #setupMenuWidgetForList:'.
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   639
    self setupMenuWidgetForList:aList
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   640
!
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   641
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   642
setupMenuWidgetForDirectory:aDirectory
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   643
    "creates a FileSelectionTree as menuWidget - setting the root to the directory"
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   644
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   645
    menuWidget isNil ifTrue:[
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   646
        self autoHideScrollBars:false.
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   647
        menuWidget := FileSelectionTree new.
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   648
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   649
        menuWidget doubleClickAction:[:aDummy||node|
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   650
            node := menuWidget selectedNode.
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   651
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   652
            node isDirectory ifFalse:[
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   653
                self contents:(node pathName)
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   654
            ]
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   655
        ]
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   656
    ].
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   657
    self menuHeight:400.
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   658
    menuWidget directory:aDirectory.
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   659
!
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   660
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   661
setupMenuWidgetForList:aList
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   662
    "creates a SelectionInListView as menuWidget - menu setting the list"
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   663
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   664
    menuWidget isNil ifTrue:[
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
   665
        menuWidget := SelectionInListView onDevice:(device ? Screen current).
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   666
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   667
        menuWidget doubleClickAction:[:anIndex| 
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   668
            self contents:(menuWidget at:anIndex)
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   669
        ]
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   670
    ].
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   671
    menuWidget list:aList
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   672
! !
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   673
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   674
!ExtendedComboBox methodsFor:'accessing-dimension'!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   675
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   676
menuHeight
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   677
    "get the maximum height of the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   678
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   679
    ^ menuHeight
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   680
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   681
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   682
menuHeight:aHeight
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   683
    "set the maximum height of the menu widget or nil"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   684
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   685
    menuHeight := aHeight.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   686
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   687
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   688
preferredExtent
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   689
    "compute & return the preferredExtent from the components' preferrences"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   690
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   691
    |fieldPref buttonPref m w h f|
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   692
3567
447a502274d4 changed #preferredExtent - use explicitExtent instvar
Stefan Vogel <sv@exept.de>
parents: 3469
diff changeset
   693
    "/ If I have an explicit preferredExtent..
447a502274d4 changed #preferredExtent - use explicitExtent instvar
Stefan Vogel <sv@exept.de>
parents: 3469
diff changeset
   694
    explicitExtent notNil ifTrue:[
447a502274d4 changed #preferredExtent - use explicitExtent instvar
Stefan Vogel <sv@exept.de>
parents: 3469
diff changeset
   695
        ^ explicitExtent
447a502274d4 changed #preferredExtent - use explicitExtent instvar
Stefan Vogel <sv@exept.de>
parents: 3469
diff changeset
   696
    ].
447a502274d4 changed #preferredExtent - use explicitExtent instvar
Stefan Vogel <sv@exept.de>
parents: 3469
diff changeset
   697
    "/ If I have a cached preferredExtent value..
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   698
    preferredExtent notNil ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   699
        ^ preferredExtent
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   700
    ].
3701
3e67a8e8e0ba *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3646
diff changeset
   701
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   702
    fieldPref  := menuField preferredExtent.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   703
    buttonPref := menuButton preferredExtent.
4498
e79dad5cc686 class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4166
diff changeset
   704
    f := 2 + gc font maxHeight + (gc font maxDescent * 2) + (menuField margin * 2).
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   705
    h := (fieldPref y max:f) max:buttonPref y.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   706
    m := margin max:1.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   707
    h := h + m + m.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   708
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   709
    w := (fieldPref x max:100) + buttonPref x.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   710
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   711
    menuWidget notNil ifTrue:[
3420
d112104710bb added preferredWidth & preferredHeight
Claus Gittinger <cg@exept.de>
parents: 3289
diff changeset
   712
        f := menuWidget preferredWidth "widthOfContents" + buttonPref x + 20.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   713
        w := f max:w
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   714
    ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   715
    w := w + margin + margin.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   716
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   717
    ^ w @ h
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   718
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   719
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   720
usePreferredWidthForMenu
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   721
    "returns true if the menu is to be opened with its menu preferred width"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   722
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   723
    ^ usePreferredWidthForMenu
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   724
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   725
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   726
usePreferredWidthForMenu:aBoolean
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   727
    "open the menu with its preferred width"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   728
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   729
    usePreferredWidthForMenu := aBoolean
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   730
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   731
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   732
!ExtendedComboBox methodsFor:'accessing-look'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   733
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   734
adjust
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   735
    "returns the button-adjust symbol, which is one of
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   736
         #left  -> left adjust  
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   737
         #right -> right adjust"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   738
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   739
    ^ adjust ? #right
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   740
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   741
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   742
adjust:how
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   743
    "set the button-adjust, which must be one of
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   744
         #left  -> left adjust  
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   745
         #right -> right adjust"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   746
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   747
    |rightInset|
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   748
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   749
    (adjust ~~ how and:[(how == #left or:[how == #right])]) ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   750
        (adjust := how) == #left ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   751
            menuButton origin:0.0@0.0 corner:0.0@1.0
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   752
        ] ifFalse:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   753
            menuButton origin:1.0@0.0 corner:1.0@1.0
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   754
        ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   755
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   756
        rightInset := menuButton leftInset.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   757
        menuButton leftInset:(menuButton rightInset).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   758
        menuButton rightInset:rightInset.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   759
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   760
        rightInset := menuField leftInset.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   761
        menuField  leftInset:(menuField rightInset).
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   762
        menuField rightInset:rightInset.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   763
    ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   764
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   765
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   766
font:aFont
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   767
    "set the font of the menu field"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   768
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   769
    super font:aFont.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   770
    menuField font:aFont.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   771
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   772
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2173
diff changeset
   773
!ExtendedComboBox methodsFor:'accessing-scrollbars'!
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   774
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   775
autoHideScrollBars
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   776
    "set/clear the flag which controls if scrollBars should
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   777
     be made invisible dynamically, when there is nothing to scroll
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   778
     (and shown if there is)"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   779
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   780
    ^ autoHideScrollBars
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   781
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   782
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   783
autoHideScrollBars:aBoolean
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   784
    "set/clear the flag which controls if scrollBars should
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   785
     be made invisible dynamically, when there is nothing to scroll
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   786
     (and shown if there is)"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   787
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   788
    autoHideScrollBars := aBoolean
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   789
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   790
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   791
hasHorizontalScrollBar
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   792
    "return the horizontal scrollability.
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   793
     If disabled, the horizontal scrollBar is made invisible."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   794
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   795
    ^ hasHorizontalScrollBar
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   796
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   797
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   798
hasHorizontalScrollBar:aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   799
    "enable/disable horizontal scrollability.
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   800
     If disabled, the horizontal scrollBar is made invisible."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   801
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   802
    hasHorizontalScrollBar := aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   803
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   804
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   805
hasVerticalScrollBar
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   806
    "return the vertical scrollability.
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   807
     If disabled, the vertical scrollBar is made invisible."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   808
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   809
    ^ hasVerticalScrollBar
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   810
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   811
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   812
hasVerticalScrollBar:aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   813
    "enable/disable vertical scrollability.
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   814
     If disabled, the vertical scrollBar is made invisible."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   815
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   816
    hasVerticalScrollBar := aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   817
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   818
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   819
miniScrollerHorizontal
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   820
    "return the flag which controls if the horizontal scrollBar is either a miniScroller,
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   821
     or a full scrollBar."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   822
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   823
    ^ miniScrollerHorizontal
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   824
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   825
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   826
miniScrollerHorizontal:aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   827
    "control the horizontal scrollBar to be either a miniScroller,
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   828
     or a full scrollBar."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   829
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   830
    miniScrollerHorizontal := aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   831
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   832
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   833
miniScrollerVertical
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   834
    "return the flag which controls if the vertical scrollBar is either a miniScroller,
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   835
     or a full scrollBar."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   836
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   837
    ^ miniScrollerVertical
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   838
!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   839
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   840
miniScrollerVertical:aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   841
    "control the vertical scrollBar to be either a miniScroller,
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   842
     or a full scrollBar."
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   843
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   844
    miniScrollerVertical := aBool
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   845
! !
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   846
2411
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   847
!ExtendedComboBox methodsFor:'change & update'!
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   848
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   849
update:what with:aPara from:aModel
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   850
    "one of my models changed"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   851
2411
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   852
    aModel == self model ifTrue:[
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   853
        closeOnSelect ifTrue:[
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   854
            self closeMenu
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   855
        ].
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   856
        ^ self
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   857
    ].
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   858
    aModel == self menuWidgetHolder ifTrue:[
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   859
        self menuWidget:(aModel value).
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   860
        ^ self
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   861
    ].
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   862
    super update:what with:aPara from:aModel
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   863
! !
47fa3acd65a5 add: #closeOnSelect
ca
parents: 2404
diff changeset
   864
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   865
!ExtendedComboBox methodsFor:'error handling'!
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   866
2890
e302b773ba71 ugly comments
Claus Gittinger <cg@exept.de>
parents: 2849
diff changeset
   867
doesNotUnderstand:aMessage 
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
   868
    "delegate messages to the widget"
2890
e302b773ba71 ugly comments
Claus Gittinger <cg@exept.de>
parents: 2849
diff changeset
   869
    
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   870
    menuWidget notNil ifTrue:[
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   871
        ^ aMessage sendTo:menuWidget
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   872
    ].
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
   873
    ^ super doesNotUnderstand:aMessage
2903
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   874
! !
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   875
be9322441131 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2900
diff changeset
   876
!ExtendedComboBox methodsFor:'event handling'!
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   877
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   878
keyPress:key x:x y:y
2890
e302b773ba71 ugly comments
Claus Gittinger <cg@exept.de>
parents: 2849
diff changeset
   879
    "handle a key press event"
e302b773ba71 ugly comments
Claus Gittinger <cg@exept.de>
parents: 2849
diff changeset
   880
2026
3b9f6e0aaad5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
   881
    <resource: #keyboard (#Return)>
3b9f6e0aaad5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
   882
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   883
    (key == Character space or:[key == #Return]) ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   884
        self enabled ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   885
            self openMenu
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   886
        ]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   887
    ] ifFalse:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   888
        super keyPress:key x:x y:y
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
   889
    ]
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   890
!
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   891
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   892
processEvent:anEvent
4166
92e2137c5ab2 changed: #keyPress:x:y:
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
   893
    <resource: #keyboard (#Escape )>
92e2137c5ab2 changed: #keyPress:x:y:
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
   894
3289
7bf0ddb4df39 bugfix - processEvents should have a look for which button is pressed
ca
parents: 3285
diff changeset
   895
    |evView button point x y|
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   896
3844
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   897
    anEvent isKeyPressEvent ifTrue:[
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   898
        anEvent key == #Escape ifTrue:[
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   899
            (menuWrapper notNil and:[menuWrapper realized]) ifTrue:[
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   900
                self closeMenu.
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   901
                ^ true.
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   902
            ]
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   903
        ]
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   904
    ].
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   905
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   906
    anEvent isButtonPressEvent ifFalse:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   907
        ^ false
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   908
    ].
3844
e88634883df1 close menu when pressing #Escape key
fm
parents: 3838
diff changeset
   909
3289
7bf0ddb4df39 bugfix - processEvents should have a look for which button is pressed
ca
parents: 3285
diff changeset
   910
    button := anEvent state.
7bf0ddb4df39 bugfix - processEvents should have a look for which button is pressed
ca
parents: 3285
diff changeset
   911
    ((button == 1) or:[button == #select]) ifFalse:[
7bf0ddb4df39 bugfix - processEvents should have a look for which button is pressed
ca
parents: 3285
diff changeset
   912
        ^ false
7bf0ddb4df39 bugfix - processEvents should have a look for which button is pressed
ca
parents: 3285
diff changeset
   913
    ].
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   914
    (menuField notNil and:[menuField shown]) ifFalse:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   915
        ^ false
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   916
    ].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   917
    (isReadOnly and:[self enabled]) ifFalse:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   918
        ^ false
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   919
    ].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   920
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   921
    evView := anEvent view.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   922
    evView isNil ifTrue:[^ false].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   923
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   924
    point := Point x:(anEvent x) y:(anEvent y).
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   925
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   926
    evView ~~ menuField ifTrue:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   927
        (evView isSameOrComponentOf:menuField) ifFalse:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   928
            ^ false
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   929
        ].
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
   930
        point := device translatePoint:point fromView:evView toView:menuField.
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   931
    ].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   932
    x := point x.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   933
    (x between:0 and:menuField width) ifFalse:[^ false].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   934
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   935
    y := point y.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   936
    (y between:0 and:menuField height) ifFalse:[^ false].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   937
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   938
    self openMenu.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   939
    ^ true
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   940
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   941
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   942
!ExtendedComboBox methodsFor:'initialization'!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
   943
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   944
createEditField
4728
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   945
    |nm fieldLevel|
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   946
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   947
    nm := styleSheet name.
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   948
3282
3f94ea1cf64d test for unspecified menuField before creation
ca
parents: 3237
diff changeset
   949
    menuField isNil ifTrue:[
3f94ea1cf64d test for unspecified menuField before creation
ca
parents: 3237
diff changeset
   950
        menuField := EditField in:self.
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   951
        menuField borderWidth:0.
3282
3f94ea1cf64d test for unspecified menuField before creation
ca
parents: 3237
diff changeset
   952
    ].
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   953
    menuField origin:0.0 @ 0.0 corner:1.0 @ 1.0.
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   954
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   955
    styleSheet is3D ifTrue:[
4728
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   956
        (styleSheet at:'comboView.level' default:nil) notNil ifTrue:[
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   957
            fieldLevel := 0.
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   958
        ] ifFalse:[
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   959
            menuField leftInset:(ViewSpacing // 2).
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   960
        ]
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   961
    ].
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
   962
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   963
    (nm = #win95 or:[nm = #win98 or:[ nm = #winXP or:[nm = #st80 or:[nm = #winVista]]]]) ifTrue:[
4728
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   964
        fieldLevel := 0.
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   965
        menuField leftInset:0.
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   966
    ].
4728
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   967
    fieldLevel := styleSheet at:'comboView.fieldLevel' default:fieldLevel.
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   968
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   969
    fieldLevel notNil ifTrue:[
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   970
        menuField level:fieldLevel.
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   971
    ].
8e258bf00d45 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4553
diff changeset
   972
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   973
    menuButton notNil ifTrue:[ menuField rightInset:(menuButton leftInset negated) ].
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   974
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   975
    menuField menuHolder:(self menuHolder).
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   976
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   977
    menuField model:model.
4498
e79dad5cc686 class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4166
diff changeset
   978
    menuField font:self font.
2462
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   979
    self shown ifTrue:[ menuField realize ].
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   980
!
8eaa99008134 checkin from browser
tm
parents: 2461
diff changeset
   981
2472
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   982
destroy
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   983
    |wgrp|
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   984
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   985
    (wgrp := self windowGroup) notNil ifTrue:[
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   986
       wgrp removePreEventHook:self.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
   987
    ].
2472
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   988
    menuWidget notNil ifTrue:[
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   989
        menuWidget destroy.
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   990
    ].
3828
3c53c3bbcb37 release dependencies when destroyed or released
fm
parents: 3701
diff changeset
   991
    self menuWidgetHolder:nil.
2472
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   992
    super destroy
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   993
!
dee96e84c441 *** empty log message ***
martin
parents: 2463
diff changeset
   994
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   995
initStyle
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   996
    super initStyle.
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   997
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   998
    self borderWidth:(EditField defaultBorderWidth).
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   999
    self borderColor:(EditField defaultBorderColor).
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1000
!
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1001
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1002
initialize
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1003
    "setup defaults"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1004
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1005
    |prefExt prefWidth lvl rightInset leftInset halfSpacing nm|
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1006
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1007
    super initialize.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1008
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1009
    closeOnSelect := true.
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1010
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1011
    menuField isNil ifTrue:[
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1012
        self createEditField.
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1013
    ].
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1014
2173
41ed0651d789 use same button init code as ComboView
Claus Gittinger <cg@exept.de>
parents: 2157
diff changeset
  1015
    self initializeButton.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1016
    menuButton pressAction:[self openMenu].
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1017
    prefExt   := menuButton preferredExtent.
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1018
    prefWidth := prefExt x.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1019
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1020
    menuButton origin:1.0@0.0 corner:1.0@1.0.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1021
    styleSheet is3D ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1022
        halfSpacing := ViewSpacing // 2.
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1023
        leftInset := rightInset := prefWidth + halfSpacing.
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1024
        (lvl := styleSheet at:#'comboView.level' default:nil) notNil ifTrue:[
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1025
            self level:lvl.
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1026
"/            menuField level:0.
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1027
"/            menuField rightInset:margin.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1028
        ] ifFalse:[
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1029
            menuButton rightInset:halfSpacing.
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1030
"/            menuField leftInset:margin.
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1031
        ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1032
    ] ifFalse:[
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1033
        leftInset := prefWidth + menuButton borderWidth.
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1034
        rightInset := prefWidth.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1035
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1036
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1037
    "/ what a hack...
1696
f1bae6d68ffe eliminated styleSheet name = win95 queries
Claus Gittinger <cg@exept.de>
parents: 1648
diff changeset
  1038
    nm := styleSheet name.
3838
6b3f262cbb73 added: #initStyle
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
  1039
    (nm = #win95 or:[nm = #win98 or:[nm = #winXP or:[nm = #st80 or:[nm = #winVista]]]]) ifTrue:[
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1040
        lvl isNil ifTrue:[self level:-1].
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1041
        menuButton rightInset:0.
1696
f1bae6d68ffe eliminated styleSheet name = win95 queries
Claus Gittinger <cg@exept.de>
parents: 1648
diff changeset
  1042
        nm ~= #st80 ifTrue:[
3420
d112104710bb added preferredWidth & preferredHeight
Claus Gittinger <cg@exept.de>
parents: 3289
diff changeset
  1043
            leftInset := (ArrowButton new preferredWidth).
3285
1541e5cf4395 bugfix winXP style
ca
parents: 3282
diff changeset
  1044
            rightInset := leftInset.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1045
        ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1046
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1047
    menuButton leftInset:leftInset negated.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1048
    self model:nil.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1049
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1050
    adjust                   := #right.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1051
    usePreferredWidthForMenu := false.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1052
    isReadOnly               := false.
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1053
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1054
    autoHideScrollBars       := true.
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1055
    hasHorizontalScrollBar   := true.
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1056
    hasVerticalScrollBar     := true.
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1057
    miniScrollerHorizontal   := true.
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1058
    miniScrollerVertical     := true.
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1059
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1060
    self readOnly:true.
2173
41ed0651d789 use same button init code as ComboView
Claus Gittinger <cg@exept.de>
parents: 2157
diff changeset
  1061
!
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1062
2173
41ed0651d789 use same button init code as ComboView
Claus Gittinger <cg@exept.de>
parents: 2157
diff changeset
  1063
initializeButton
41ed0651d789 use same button init code as ComboView
Claus Gittinger <cg@exept.de>
parents: 2157
diff changeset
  1064
    menuButton := ComboView comboButtonFor:self.
2157
6cfdf247519a destroy - release
Claus Gittinger <cg@exept.de>
parents: 2125
diff changeset
  1065
!
6cfdf247519a destroy - release
Claus Gittinger <cg@exept.de>
parents: 2125
diff changeset
  1066
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1067
realize
3237
50336fd7fbbe test for unspecified windowGroup
ca
parents: 3235
diff changeset
  1068
    |wgrp pullMenuIfClickedOnField|
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1069
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1070
    super realize.
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1071
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1072
    pullMenuIfClickedOnField := styleSheet at:#'comboView.pullMenuIfClickedOnField'
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1073
                   default:[ OperatingSystem isMSWINDOWSlike ].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1074
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1075
    pullMenuIfClickedOnField == true ifTrue:[
3237
50336fd7fbbe test for unspecified windowGroup
ca
parents: 3235
diff changeset
  1076
        wgrp := self windowGroup.
50336fd7fbbe test for unspecified windowGroup
ca
parents: 3235
diff changeset
  1077
        wgrp notNil ifTrue:[ wgrp addPreEventHook:self ].
3235
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1078
    ].
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1079
!
e38e4be1602e comboView.pullMenuIfClickedOnField
ca
parents: 3134
diff changeset
  1080
2157
6cfdf247519a destroy - release
Claus Gittinger <cg@exept.de>
parents: 2125
diff changeset
  1081
release
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1082
    "release dependencies"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1083
3828
3c53c3bbcb37 release dependencies when destroyed or released
fm
parents: 3701
diff changeset
  1084
    self menuWidgetHolder:nil.
2157
6cfdf247519a destroy - release
Claus Gittinger <cg@exept.de>
parents: 2125
diff changeset
  1085
    super release.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1086
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1087
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1088
!ExtendedComboBox methodsFor:'queries'!
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1089
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1090
menuIsScrollable
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1091
    "returns true if the menu is scrollable"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1092
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1093
    ^ (self hasVerticalScrollBar or:[self hasHorizontalScrollBar])
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1094
! !
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1095
4831
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1096
!ExtendedComboBox methodsFor:'testing'!
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1097
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1098
isComboView
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1099
    ^ true
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1100
! !
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1101
1890
b08a2a15cea6 category change
Claus Gittinger <cg@exept.de>
parents: 1868
diff changeset
  1102
!ExtendedComboBox methodsFor:'user interaction'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1103
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1104
closeMenu
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1105
    "close the menu"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1106
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1107
    |id|
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1108
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1109
    menuWrapper notNil ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1110
        menuWrapper realized ifFalse:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1111
            (id := menuWrapper id) notNil ifTrue:[
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1112
                device unmapWindow:id
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1113
            ]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1114
        ] ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1115
           menuWrapper unmap
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1116
        ].
1273
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1117
"/        menuWrapper windowGroup:nil.
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1118
"/        self windowGroup removeView:menuWrapper.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1119
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1120
    menuButton turnOff.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1121
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1122
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1123
openMenu
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1124
    "pull the menu - triggered from the button"
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1125
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1126
    |h w menuOrigin useableExt widgetPrfExt graphicsDevice|
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1127
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
  1128
    openAction notNil ifTrue:[
2069
7891c7d3af69 use new #perform:withOptionalArgument:
Claus Gittinger <cg@exept.de>
parents: 2026
diff changeset
  1129
        openAction valueWithOptionalArgument:menuWidget
1274
0f36e87f6b21 add openAction
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
  1130
    ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1131
    menuWrapper isNil ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1132
        menuWidget isNil ifTrue:[^ self].
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1133
        menuWrapper := MenuWrapper onDevice:(device ? Screen current).
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1134
        menuWrapper for:menuWidget in:self.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1135
    ].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1136
    menuButton turnOn.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1137
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1138
    graphicsDevice := device.
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1139
    menuOrigin   := graphicsDevice translatePoint:(0@height) fromView:self toView:nil.
3879
4bd5dba1e6a5 fixed: #openMenu for multiple screen systems with varying heights
Claus Gittinger <cg@exept.de>
parents: 3844
diff changeset
  1140
    "/ notice, the position-dependent query: if there is a higher secondary screen,
4bd5dba1e6a5 fixed: #openMenu for multiple screen systems with varying heights
Claus Gittinger <cg@exept.de>
parents: 3844
diff changeset
  1141
    "/ this makes a difference in where a popUpMenu is allowed...
4bd5dba1e6a5 fixed: #openMenu for multiple screen systems with varying heights
Claus Gittinger <cg@exept.de>
parents: 3844
diff changeset
  1142
    "/ useableExt   := device usableExtent.
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1143
    useableExt := graphicsDevice usableWidth @ (graphicsDevice usableHeightAt:menuOrigin).
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1144
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1145
    menuExtent notNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1146
        widgetPrfExt := menuExtent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1147
    ] ifFalse:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1148
        widgetPrfExt := menuWrapper preferredExtent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1149
    ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1150
    menuHeight isNil ifTrue:[
1392
2d4a90914f2b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
  1151
        menuHeight := (5 + widgetPrfExt y) min:(useableExt y // 2).
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1152
    ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1153
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1154
    usePreferredWidthForMenu ifFalse:[
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1155
        w := width.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1156
    ] ifTrue:[
1392
2d4a90914f2b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
  1157
        (w := widgetPrfExt x+(menuWrapper borderWidth*2)) <= width ifTrue:[
4831
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1158
            "/ w := width
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1159
        ] ifFalse:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1160
            (w + menuOrigin x) > useableExt x ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1161
                menuOrigin x:((useableExt x - w) max:0)
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1162
            ]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1163
        ]
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1164
    ].
1282
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1165
    "/ nice side-effect; set width first, to allow menuHeight
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1166
    "/ to be a block computing the height based upon the width.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1167
    "/ (allows for geometry adjustments)
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1168
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1169
    menuWrapper width:w.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1170
    h := (useableExt y - menuOrigin y - 4) min:(menuHeight value).
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1171
    menuWrapper height:h.
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1172
4269f064951c allow for menuHeight to be a block;
Claus Gittinger <cg@exept.de>
parents: 1281
diff changeset
  1173
    menuWrapper origin:menuOrigin extent:(w@h).
1273
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1174
    menuWrapper openModal.
2013
3f550c902871 care for someone setting menuWrapper to nil,
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
  1175
    menuWrapper notNil ifTrue:[
3f550c902871 care for someone setting menuWrapper to nil,
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
  1176
        menuWrapper realized ifTrue:[
3f550c902871 care for someone setting menuWrapper to nil,
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
  1177
            self closeMenu
3f550c902871 care for someone setting menuWrapper to nil,
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
  1178
        ].
1944
a9c42cd2c387 added: close menu if come back from open modal
tm
parents: 1890
diff changeset
  1179
    ].
2022
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1180
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1181
    "Modified: / 10.10.2001 / 14:44:22 / cg"
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1182
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1183
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1184
!ExtendedComboBox::MenuWrapper class methodsFor:'documentation'!
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1185
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1186
documentation
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1187
"
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1188
    problem: we have a grab - and get all events;
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1189
    to simulate regular behaior inside, we have to synthetically simulate
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1190
    focus control and implicit grab on buttonPress.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1191
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1192
    [instance variables:]
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1193
        comboBox                <ExtendedComboBox>
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1194
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1195
        widget                  <View>          the widget which contains the menu
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1196
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1197
        lastPointerView         <View>          view which contained the
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1198
                                                mouse pointer.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1199
                                                used for enter/leave event generation.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1200
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1201
        implicitGrabView         <View>         view in which button was pressed;
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1202
                                                nilled when released (wherever).
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1203
                                                If non-nil, all events are forwarded to this
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1204
                                                one (for example to scroll with mouse outside the scrollbar)
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1205
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1206
        eventHandler            <OneArgBlock>   if not nil, the block will
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1207
                                                handle all inputEvents
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1208
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1209
        resizeCursor            <Cursor>        shown for resize handle
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1210
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1211
        restoreCursor           <Cursor>        default cursor
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1212
"
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1213
! !
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1214
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1215
!ExtendedComboBox::MenuWrapper methodsFor:'accessing'!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1216
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1217
application
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1218
    "return the application, under which this view was opened,
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1219
     or nil, if there is no application
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1220
    "
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1221
    ^ comboBox application
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1222
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1223
!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1224
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1225
clearImplicitGrab
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1226
    implicitGrabView := nil
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1227
!
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1228
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1229
preferredExtent
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1230
    "compute & return the preferredExtent from the components' preferrences
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1231
    "
1284
1fb5f5cbd4d3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
  1232
    ^ (widget preferredExtent max:(widget widthOfContents @ widget heightOfContents))
1fb5f5cbd4d3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1282
diff changeset
  1233
      + (margin * 2) + 8.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1234
!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1235
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1236
widget
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1237
    "returns the widget wrapped by the menuView
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1238
    "
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1239
    ^ widget
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1240
! !
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1241
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1242
!ExtendedComboBox::MenuWrapper methodsFor:'event handling'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1243
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1244
dispatchEvent:event withFocusOn:focusViewOrNil delegate:doDelegate
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1245
    "dispatch the event"
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1246
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1247
    |x y oldGrabber p graphicsDevice|
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1248
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1249
    eventHandler notNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1250
        (eventHandler value:event) ifTrue:[^ self].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1251
    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1252
1830
66c131adec9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1713
diff changeset
  1253
    (event isInputEvent not
66c131adec9b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1713
diff changeset
  1254
    or:[event isPointerEnterLeaveEvent]) ifTrue:[
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1255
        super dispatchEvent:event withFocusOn:focusViewOrNil delegate:doDelegate.
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1256
        ^ self
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1257
    ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1258
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1259
    event isButtonMotionEvent ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1260
        implicitGrabView isNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1261
            (self isEventAssignedToResizeArea:event) ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1262
                self setupResizeEventHandler.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1263
                ^ self.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1264
            ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1265
        ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1266
    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1267
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1268
    event isButtonPressEvent ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1269
        x := event x.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1270
        y := event y.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1271
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1272
        ((0@0 extent:self extent) containsPoint:(x @ y)) ifFalse:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1273
            comboBox closeMenu.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1274
            "/ if I took the grab from someone else, this buttonEvent should
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1275
            "/ also go to that one ...but not, if it falls into my own ext-comboBox (sigh)
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1276
            "/ (example: a sub-ext-box in an ext-box, clicking on the outer boxes menuButton)
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1277
            graphicsDevice := device.
4553
ed70817b44e8 Access graphicsDevice via method send instead of instVar access
Stefan Vogel <sv@exept.de>
parents: 4504
diff changeset
  1278
            (oldGrabber := graphicsDevice activePointerGrab) notNil ifTrue:[
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1279
                p := graphicsDevice translatePoint:(x@y) fromView:self toView:comboBox.
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1280
                ((0@0 extent:comboBox extent) containsPoint:p) ifFalse:[        
4504
9ac5a87f55dc class: ExtendedComboBox
Stefan Vogel <sv@exept.de>
parents: 4498
diff changeset
  1281
                    p := graphicsDevice translatePoint:(x@y) fromView:self toView:oldGrabber.
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1282
                    event view:oldGrabber.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1283
                    event x:p x.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1284
                    event y:p y.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1285
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1286
                    "/ this is a hack
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1287
                    oldGrabber class == self class ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1288
                        oldGrabber clearImplicitGrab.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1289
                    ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1290
                    oldGrabber dispatchEvent:event withFocusOn:focusViewOrNil delegate:doDelegate.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1291
                ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1292
            ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1293
            ^  self.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1294
        ]
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1295
    ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1296
    self forwardEvent:event withFocusOn:focusViewOrNil.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1297
!
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1298
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1299
forwardEvent:ev withFocusOn:focusView
4729
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1300
    "handle an event
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1301
    "
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1302
    |view x y p syntheticEvent|
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1303
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1304
    "/ situation: we get a buttonPress, set implicitGrab (for scrollbars etc.)
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1305
    "/ but never get the buttonRelease, since someone else (a popUp) grabbed the
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1306
    "/ pointer in the meantime, and has eaten the release event ... (double-sigh)
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1307
    implicitGrabView notNil ifTrue:[
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1308
        (ev isButtonReleaseEvent or:[self sensor leftButtonPressed]) ifFalse:[
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1309
            implicitGrabView := nil.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1310
        ].
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1311
    ].
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1312
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1313
    ((x := ev x) isNil or:[(y := ev y) isNil]) ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1314
        ^ self
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1315
    ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1316
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1317
    implicitGrabView notNil ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1318
        ev isButtonEvent ifTrue:[
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1319
            p := device translatePoint:(x@y) fromView:self toView:implicitGrabView.
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1320
            ev view:implicitGrabView.
2899
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1321
            ev x:p x.
e55595fe6a03 comments
Claus Gittinger <cg@exept.de>
parents: 2890
diff changeset
  1322
            ev y:p y.
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1323
            implicitGrabView dispatchEvent:ev withFocusOn:focusView delegate:false.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1324
2900
e49cb2bac7aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2899
diff changeset
  1325
            (ev isButtonReleaseEvent "or:[ev isButtonMultiPressEvent]") ifTrue:[
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1326
                implicitGrabView := nil.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1327
            ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1328
            ^ self
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1329
        ]
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1330
    ].
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1331
4729
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1332
    ev isKeyPressEvent ifTrue:[
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1333
        ev key == #Escape ifTrue:[
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1334
            self hideRequest.
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1335
            ^ self.
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1336
        ].
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1337
    ].
c0f052e4f414 class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4728
diff changeset
  1338
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1339
    view := self detectViewAtX:x y:y.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1340
    view isNil ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1341
        ^ super dispatchEvent:ev withFocusOn:focusView delegate:false
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1342
    ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1343
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1344
    p := device translatePoint:(x@y) fromView:self toView:view.
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1345
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1346
    ev isButtonPressEvent ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1347
        (view wantsFocusWithButtonPress) ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1348
            view requestFocus.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1349
        ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1350
        view ~~ self ifTrue:[ "/ can this ever be self ?
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1351
            implicitGrabView := view.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1352
        ]
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1353
    ].
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1354
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1355
    ev isButtonMotionEvent ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1356
        lastPointerView ~~ view ifTrue:[
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1357
            "/ must generate enter/leave ... (sigh)
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1358
            lastPointerView notNil ifTrue:[
2125
67e0f2c9ad4d event types are private to WindowEvent;
ca
parents: 2069
diff changeset
  1359
                "/ XXX: should be fixed
67e0f2c9ad4d event types are private to WindowEvent;
ca
parents: 2069
diff changeset
  1360
                syntheticEvent := WindowEvent pointerLeave:0 view:lastPointerView.  
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1361
                lastPointerView dispatchEvent:syntheticEvent withFocusOn:nil delegate:false.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1362
            ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1363
            view notNil ifTrue:[
2125
67e0f2c9ad4d event types are private to WindowEvent;
ca
parents: 2069
diff changeset
  1364
                syntheticEvent := WindowEvent pointerEnter:0 x:x y:y view:view.
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1365
                view dispatchEvent:syntheticEvent withFocusOn:nil delegate:false.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1366
            ].
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1367
            lastPointerView := view.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1368
        ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1369
    ].
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1370
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1371
    ev view:view.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1372
    ev x:p x.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1373
    ev y:p y.
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1374
    view dispatchEvent:ev withFocusOn:focusView delegate:false.
2022
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1375
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1376
    "Modified: / 10.10.2001 / 13:54:20 / cg"
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1377
!
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1378
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1379
setupResizeEventHandler
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1380
    |clickExtent clickPoint|
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1381
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1382
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1383
    self windowGroup showCursor:resizeCursor.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1384
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1385
    eventHandler := [:ev|
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1386
        ev isButtonEvent ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1387
            clickPoint notNil ifTrue:[
3469
afe2dab00abb pretty print fix
fm
parents: 3420
diff changeset
  1388
                ev isButtonMotionEvent ifTrue:[ 
afe2dab00abb pretty print fix
fm
parents: 3420
diff changeset
  1389
                    |offset extent|
afe2dab00abb pretty print fix
fm
parents: 3420
diff changeset
  1390
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1391
                    offset := self sensor mousePoint - clickPoint.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1392
                    extent := (clickExtent + offset) max:(comboBox width)@50.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1393
                    self extent:extent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1394
                ] ifFalse:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1395
                    ev isButtonReleaseEvent ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1396
                        comboBox menuExtent:self extent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1397
                    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1398
                    clickPoint := clickExtent := nil.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1399
                ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1400
            ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1401
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1402
            clickPoint isNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1403
                ev isButtonMotionEvent ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1404
                    (self isEventAssignedToResizeArea:ev) ifFalse:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1405
                        self windowGroup showCursor:restoreCursor.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1406
                        clickPoint := clickExtent := eventHandler := nil.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1407
                    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1408
                ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1409
                ev isButtonPressEvent ifTrue:[  "/ start resize
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1410
                    clickPoint  := self sensor mousePoint.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1411
                    clickExtent := self extent.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1412
                ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1413
            ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1414
        ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1415
        ev isInputEvent
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1416
    ].
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1417
! !
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1418
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1419
!ExtendedComboBox::MenuWrapper methodsFor:'focus handling'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1420
1630
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1421
wantsFocusWithButtonPress
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1422
    "views which do not like to take the keyboard focus
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1423
     with buttonPress can do so by redefining this
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1424
     to return false"
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1425
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1426
    ^ false
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1427
01dc20096011 grabbing cleaned up;
ca
parents: 1614
diff changeset
  1428
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1429
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1430
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1431
!ExtendedComboBox::MenuWrapper methodsFor:'initialization'!
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1432
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1433
for:aWidget in:aReceiver 
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1434
    "create a wrapper for a widget and the receiver, an extented comboBox
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1435
    "
3829
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1436
    |hasScr isAdded|
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1437
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1438
    comboBox := aReceiver.
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1439
    widget   := aWidget.
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1440
    hasScr   := aWidget isScrollWrapper.
3829
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1441
    isAdded  := false.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1442
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1443
    comboBox menuIsScrollable ifTrue:[
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1444
        hasScr ifFalse:[
3829
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1445
            "/ we have to add the scrooledView to self before
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1446
            "/ setting the scrolledView - application should
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1447
            "/ derive from my comboBox (build within subCanvas)
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1448
            widget := ScrollableView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:self.
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1449
            widget scrolledView:aWidget.
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1450
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1451
            hasScr := isAdded := true.
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1452
        ].
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1453
        widget horizontalScrollable:(comboBox hasHorizontalScrollBar).
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1454
        widget   verticalScrollable:(comboBox hasVerticalScrollBar).
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1455
        widget       horizontalMini:(comboBox miniScrollerHorizontal).
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1456
        widget         verticalMini:(comboBox miniScrollerVertical).
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1457
        widget   autoHideScrollBars:(comboBox autoHideScrollBars).
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1458
    ].
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1459
3829
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1460
    isAdded ifFalse:[
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1461
        widget origin:0.0 @ 0.0 corner:1.0 @ 1.0.
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1462
        self add:widget.
b408134570d5 MenuWrapper #for:in: care about application when creating a scrolled view
fm
parents: 3828
diff changeset
  1463
    ].
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1464
    hasScr ifTrue:[
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1465
        widget level:0.
1272
c3eb38fa149d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1225
diff changeset
  1466
        widget := widget scrolledView.
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1467
    ].    
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1468
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1469
1273
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1470
hideRequest
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1471
    "hide request from windowGroup (i.e. via Escape key).
5313
0bf66dd418b5 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
  1472
     Can be redefined in subclasses which don't like this"
1273
0460739b9e97 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1272
diff changeset
  1473
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1474
    eventHandler := nil.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1475
    comboBox closeMenu.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1476
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1477
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1478
initialize
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1479
    super initialize.
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1480
    super level:0.
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1481
    super borderWidth:1.
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1482
    self enableMotionEvents.
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1483
!
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1484
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1485
level:aNumber
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1486
!
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1487
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1488
mapped
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1489
    "grab resources (mouse and keyboard)
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1490
    "
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1491
    eventHandler := nil.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1492
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1493
    resizeCursor isNil ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1494
        restoreCursor := self cursor.
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1495
        resizeCursor  := Cursor fourWay onDevice:device.
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1496
    ].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1497
    super mapped.
2709
c43fad2a54c4 initial focus
Claus Gittinger <cg@exept.de>
parents: 2707
diff changeset
  1498
    self assignInitialKeyboardFocus.
1868
445f3285bbb2 checkin from browser
ca
parents: 1857
diff changeset
  1499
    widget notNil ifTrue:[widget level:0].
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1500
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1501
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1502
!ExtendedComboBox::MenuWrapper methodsFor:'queries'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1503
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1504
isEventAssignedToResizeArea:ev
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1505
    |x y|
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1506
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1507
    ((x := ev x) notNil and:[(y := ev y) notNil]) ifTrue:[ |evView|
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1508
        evView := ev view.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1509
        
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1510
        evView ~~ self ifTrue:[ |p|
4992
635f9ede0c38 device access
Claus Gittinger <cg@exept.de>
parents: 4833
diff changeset
  1511
            p := device translatePoint:(x@y) fromView:evView toView:self.
3134
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1512
            x := p x.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1513
            y := p y.
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1514
        ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1515
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1516
        (x - width)  abs <= 5 ifTrue:[
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1517
            (y - height) abs <= 5 ifTrue:[^ true].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1518
        ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1519
    ].
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1520
    ^ false
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1521
!
d0a3d82a5bcd support resizing popup widget
ca
parents: 2904
diff changeset
  1522
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1523
raiseDeiconified
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1524
    ^ self raise
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1525
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1526
!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1527
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1528
type
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1529
    ^ nil.
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1530
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1531
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1532
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1533
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1534
!ExtendedComboBox::MenuWrapper methodsFor:'searching'!
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1535
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1536
detectViewAtX:x y:y
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1537
    "detect view at x@y. if no view is detected or
2022
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1538
     the it is my view, nil is returned
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1539
    "
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1540
    |v|
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1541
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1542
    (x notNil or:[y notNil]) ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1543
        ((x between:0 and:width) and:[y between:0 and:height]) ifTrue:[
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1544
            v := self detectViewAtX:x y:y in:self.
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1545
            v ~~ self ifTrue:[^ v].
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1546
        ]
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1547
    ].
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1548
    ^ nil
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1549
!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1550
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1551
detectViewAtX:x y:y in:aTopView
1224
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1552
    "detect view at x@y in a top view; if no view is detected
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1553
     the topview is returned
f499a42e072d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1179
diff changeset
  1554
    "
2022
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1555
    ^ aTopView detectViewAt:(x@y).
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1556
2022
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1557
"/ cg: old code was (refactored to use common code)
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1558
"/
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1559
"/    |subviews|
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1560
"/
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1561
"/    (subviews := aTopView subViews) notNil ifTrue:[
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1562
"/        subviews do:[:v||p|
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1563
"/            (    (x between:(v left) and:(v right))
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1564
"/             and:[y between:(v top)  and:(v bottom)]
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1565
"/            ) ifTrue:[
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1566
"/                p := device translatePoint:(x@y) fromView:aTopView toView:v.
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1567
"/                ^ self detectViewAtX:p x y:p y in:v.
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1568
"/            ]
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1569
"/        ]
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1570
"/    ].
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1571
"/    ^ aTopView
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1572
16e783eb5f2a use new #translatePoint:fromView:toView:
Claus Gittinger <cg@exept.de>
parents: 2013
diff changeset
  1573
    "Modified: / 10.10.2001 / 13:53:15 / cg"
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1574
! !
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1575
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1576
!ExtendedComboBox class methodsFor:'documentation'!
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1577
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1578
version
4831
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1579
    ^ '$Header$'
3828
3c53c3bbcb37 release dependencies when destroyed or released
fm
parents: 3701
diff changeset
  1580
!
3c53c3bbcb37 release dependencies when destroyed or released
fm
parents: 3701
diff changeset
  1581
3c53c3bbcb37 release dependencies when destroyed or released
fm
parents: 3701
diff changeset
  1582
version_CVS
4831
d4bbefd9f9ca class: ExtendedComboBox
Claus Gittinger <cg@exept.de>
parents: 4729
diff changeset
  1583
    ^ '$Header$'
1179
fd1e5968db2f initial checkin
ps
parents:
diff changeset
  1584
! !
4166
92e2137c5ab2 changed: #keyPress:x:y:
Claus Gittinger <cg@exept.de>
parents: 3880
diff changeset
  1585