ListSelectionBox.st
author claus
Sun, 07 May 1995 02:16:56 +0200
changeset 122 04ec3fda7c11
parent 118 3ee5ea99d0e2
child 125 3ffa271732f7
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1990 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
     3
	      All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
EnterBox subclass:#ListSelectionBox
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'selectionList'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    17
       category:'Views-DialogBoxes'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
ListSelectionBox comment:'
5
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1990 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    22
	      All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
122
claus
parents: 118
diff changeset
    24
$Header: /cvs/stx/stx/libwidg/ListSelectionBox.st,v 1.11 1995-05-07 00:16:17 claus Exp $
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    25
'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    26
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    27
!ListSelectionBox class methodsFor:'documentation'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    28
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    29
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    30
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    31
 COPYRIGHT (c) 1990 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    32
	      All Rights Reserved
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    33
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    34
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    35
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    37
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    38
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    39
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    40
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    41
!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    43
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    44
"
122
claus
parents: 118
diff changeset
    45
$Header: /cvs/stx/stx/libwidg/ListSelectionBox.st,v 1.11 1995-05-07 00:16:17 claus Exp $
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    46
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    47
!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    49
documentation
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    50
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    51
    this class implements boxes for selection from a list. It offers
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    52
    both an ok- and abort-buttons. The ok-button, if pressed will
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    53
    evaluate the okAction (see EnterBox>>action).
77
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    54
    see examples for typical uses.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    55
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    56
    Notice, for file selections there is a specialized FileSelectionBox,
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    57
    which supports matchPatterns, changing directory etc.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    58
"
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    59
!
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    60
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    61
examples 
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    62
"
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    63
    simple:
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    64
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    65
	|box|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    66
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    67
	box := ListSelectionBox new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    68
	box title:'select something:'.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    69
	box list:#('foo' 'bar' 'baz').
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    70
	box okAction:[:sel | Transcript showCr:'the selection was:' , sel].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    71
	box showAtPointer
77
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    72
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    73
    with a default:
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    74
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    75
	|box|
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    76
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    77
	box := ListSelectionBox new.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    78
	box title:'select something:'.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    79
	box list:#('foo' 'bar' 'baz').
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    80
	box okAction:[:sel | Transcript showCr:'the selection was:' , sel].
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    81
	box initialText:'foo'.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
    82
	box showAtPointer
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    83
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
    84
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
!ListSelectionBox class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
defaultExtent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
    ^ (Display pixelPerMillimeter * (80 @ 100)) rounded
12
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    90
!
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    91
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    92
listViewType
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    93
    "return the type of listView 
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    94
     - for easier redefinition in subclasses"
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    95
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
    96
    ^ SelectionInListView
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
!ListSelectionBox class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
title:titleString okText:okText abortText:abortText list:aList action:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
    "create and return a new listSelectionBox with list already defined"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
    |newBox|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
    newBox := super title:titleString okText:okText abortText:abortText
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   107
		    action:aBlock.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
    ^ newBox list:aList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
!ListSelectionBox methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    |space2 v|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
77
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   118
    label := 'Select or enter'.
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   119
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    "need more space than an enterBox"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    "self height:(height + (font height * 5)).  "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
    space2 := 2 * ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
12
1c8e8c53e8cf *** empty log message ***
claus
parents: 5
diff changeset
   126
    v := ScrollableView for:(self class listViewType) in:self.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    "kludge: see note in EnterBox"
110
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   129
    v origin:(0.0 
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   130
	      @
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   131
	      (enterField origin y + enterField height + ViewSpacing)).
110
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   132
    v extent:(1.0
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   133
	      @ 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   134
	      (height  
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   135
	       - ViewSpacing - labelField heightIncludingBorder
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   136
	       - ViewSpacing - enterField heightIncludingBorder
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   137
	       - buttonPanel heightIncludingBorder - ViewSpacing
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   138
	       - space2)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   139
	     ).
110
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   140
    v origin:[0.0
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   141
	      @
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   142
	      (enterField origin y + enterField height + ViewSpacing)]
110
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   143
      extent:[1.0
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   144
	      @ 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   145
	      (height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   146
	       - ViewSpacing - labelField heightIncludingBorder
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   147
	       - ViewSpacing - enterField heightIncludingBorder
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   148
	       - buttonPanel heightIncludingBorder - ViewSpacing
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   149
	       - space2)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   150
	     ].
110
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   151
    v leftInset:ViewSpacing//2; rightInset:ViewSpacing//2.
eb59f6e31e84 *** empty log message ***
claus
parents: 77
diff changeset
   152
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
    selectionList := v scrolledView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
    "self updateList."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    "selections in list get forwarded to enterfield"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
    selectionList action:[:lineNr |
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   159
	enterField contents:(selectionList selectionValue)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
    ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   161
    selectionList doubleClickAction:[:lineNr |
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   162
	enterField contents:(selectionList selectionValue).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   163
	self okPressed
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   164
    ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   165
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   166
     mhm: the lists keyboard functions are disabled,
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   167
     and input passed to the enterfield
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 12
diff changeset
   168
    "
122
claus
parents: 118
diff changeset
   169
    selectionList delegate:(KeyboardForwarder toView:enterField condition:#noFocus) 
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
updateList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
    "setup contents of list; nothing done here but redefined in subclasses"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
    ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
    self updateList.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
    super realize
77
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   181
!
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   182
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   183
focusSequence
118
claus
parents: 113
diff changeset
   184
    ^ Array with:enterField with:selectionList with:abortButton with:okButton 
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   187
!ListSelectionBox methodsFor:'queries'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   189
preferedExtent
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   190
    "return my prefered extent - thats the minimum size 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   191
     to make everything visible"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
    |wWanted hWanted|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
    wWanted := labelField width + ViewSpacing + ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
    (wWanted > width) ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   197
	wWanted := width
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
    hWanted := ViewSpacing + labelField height +
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   200
	       ViewSpacing + enterField height +
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   201
	       ViewSpacing + selectionList height +
77
565b052f5277 *** empty log message ***
claus
parents: 59
diff changeset
   202
	       ViewSpacing + buttonPanel preferedExtent y +
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   203
	       ViewSpacing.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
    (hWanted < height) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   206
	hWanted := height
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
    ].
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   208
    ^ (wWanted @ hWanted)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
!ListSelectionBox methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
list:aList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
    "set the list to be displayed in selection list"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
    selectionList list:aList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
! !