SelectionInListModelView.st
author Stefan Vogel <sv@exept.de>
Thu, 05 Nov 2009 20:56:37 +0100
changeset 3851 03296acbf762
parent 3778 ccbe7479c97b
child 3873 ec4ba667fe41
permissions -rw-r--r--
changed: #initStyle - do not set "super font:"
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     1
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
     3
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     4
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     5
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     6
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     8
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     9
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    10
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    11
"
1752
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
    12
"{ Package: 'stx:libwidg2' }"
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
    13
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
ListModelView subclass:#SelectionInListModelView
2821
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
    15
	instanceVariableNames:'selection multipleSelectOk selectOnButtonMenu actionBlock
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
    16
		doubleClickActionBlock selectConditionBlock buttonMotionAction
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
    17
		buttonReleaseAction highlightMode useIndex ignoreReselect
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
    18
		toggleSelect hilightFgColor hilightBgColor hilightFgColorNoFocus
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
    19
		hilightBgColorNoFocus hilightLevel hilightFrameColor hilightStyle
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
    20
		dropSource editorView openEditorAction closeEditorAction
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
    21
		highlightEnterItem enterItem cursorItem lineMask keyActionStyle
3370
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
    22
		returnKeyActionStyle strikeOut modelChangedDuringButtonPress
3524
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
    23
		selectOnButtonPress selectOnMenuButton minimumEditorHeight'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	classVariableNames:'DefaultHilightStyle DefaultHilightBackgroundColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
		DefaultHilightForegroundColor DefaultHilightLevel
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
		DefaultHilightFrameColor'
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	poolDictionaries:''
1430
ae9e48cc7b9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1423
diff changeset
    28
	category:'Views-Lists'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!SelectionInListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    33
claus
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    34
"
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    35
self claus
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    36
"
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    37
    |top list view|
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    38
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    39
    list := List new.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    40
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    41
    1 to:100 do:[:i| list add:('element: ', i printString) ].
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    42
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    43
    top  := StandardSystemView new; extent:300@300.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    44
    view := ScrollableView for:SelectionInListModelView miniScroller:true
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    45
			origin:0.0@0.0 corner:1.0@1.0 in:top.
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    46
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    47
    view minimumEditorHeight:100.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    48
    view openEditorAction:[:ln :aGC| |f|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    49
	f := SimpleView in:aGC.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    50
	f viewBackground:(Color red).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    51
	f
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    52
    ].
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    53
    view list:list.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    54
    top  open.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    55
!
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
    56
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    57
copyright
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    58
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    59
 COPYRIGHT (c) 1999 by eXept Software AG
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    60
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    61
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    62
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    63
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    64
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    65
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    66
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    67
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    68
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    69
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    70
!
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    71
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
documentation
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    SelectionInListModelView is mostly like SelectionInListView,
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    but derives from the ListModelView and thus the list is kept
3387
6da21b625d1e warning comments
Claus Gittinger <cg@exept.de>
parents: 3385
diff changeset
    76
    in the list.
6da21b625d1e warning comments
Claus Gittinger <cg@exept.de>
parents: 3385
diff changeset
    77
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    [Instance variables:]
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
    79
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    80
	selection               <misc>       the current selection. nil, a number or collection of numbers
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    81
	multipleSelectOk        <Boolean>    allow/disallow multiple selections( default:false )
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    82
	selectOnButtonMenu      <Boolean>    enable/disable selection will change on menu pressed
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    83
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    84
	buttonReleaseAction     <Action>     called if the mouse button is released
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    85
	buttonMotionAction      <Action>     called during mouse motion with one argument the point
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    86
					     under the mouse.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    87
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    88
	actionBlock             <Block>      action evaluated on single click (0/1/2 arguments)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    89
	doubleClickActionBlock  <Block>      action evaluated on double click (0/1/2 arguments)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    90
	selectConditionBlock    <Block>      action evaluated before selection changed (0/1/2 arguments)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    91
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    92
	keyActionStyle          <Symbol>     controls how to respond to keyboard selects
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    93
	returnKeyActionStyle    <Symbol>     controls how to respond to return key
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    94
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    95
	useIndex                <Boolean>    representation of the model selection
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    96
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    97
	ignoreReselect          <Boolean>    if set, a click on an already selected entry is ignored
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    98
	toggleSelect            <Boolean>    a click on an entry unselects it and vice versa
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
    99
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   100
	highlightMode           <Symbol>     how to draw the selection
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   101
	hilightFgColor          <Color>      foregroundColor of highlighted items
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   102
	hilightBgColor          <Color>      backgroundColor of highlighted items
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   103
	hilightLevel            <Integer>    level to draw selections (i.e. for 3D effect)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   104
	hilightFrameColor       <Color>      rectangle around highlighted items
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   105
	hilightStyle            <Boolean>    actions on widget are enabled/disabled
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   106
	strikeOut               <Boolean>    turn on/off strikeOut mode
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   107
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   108
	dropTarget              <DropTarget> keeps information about the drop operation
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   109
	dropSource              <DropSource> keeps information about the drag operation
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   110
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   111
	editorView              <View>       editor on current selected item
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   112
	openEditorAction        <Action>     action to get an editor on the current selection from user
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   113
	closeEditorAction       <Action>     action invoked before the editor is closed.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   114
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   115
	enterItem               <Item/nil>   item over which the mouse pointer is located
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   116
					     or nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   117
	highlightEnterItem      <Boolean>    enable or disable highlight of enterItem
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   118
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    [author:]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   120
	Claus Atzkern
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    [see also:]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   124
	ListModelView
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   125
	HierarchicalListView
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
examples
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
"
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   131
									[exBegin]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    |top list view|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    list := List new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    1 to:100 do:[:i| list add:('element: ', i printString) ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    top  := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    view := ScrollableView for:SelectionInListModelView miniScroller:true
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   139
			origin:0.0@0.0 corner:1.0@1.0 in:top.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    view list:list.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    top  open.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   142
									[exEnd]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   143
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   144
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   145
									[exBegin]
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   146
    |top list view|
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   147
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   148
    list := List new.
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   149
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   150
    1 to:100 do:[:i| list add:('element: ', i printString) ].
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   151
    top  := StandardSystemView new; extent:300@300.
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   152
    view := ScrollableView for:SelectionInListModelView miniScroller:true
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   153
			origin:0.0@0.0 corner:1.0@1.0 in:top.
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   154
    view list:list.
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   155
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   156
    view openEditorAction:[:ln :aGC| |field|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   157
	field := EditField new.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   158
	field level:0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   159
	field acceptOnLostFocus:true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   160
	field acceptAction:[:x| list at:ln put:(field contents) ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   161
	field font:(aGC font).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   162
	field contents:(list at:ln).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   163
	field
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   164
    ].
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
   165
    top open.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   166
									[exEnd]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   167
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   168
									[exBegin]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    |top list view item|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    list := HierarchicalList new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    item := HierarchicalItem::Example labeled:'Test'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    item expand.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    list showRoot:false.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    list root:item.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    top  := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    view := ScrollableView for:SelectionInListModelView miniScroller:true
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   179
			origin:0.0@0.0 corner:1.0@1.0 in:top.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    view list:list.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    view doubleClickAction:[:i| (list at:i) toggleExpand ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    top  open.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   184
									[exEnd]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
!SelectionInListModelView class methodsFor:'defaults'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    "extract values from the styleSheet and cache them in class variables"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    <resource: #style   (
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   195
			#'selection.hilightForegroundColor' #'selection.hilightBackgroundColor'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   196
			#'selection.hilightFrameColor'      #'selection.hilightLevel'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   197
			#'selection.foregroundColor'        #'selection.backgroundColor'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   198
			#'selection.shadowColor'            #'selection.lightColor'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   199
			#'selection.font'                   #'selection.hilightStyle'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   200
			#'text.foregroundColor'
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   201
			)>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    DefaultHilightForegroundColor  := StyleSheet colorAt:'selection.hilightForegroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    DefaultHilightBackgroundColor  := StyleSheet colorAt:'selection.hilightBackgroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    DefaultHilightFrameColor       := StyleSheet colorAt:'selection.hilightFrameColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    DefaultHilightLevel            := StyleSheet at:'selection.hilightLevel' default:0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    DefaultHilightStyle            := StyleSheet at:'selection.hilightStyle' default:(StyleSheet name).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    DefaultForegroundColor         := StyleSheet colorAt:'selection.foregroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    DefaultBackgroundColor         := StyleSheet colorAt:'selection.backgroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    DefaultShadowColor             := StyleSheet colorAt:'selection.shadowColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    DefaultLightColor              := StyleSheet colorAt:'selection.lightColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    DefaultForegroundColor isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   214
	DefaultForegroundColor := StyleSheet colorAt:'text.foregroundColor' default:Black
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
     self updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
!SelectionInListModelView methodsFor:'accessing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   225
cursorLine
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   226
    "returns the index of the cursor line or 0
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   227
    "
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   228
    |index|
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   229
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   230
    cursorItem isNil ifTrue:[^ 0 ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   231
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
   232
    index := self identityIndexOf:cursorItem.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   233
    index == 0 ifTrue:[ cursorItem := nil ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   234
    ^ index
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   235
!
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   236
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
list:aList
1547
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
   238
    self deselectWithoutRedraw.
2867
bbdc2721ec0b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2856
diff changeset
   239
    ^ super list:aList
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1772
diff changeset
   242
!SelectionInListModelView methodsFor:'accessing-actions'!
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   243
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   244
action
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   245
    "get the action block to be performed on select
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   246
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   247
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   248
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   249
	-  1 argument     index or item
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   250
	-  2 argument     index or item, self
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   251
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   252
    ^ actionBlock
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   253
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   254
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   255
action:aOneArgAction
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   256
    "set the action block to be performed on select
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   257
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   258
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   259
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   260
	-  1 argument     index or item
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   261
	-  2 argument     index or item, self
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   262
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   263
    actionBlock := aOneArgAction
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   264
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   265
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   266
doubleClickAction
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   267
    "get the action block to be performed on doubleclick.
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   268
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   269
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   270
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   271
	-  1 argument     selectedIndex
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   272
	-  2 argument     selectedIndex, self
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   273
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   274
    ^ doubleClickActionBlock
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   275
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   276
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   277
doubleClickAction:aOneArgAction
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   278
    "set the action block to be performed on doubleclick.
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   279
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   280
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   281
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   282
	-  1 argument     selectedIndex
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   283
	-  2 argument     selectedIndex, self
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   284
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   285
    doubleClickActionBlock := aOneArgAction
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   286
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   287
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   288
keyActionStyle
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   289
    "defines how the view should respond to alpha-keys pressed.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   290
     Possible values are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   291
	#select               -> will select next entry starting with that
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   292
				 character and perform the click-action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   293
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   294
	#selectAndDoubleclick -> will select next & perform double-click action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   295
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   296
	#pass                 -> will pass key to superclass (i.e. no special treatment)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   297
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   298
	nil                   -> will ignore key
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   299
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   300
     the default (set in #initialize) is #select
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   301
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   302
    ^ keyActionStyle
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   303
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   304
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   305
keyActionStyle:aSymbol
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   306
    "defines how the view should respond to alpha-keys pressed.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   307
     Possible values are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   308
	#select               -> will select next entry starting with that
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   309
				 character and perform the click-action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   310
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   311
	#selectAndDoubleclick -> will select next & perform double-click action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   312
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   313
	#pass                 -> will pass key to superclass (i.e. no special treatment)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   314
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   315
	nil                   -> will ignore key
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   316
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   317
     the default (set in #initialize) is #select
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   318
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   319
    keyActionStyle := aSymbol
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   320
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   321
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   322
returnKeyActionStyle
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   323
    "defines how the view should respond to a return key pressed.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   324
     Possible values are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   325
	#doubleClick          -> perform double-click action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   326
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   327
	#pass                 -> will pass key to superclass (i.e. no special treatment)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   328
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   329
	nil                   -> will ignore key
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   330
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   331
     the default (set in #initialize) is #doubleClick
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   332
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   333
    ^ returnKeyActionStyle
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   334
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   335
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   336
returnKeyActionStyle:aSymbol
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   337
    "defines how the view should respond to a return key pressed.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   338
     Possible values are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   339
	#doubleClick          -> perform double-click action
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   340
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   341
	#pass                 -> will pass key to superclass (i.e. no special treatment)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   342
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   343
	nil                   -> will ignore key
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   344
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   345
     the default (set in #initialize) is #doubleClick
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   346
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   347
    returnKeyActionStyle := aSymbol
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   348
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   349
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   350
selectConditionBlock
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   351
    "set the conditionBlock; this block is evaluated before a selection
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   352
     change is performed; the change will not be done, if the evaluation
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   353
     returns false
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   354
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   355
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   356
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   357
	-  1 argument     index
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   358
	-  2 argument     index, isForAdd
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   359
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   360
    ^ selectConditionBlock
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   361
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   362
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   363
selectConditionBlock:aOneArgBlock
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   364
    "set the conditionBlock; this block is evaluated before a selection
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   365
     change is performed; the change will not be done, if the evaluation
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   366
     returns false.
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   367
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   368
     The arguments to the block are:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   369
	- no argument
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   370
	-  1 argument     index
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   371
	-  2 argument     index, isForAdd
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   372
    "
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   373
    selectConditionBlock := aOneArgBlock.
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   374
! !
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
   375
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   376
!SelectionInListModelView methodsFor:'accessing-attributes'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   378
highlightEnterItem
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   379
    "enable or disable to highlight the item over which the mouse pointer is located
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   380
    "
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   381
    ^ highlightEnterItem
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   382
!
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   383
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   384
highlightEnterItem:aBool
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   385
    "enable or disable to highlight the item over which the mouse pointer is located
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   386
    "
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   387
    highlightEnterItem ~~ aBool ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   388
	highlightEnterItem := aBool.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   389
	self pointerEntersItem:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   390
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   391
	highlightEnterItem ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   392
	    self enableMotionEvents
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   393
	].
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   394
    ].
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   395
!
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
   396
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
highlightMode
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
    "get the mode how to draw a selected line:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   399
	#line           draw whole line selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   400
	#label          draw label selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   401
	#dropMode       set during drop
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    ^ highlightMode
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
highlightMode:aMode
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
    "set the mode how to draw a selected line:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   408
	#line           draw whole line selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   409
	#label          draw label selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   410
	#dropMode       set during drop
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
    "
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   412
    highlightMode ~~ aMode ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   413
	highlightMode := aMode.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   414
	self invalidateSelection.
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   415
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   416
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   417
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
   418
highlightWithUnderline
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
   419
    ^ false
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
   420
!
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
   421
2644
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   422
hilightBackgroundColor
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   423
    "returns the color used for the hilighted background
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   424
    "
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   425
    ^ hilightBgColor
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   426
!
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   427
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   428
hilightForegroundColor
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   429
    "returns the color used for the hilighted foreground
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   430
    "
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   431
    ^ hilightFgColor
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   432
!
78ca3bd5eef1 prepared for table
ca
parents: 2642
diff changeset
   433
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   434
strikeout
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   435
    "turn on/off strikeOut mode
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   436
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   437
    ^ strikeOut
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   440
strikeout:aBoolean
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   441
    "turn on/off strikeOut mode
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   442
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   443
    strikeOut ~~ aBoolean ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   444
	strikeOut := aBoolean.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   445
	self invalidateSelection.
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   446
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   447
! !
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   448
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   449
!SelectionInListModelView methodsFor:'accessing-behavior'!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   450
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   451
ignoreReselect
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   452
    "get the ignoreReselect flag - see method #ignoreReselect: for more details
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   453
    "
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   454
    ^ ignoreReselect
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   455
!
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   456
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   457
ignoreReselect:aBoolean
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   458
    "set/clear the ignoreReselect flag -
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   459
     if set, a click on an already selected entry is ignored.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   460
     Otherwise the notification is done, even if no
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   461
     change in the selection occurs.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   462
     (for example, in browser to update a method).
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   463
     Setting ignoreReselect to false makes sense if data is shown
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   464
     which may change by itself (i.e. without the user doing anything)
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   465
     For example, the inspector uses this, and redisplays the value,
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   466
     if the selection is the same.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   467
     The default is true, meaning that a click on an already selected
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   468
     does not lead to a notification via the actionBlock/change mechanism.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   469
    "
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   470
    ignoreReselect := aBoolean
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   471
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   472
!
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   473
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
multipleSelectOk
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
    "allow/disallow multiple selections; the default is false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
    ^ multipleSelectOk
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
multipleSelectOk:aState
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   483
    "allow/disallow multiple selections. If enabled, the
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   484
     user may select multiple entries in the list, and the program
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   485
     always gets a collection of selected items (indexes if useIndex is true,
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   486
     values otherwise). The default is false, for single selections.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
    "
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   488
    |state|
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   489
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   490
    state := aState ? false.
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   491
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   492
    multipleSelectOk == state ifTrue:[ ^ self ].
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   493
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   494
    selection isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   495
	multipleSelectOk := state.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   496
	^ self.
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   497
    ].
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   498
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   499
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   500
	selection := Array with:selection.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   501
	multipleSelectOk := true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   502
	^ self
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   503
    ].
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   504
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   505
    selection size == 1 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   506
	selection := selection first.
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   507
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   508
	self selection:nil
2381
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   509
    ].
713c81fd86ad bugfix: update selection if multipleSelecktOk changed
ca
parents: 2377
diff changeset
   510
    multipleSelectOk := false.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   513
selectOnButtomMenu
2821
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   514
    <resource: #obsolete>
2815
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   515
    self obsoleteMethodWarning:'use selectOnButtonMenu'.
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   516
    ^ self selectOnButtonMenu
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   517
!
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   518
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   519
selectOnButtomMenu:aBoolean
2821
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   520
    <resource: #obsolete>
2815
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   521
    self obsoleteMethodWarning:'use selectOnButtonMenu:'.
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   522
    ^ self selectOnButtonMenu:aBoolean
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   523
!
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   524
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   525
selectOnButtonMenu
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   526
    <resource: #obsolete>
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   527
    "define the button-menu-press behavior; if true the line under the mouse
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   528
     will be selected before the menu is opened. Otherwise the menu is opened
2821
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   529
     on the current selection."
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   530
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   531
    self obsoleteMethodWarning:'use selectOnMenuButton'.
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   532
    ^ self selectOnMenuButton
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   533
!
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   534
2815
0c05fbd33df6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2792
diff changeset
   535
selectOnButtonMenu:aBoolean
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   536
    <resource: #obsolete>
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   537
    "define the button-menu-press behavior; if true the line under the mouse
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   538
     will be selected before the menu is opened. Otherwise the menu is opened
2821
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   539
     on the current selection."
ea7f6fdb8c95 Fix bas spelling Buttom -> Button
Stefan Vogel <sv@exept.de>
parents: 2815
diff changeset
   540
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   541
    self obsoleteMethodWarning:'use selectOnMenuButton:'.
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   542
    self selectOnMenuButton:aBoolean.
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   543
!
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
   544
3370
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   545
selectOnButtonPress
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   546
    "get the selectOnButtonPress flag - see method #selectOnButtonPress: for more details
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   547
    "
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   548
    ^ selectOnButtonPress ? true
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   549
!
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   550
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   551
selectOnButtonPress:aBoolean
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   552
    "set/clear the selectOnButtonPress flag -
3370
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   553
     if set (default), the selection changed on button press. This was the
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   554
     behaviour until now.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   555
     if cleared, the selection is changed on button release. This new behaviour allows to start
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   556
     a drag without changing the real selection. The selection is changed during the
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   557
     drag and restored after the drop.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   558
    "
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   559
    selectOnButtonPress := aBoolean
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   560
!
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   561
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   562
selectOnMenuButton
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   563
    "define the button-menu-press behavior; if true the line under the mouse
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   564
     will be selected before the menu is opened. Otherwise the menu is opened
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   565
     on the current selection."
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   566
3461
eb3980ed82ad bugfix: selectTreeElementOnRightClick behaviour
ca
parents: 3455
diff changeset
   567
    selectOnMenuButton isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   568
	^ UserPreferences current selectOnRightClick
3461
eb3980ed82ad bugfix: selectTreeElementOnRightClick behaviour
ca
parents: 3455
diff changeset
   569
    ].
3438
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   570
    ^ selectOnMenuButton
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   571
!
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   572
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   573
selectOnMenuButton:aBoolean
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   574
    "define the button-menu-press behavior; if true the line under the mouse
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   575
     will be selected before the menu is opened. Otherwise the menu is opened
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   576
     on the current selection."
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   577
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   578
    selectOnMenuButton := aBoolean.
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   579
!
a8ce9823cc1e english
Claus Gittinger <cg@exept.de>
parents: 3391
diff changeset
   580
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   581
toggleSelect
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   582
    "get the toggleSelect flag - see method #toggleSelect: for more details
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   583
    "
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   584
    ^ toggleSelect
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   585
!
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   586
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   587
toggleSelect:aBoolean
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   588
    "turn on/off toggle select. If true, clicking on a selected entry
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   589
     unselects it and vice versa. The default is false, which means
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   590
     that clicking on an already selected entry does not change its
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   591
     select status (see also ignoreReselect:).
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   592
    "
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   593
    toggleSelect := aBoolean.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   594
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   595
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   596
!
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
   597
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
useIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
    "set/clear the useIndex flag.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
     the selection writen to the model are the indices into the list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
     or the elements selected.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
    ^ useIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
useIndex:aBoolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
    "set/clear the useIndex flag.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
     the selection writen to the model are the indices into the list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
     or the elements selected.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
    useIndex := aBoolean ? true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   618
!SelectionInListModelView methodsFor:'accessing-editor'!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   619
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   620
closeEditor
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   621
    "close the current editor
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   622
    "
2596
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   623
    |editor action|
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   624
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   625
    (editor := editorView) notNil ifTrue:[
2856
d3a3253d3851 forget editor after it really did close itself.
Claus Gittinger <cg@exept.de>
parents: 2821
diff changeset
   626
"/        editorView := nil.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   627
	action := self closeEditorAction.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   628
	action notNil ifTrue:[action value:editor.].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   629
	editor destroy.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   630
	editorView := nil.
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   631
    ].
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   632
!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   633
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   634
closeEditorAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   635
    "get the block which is evaluated before the editor is closed; the argument
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   636
     to the action is the editor.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   637
    "
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   638
    ^ closeEditorAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   639
!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   640
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   641
closeEditorAction:anOneArgAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   642
    "get the block which is evaluated before the editor is closed; the argument
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   643
     to the action is the editor.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   644
    "
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   645
    closeEditorAction := anOneArgAction.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   646
!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   647
2527
a07a74ff7e3e add a hasOpenEditor selector
penk
parents: 2522
diff changeset
   648
hasOpenEditor
a07a74ff7e3e add a hasOpenEditor selector
penk
parents: 2522
diff changeset
   649
a07a74ff7e3e add a hasOpenEditor selector
penk
parents: 2522
diff changeset
   650
    ^ editorView notNil
a07a74ff7e3e add a hasOpenEditor selector
penk
parents: 2522
diff changeset
   651
!
a07a74ff7e3e add a hasOpenEditor selector
penk
parents: 2522
diff changeset
   652
3524
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   653
minimumEditorHeight
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   654
    "answer the minumium height of the editor or nil.
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   655
     If the height is nil the height of the line is used"
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   656
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   657
    ^ minimumEditorHeight
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   658
!
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   659
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   660
minimumEditorHeight:aHeightOrNil
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   661
    "set the minumium height of the editor or nil.
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   662
     If the height is nil the height of the line is used"
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   663
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   664
    minimumEditorHeight := aHeightOrNil.
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   665
!
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
   666
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   667
openEditor
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   668
    "opens the editor on the current selection;
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   669
     returns the editorView or nil if no openEditorAction is defined
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   670
     or no single selection exists ...
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   671
    "
2596
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   672
    |lnNr action|
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   673
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   674
    self closeEditor.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   675
    shown ifFalse:[^ nil].
2596
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   676
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   677
    action := self openEditorAction.
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   678
    action isNil ifTrue:[^ nil].
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   679
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   680
    lnNr := self selectedIndex.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   681
    lnNr == 0 ifTrue:[^ nil].
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   682
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   683
    self makeSelectionVisible.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   684
2596
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
   685
    editorView := action valueWithOptionalArgument:lnNr and:self.
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   686
    editorView isNil ifTrue:[^ nil].
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   687
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   688
    editorView superView isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   689
	self addSubView:editorView
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   690
    ].
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   691
    self computeEditorLayout.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   692
    editorView realize.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   693
    self windowGroup focusView:editorView.
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
   694
    ^ editorView
2404
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   695
!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   696
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   697
openEditorAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   698
    "get the block which is evaluated to get the editor which is set for the
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   699
     line; the arguments to the block is the line number and the widget itself
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   700
    "
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   701
    ^ openEditorAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   702
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   703
!
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   704
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   705
openEditorAction:aTwoArgAction
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   706
    "set the block which is evaluated to get the editor which is set for the
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   707
     line; the arguments to the block is the line number and the widget itself
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   708
    "
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   709
    openEditorAction := aTwoArgAction.
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   710
! !
2b7591c982ac category change
Claus Gittinger <cg@exept.de>
parents: 2401
diff changeset
   711
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
!SelectionInListModelView methodsFor:'change & update'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   714
argForChangeMessage
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
    "return the argument for a selectionChange;
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
     depending on the setting of useIndex, this is either the numeric
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
     index of the selection or the value (i.e. the string)
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
    "
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
   719
    useIndex         ifFalse:[ ^ self selectionValue ].
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
   720
    multipleSelectOk ifFalse:[ ^ selection ? 0 ].
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
   721
    ^ selection ? #()
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   724
contentsChanged
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   725
    super contentsChanged.
3482
1ee6b7daa983 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3461
diff changeset
   726
    self computeEditorLayout.
1ee6b7daa983 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3461
diff changeset
   727
1ee6b7daa983 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3461
diff changeset
   728
1ee6b7daa983 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3461
diff changeset
   729
1ee6b7daa983 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3461
diff changeset
   730
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   731
!
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   732
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   733
lineChangedAt:aLnNr with:arg
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   734
    super lineChangedAt:aLnNr with:arg.
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   735
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   736
    (editorView notNil and:[aLnNr == self selectedIndex]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   737
	self computeEditorLayout.
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   738
    ]
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   739
!
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   740
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
listSizeChanged:aLnNr nLines:aDeltaLines
1563
f67940c89977 checkin from browser
ca
parents: 1561
diff changeset
   742
    |changed cnts|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
    super listSizeChanged:aLnNr nLines:aDeltaLines.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
    selection isNil ifTrue:[^ self].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
   748
    self size == 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   749
	selection := nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   750
	^ self selectionChanged
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
1563
f67940c89977 checkin from browser
ca
parents: 1561
diff changeset
   753
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   754
	selection < aLnNr ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   755
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   756
	selection := selection + aDeltaLines.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   757
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   758
	(aDeltaLines < 0 and:[selection < aLnNr]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   759
	    selection := nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   760
	    ^ self selectionChanged
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   761
	]
1563
f67940c89977 checkin from browser
ca
parents: 1561
diff changeset
   762
    ] ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   763
	changed := false.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   764
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   765
	aDeltaLines < 0  ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   766
	    selection keysAndValuesDo:[:i :ln|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   767
		ln >= aLnNr ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   768
		    changed := true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   769
		    selection at:i put:(ln + aDeltaLines)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   770
		]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   771
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   772
	] ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   773
	    cnts := 0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   774
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   775
	    selection keysAndValuesDo:[:i :ln||new|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   776
		ln >= aLnNr ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   777
		    changed := true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   778
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   779
		    (new := ln + aDeltaLines) < aLnNr ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   780
			cnts := cnts + 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   781
			new  := nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   782
		    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   783
		    selection at:i put:new
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   784
		]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   785
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   786
	    cnts ~~ 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   787
		cnts == selection size ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   788
		    selection := nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   789
		] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   790
		    selection := selection select:[:ln| ln notNil]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   791
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   792
		^ self selectionChanged.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   793
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   794
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   795
	changed ifFalse:[^ self].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   796
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
1563
f67940c89977 checkin from browser
ca
parents: 1561
diff changeset
   798
    (useIndex and:[model notNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   799
	model setValue:(self argForChangeMessage)
1563
f67940c89977 checkin from browser
ca
parents: 1561
diff changeset
   800
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   801
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   802
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   803
originChanged:delta
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   804
    "setup the origin of the editing view
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   805
    "
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   806
    self computeEditorLayout.
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   807
    super originChanged:delta.
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   808
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   809
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   810
!
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   811
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   812
selectionChanged
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
    "selection has changed. Call actionblock and/or send changeMessage if defined
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   814
    "
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
   815
    |arg|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   816
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   817
    self closeEditor.
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   818
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   819
    (model isNil and:[actionBlock isNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   820
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   821
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   822
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   823
    arg := self argForChangeMessage.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   824
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   825
    model notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   826
	model removeDependent:self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   827
	"/ change models value to force a change notification: reselect mode
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   828
	arg = model value ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   829
	    model setValue:(arg isNil ifTrue:[0] ifFalse:[nil]).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   830
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   831
	self sendChangeMessage:#value: with:arg.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   832
	model notNil ifTrue:[  "/ argggh could be nilled
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   833
	    model addDependent:self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   834
	    self updateFromModel. "/ care for possibly lost change notification, due to #removeDependent
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   835
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   836
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   837
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   838
    actionBlock notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   839
	actionBlock valueWithOptionalArgument:arg and:self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   840
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   841
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   842
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
   843
updateFromModel
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   844
    "update selection from the model
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   845
    "
2522
a3ddd460ea91 copy selection from model in #updateFromModel
james
parents: 2501
diff changeset
   846
    |value newSelection|
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   847
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   848
    model isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   849
	^ self
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   850
    ].
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
   851
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
   852
    buttonMotionAction notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   853
	"running in button motion; discard change notification
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   854
	"
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   855
	^ self
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   856
    ].
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   857
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   858
    value := model value.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   859
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   860
    (useIndex or:[value isNil or:[value isNumber]]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   861
	multipleSelectOk ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   862
	    newSelection := self identityIndexOf:value
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   863
	] ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   864
	    value size == 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   865
		newSelection := nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   866
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   867
		newSelection := OrderedCollection new.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   868
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   869
		value do:[:e||index|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   870
		    index := self identityIndexOf:e.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   871
		    index ~~ 0 ifTrue:[ newSelection add:index ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   872
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   873
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   874
		newSelection isEmpty ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   875
		    newSelection := nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   876
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   877
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   878
	].
2522
a3ddd460ea91 copy selection from model in #updateFromModel
james
parents: 2501
diff changeset
   879
    ] ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   880
	newSelection := value copy
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
   881
    ].
2522
a3ddd460ea91 copy selection from model in #updateFromModel
james
parents: 2501
diff changeset
   882
    self setSelection:newSelection.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   883
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   884
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   885
!SelectionInListModelView methodsFor:'drag & drop'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   886
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   887
canDrag
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   888
    "returns true if dragging is enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   889
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   890
    ^ dropSource notNil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   891
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   892
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   893
2572
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   894
dragAutoScroll:aContext
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   895
    "called by the DragAndDropManager to scroll during a drag/drop operation
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   896
     if necassery (decided by the widget itself); If a scroll is done return
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   897
     true otherwise false (used to restore the background)
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   898
    "
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   899
    |visibleY yOrigin inset|
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   900
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   901
    visibleY := aContext targetPoint y.
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   902
    yOrigin  := self yOriginOfContents.
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   903
    inset    := 15 + margin.
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   904
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   905
    visibleY <= inset ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   906
	self yOriginOfContents == 0 ifTrue:[ ^ false ].
2572
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   907
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   908
	visibleY < (self height - inset) ifTrue:[ ^ false ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   909
	self yOriginOfContents < self maxViewOriginY ifFalse:[ ^ false ].
2572
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   910
    ].
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   911
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   912
    aContext contentsWillChange.
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   913
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   914
    visibleY <= inset ifTrue:[ self scrollUp:inset ]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   915
		     ifFalse:[ self scrollDown:inset ].
2572
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   916
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   917
    ^ true
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   918
!
e370dbc5fbcb support autoScroll during drag operation
ca
parents: 2527
diff changeset
   919
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   920
dropSource
2891
78a14c0ed73c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2886
diff changeset
   921
    "returns the dropSource or nil"
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   922
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   923
    ^ dropSource
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   924
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   925
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   926
dropSource:aDropSourceOrNil
2891
78a14c0ed73c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2886
diff changeset
   927
    "set the dropSource or nil"
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   928
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   929
    dropSource := aDropSourceOrNil.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   930
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   931
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   932
startDragAt:aPoint
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   933
    "start drag at a point
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   934
    "
2976
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
   935
    buttonMotionAction := buttonReleaseAction := nil.
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
   936
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   937
    dropSource notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   938
	dropSource startDragSelector notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   939
	    ^ dropSource startDragIn:self at:aPoint
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   940
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   941
	    ^ DragAndDropManager new
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   942
		startDragFrom:self dropSource:dropSource offset:#center
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   943
	]
3370
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
   944
    ].
3684
8e409d2d8a52 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3608
diff changeset
   945
    ^ nil
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   946
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   947
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   948
!SelectionInListModelView methodsFor:'drawing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   949
2642
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   950
drawElementsFrom:start to:stop x:x y:y w:w
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   951
    "draw the items between start to stop without clearing the background
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   952
    "
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   953
    |y0 "{ Class:SmallInteger }"
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   954
     y1 "{ Class:SmallInteger }"
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   955
     x0 "{ Class:SmallInteger }"
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   956
    |
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   957
    x0 := textStartLeft - viewOrigin x.
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   958
    y1 := y.
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   959
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   960
    start to:stop do:[:i|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   961
	y0 := y1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   962
	y1 := self yVisibleOfLine:(i + 1).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   963
	self drawLabelAt:i x:x0 y:y0 h:(y1 - y0)
2642
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   964
    ].
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   965
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   966
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   967
!
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   968
1533
609fce5df829 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1508
diff changeset
   969
drawFrom:start to:stop x:x y:y w:w
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   970
    "draw the lines between start to stop without clearing the background
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   971
    "
1557
e3feb8bc17b0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1554
diff changeset
   972
    highlightMode notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   973
	self selectionDo:[:lnNr|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   974
	    (lnNr between:start and:stop) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   975
		self drawSelectionFrameAt:lnNr x:x w:w
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   976
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   977
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   978
    ].
2642
27174081058f move methods to super class; prepared for table
ca
parents: 2641
diff changeset
   979
    super drawFrom:start to:stop x:x y:y w:w.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   980
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   981
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   982
drawLabelAt:anIndex x:xI y:y h:h
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   983
    "draw the label at position x/y without clearing the background
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   984
    "
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   985
    |item y0 x1 x w drawStrikeOut xOut0 xOut1|
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
   986
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   987
    x := xI + 1.
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   988
    editorView notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   989
	"/ there is an open editor for the line; thus no redraw for the label (hidden by editor)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   990
	self selectedIndex == anIndex ifTrue:[^ self].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   991
    ].
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
   992
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
   993
    item := self at:anIndex ifAbsent:nil.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   994
    item isNil ifTrue:[^ self].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   995
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   996
    drawStrikeOut := false.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
   997
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
   998
    (highlightMode notNil and:[self isInSelection:anIndex]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
   999
	strikeOut ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1000
	    drawStrikeOut := true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1001
	    self paint:fgColor on:bgColor
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1002
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1003
	    (highlightMode == #dropMode or:[self hasFocus not]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1004
		self paint:hilightFgColorNoFocus on:hilightBgColorNoFocus.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1005
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1006
		self paint:hilightFgColor on:hilightBgColor
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1007
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1008
	]
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1009
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1010
	enterItem == item ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1011
	    self paint:hilightBgColor on:bgColor.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1012
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1013
	    self paint:fgColor on:bgColor.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1014
	].
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1015
    ].
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1016
    listRenderer display:item atX:x y:y lineHeight:h.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1017
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1018
    drawStrikeOut ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1019
	xOut0 := self xVisibleOfItem:item.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1020
	highlightMode == #label ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1021
	    xOut1 := xOut0 + (listRenderer widthFor:item).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1022
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1023
	    xOut1 := width - margin.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1024
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1025
	y0 := y + (h // 2).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1026
	self displayLineFromX:xOut0 y:y0 toX:xOut1 y:y0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1027
	y0 := y0 - 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1028
	self displayLineFromX:xOut0 y:y0 toX:xOut1 y:y0.
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1029
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1030
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1031
    cursorItem == item ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1032
	"/ textStartLeft
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1033
	self maskOrigin:((self viewOrigin + (0 @ 1)) \\ (lineMask extent)).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1034
	self mask:lineMask.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1035
	w := listRenderer widthFor:item.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1036
	self displayRectangleX:x -1 y:(y+2) width:w+2 height:(h - 4).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1037
	self mask:nil.
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1038
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1039
	enterItem == item ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1040
	    self highlightWithUnderline ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1041
		"/ underline the hilite...
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1042
		y0 := y + h - 2.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1043
		x1 := x + (listRenderer widthFor:item).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1044
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1045
		self displayLineFromX:x y:y0 toX:x1 y:y0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1046
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1047
	].
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1048
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1049
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1050
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1051
drawSelectionFrameAt:lnNr x:x w:w
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1052
    "draw the background and foreground of the selection frame
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1053
     at a lineNr.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1054
    "
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1055
    |item xMax xLftDmg xRgtDmg x0 x1 y0 y1 hL wL|
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1056
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1057
    (strikeOut or:[highlightMode isNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1058
	^ self
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1059
    ].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  1060
    editorView notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1061
	"/ there is an open editor; do not redraw selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1062
	^ self
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  1063
    ].
3367
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1064
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1065
    (    highlightMode == #line
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1066
     or:[highlightMode == #label
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1067
     or:[highlightMode == #dropMode]]
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1068
    ) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1069
	"/ highlightMode not supported
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1070
	^ self
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1071
    ].
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1072
    (item := self at:lnNr ifAbsent:nil) isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1073
	"/ list might change during drawing; item no longer visible
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1074
	^ self
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1075
    ].
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1076
    xMax := x + w.
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1077
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1078
    "/ CLEAR THE BACKGROUND
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1079
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1080
    y0 := self yVisibleOfLine:lnNr.
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1081
    y1 := self yVisibleOfLine:(lnNr + 1).
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1082
    hL := y1 - y0.
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1083
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1084
    highlightMode == #line ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1085
	x0 := x.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1086
	x1 := xMax.
3367
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1087
    ] ifFalse:[ "/ is #label or #rectangle
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1088
	x0 := (self xVisibleOfItem:item) - (textStartLeft // 2).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1089
	x0 >= xMax ifTrue:[ ^ self ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1090
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1091
	x1 := x0 + (listRenderer widthFor:item) + textStartLeft + 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1092
	x1 < x ifTrue:[ ^ self ].
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1093
    ].
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1094
    xLftDmg := x0 max:x.
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1095
    xRgtDmg := x1 min:xMax.
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1096
    xRgtDmg > xLftDmg ifFalse:[^ self].
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1097
3367
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1098
    (highlightMode == #dropMode or:[self hasFocus not]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1099
	self paint:hilightBgColorNoFocus.
3367
29f38ac1bac1 support highlightMode (selection) #dropMode
ca
parents: 3345
diff changeset
  1100
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1101
	self paint:hilightBgColor.
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1102
    ].
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1103
    self fillRectangleX:xLftDmg y:y0 width:(xRgtDmg - xLftDmg) height:hL.
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1104
    wL := x1 - x0.
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1105
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  1106
    "/ DRAW THE FRAME
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1107
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1108
    hilightFrameColor notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1109
	hilightLevel == 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1110
	    self paint:hilightFrameColor.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1111
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1112
	    highlightMode == #line ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1113
		self displayLineFromX:x0 y:y0 toX:x1 y:y0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1114
		y1 := y0 + hL - 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1115
		self displayLineFromX:x0 y:y1 toX:x1 y:y1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1116
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1117
		self displayRectangleX:x0 y:y0 width:wL height:hL
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1118
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1119
	    ^ self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1120
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1121
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1122
	hilightStyle == #motif ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1123
	    self paint:bgColor.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1124
	    y1 := y0 + 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1125
	    highlightMode == #line ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1126
		self displayLineFromX:x0 y:y1 toX:x1 y:y1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1127
		y1 := y0 + hL - 2.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1128
		self displayLineFromX:x0 y:y1 toX:x1 y:y1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1129
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1130
		self displayRectangleX:x0 + 1 y:y1 width:wL - 2 height:hL - 2
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1131
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1132
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1133
	hilightLevel == 0 ifTrue:[ ^ self ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1134
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1135
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1136
    "/ draw edge
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1137
    highlightMode == #line ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1138
	x0 := margin.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1139
	wL := width - x0 - x0.
2646
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1140
    ].
8be2becc5152 drawSelectionFrameAt:.. clear damaged background not items background
ca
parents: 2644
diff changeset
  1141
    self drawEdgesForX:x0 y:y0 width:wL height:hL level:hilightLevel.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1142
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1143
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1144
invalidateSelection
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1145
    "invalidate the current selection
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1146
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1147
    shown ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1148
	self selectionDo:[:aLnNr|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1149
	    self invalidateLineAt:aLnNr
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1150
	].
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1151
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1152
!
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1153
2245
546c6e5d0951 change #redrawSelectionAt: to #invalidateSelectionAt: (because is a invalidate)
ca
parents: 2228
diff changeset
  1154
invalidateSelectionAt:aLineNr
1569
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1155
    "redraw a line which changed its selection status.
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1156
     optimized when drawing only the label.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1157
    "
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1158
    |item x|
1569
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1159
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  1160
    editorView notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1161
	"/ there is an open editor; do not redraw selected
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1162
	^ self
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  1163
    ].
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  1164
1569
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1165
    (shown and:[aLineNr notNil and:[highlightMode notNil]]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1166
	^ self
1557
e3feb8bc17b0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1554
diff changeset
  1167
    ].
e3feb8bc17b0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1554
diff changeset
  1168
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1169
    highlightMode == #label ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1170
	item := self at:aLineNr ifAbsent:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1171
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1172
	item isNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1173
	    ^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1174
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1175
	x := (self xVisibleOfItem:item) - (textStartLeft // 2)
1569
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1176
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1177
	x := 0.
1569
447b0cafc1db drawing selected or unselected
ca
parents: 1564
diff changeset
  1178
    ].
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1179
    self invalidateLineAt:aLineNr fromX:x
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1180
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1181
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1182
!SelectionInListModelView methodsFor:'event handling'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1183
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1184
activateMenu
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1185
    |item menu appl|
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1186
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1187
    enabled ifFalse:[^ self].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1188
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1189
    item := self selectedElement.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1190
    item notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1191
        menu := item perform:#middleButtonMenu ifNotUnderstood:nil.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1192
        menu notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1193
            menu isCollection ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1194
                menu := Menu decodeFromLiteralArray:menu.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1195
                appl := self application.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1196
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1197
                appl notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1198
                    menu findGuiResourcesIn:appl.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1199
                    "/ menu receiver:appl  -- now done in findGuiResources ...
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1200
                ] ifFalse:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1201
                    menu receiver:item
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1202
                ]
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1203
            ].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1204
            self startUpMenu:menu.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1205
            ^ self
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1206
        ].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1207
    ].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1208
    super activateMenu
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1209
!
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1210
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1211
buttonControlPressAtLine:lineNr x:x y:y
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1212
    "handle a button control press
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1213
    "
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1214
    |isInSelection prvLine chgSet doAdd|
1747
f46c5941c028 better alghorithm for button motion in multipleSelection mode
ca
parents: 1745
diff changeset
  1215
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1216
    isInSelection := self isInSelection:lineNr.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1217
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1218
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1219
	isInSelection ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1220
	    self deselect
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1221
	]ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1222
	    (self canSelectIndex:lineNr forAdd:false) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1223
		self buttonPressOrReleaseAtLine:lineNr x:x y:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1224
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1225
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1226
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1227
    ].
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  1228
    isInSelection ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1229
	self removeFromSelection:lineNr
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  1230
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1231
	self addToSelection:lineNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1232
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1233
	(self isInSelection:lineNr) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1234
	    "/ cannot add to selection
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1235
	    ^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1236
	].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1237
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1238
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1239
    prvLine := lineNr.
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1240
    chgSet  := IdentitySet new.
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1241
    doAdd   := isInSelection not.
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1242
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1243
    buttonMotionAction := [:p| |rowNr mustRestore step f|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1244
	rowNr := self yVisibleToLineNr:(p y).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1245
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1246
	(rowNr notNil and:[rowNr ~~ prvLine]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1247
	    rowNr == lineNr ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1248
		mustRestore := true
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1249
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1250
		rowNr > lineNr ifTrue:[ mustRestore := (rowNr < prvLine) ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1251
			      ifFalse:[ mustRestore := (rowNr > prvLine) ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1252
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1253
	    prvLine > rowNr ifTrue:[ step := -1 ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1254
			  ifFalse:[ step :=  1 ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1255
	    mustRestore ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1256
		[ prvLine ~~ rowNr ] whileTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1257
		    (chgSet removeIdentical:prvLine ifAbsent:nil) notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1258
			doAdd ifFalse:[ self addToSelection:prvLine ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1259
			       ifTrue:[ self removeFromSelection:prvLine ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1260
		    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1261
		    prvLine := prvLine + step.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1262
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1263
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1264
		[ prvLine ~~ rowNr ] whileTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1265
		    prvLine := prvLine + step.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1266
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1267
		    doAdd ~~ (self isInSelection:rowNr) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1268
			chgSet add:prvLine.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1269
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1270
			doAdd ifTrue:[ self addToSelection:prvLine ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1271
			     ifFalse:[ self removeFromSelection:prvLine ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1272
		    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1273
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1274
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1275
	].
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1747
diff changeset
  1276
    ].
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1277
!
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1747
diff changeset
  1278
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1279
buttonMotion:buttonMask x:x y:y
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1280
    "mouse-move while button was pressed - handle selection changes
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1281
    "
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1282
    |lnNr item|
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1283
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1747
diff changeset
  1284
    self stopAutoScroll.
0a2213a15e06 support of auto scrolling
ca
parents: 1747
diff changeset
  1285
2441
9ca40d634ff8 attention - do no motionAction, if no button is pressed
Claus Gittinger <cg@exept.de>
parents: 2418
diff changeset
  1286
    (buttonMask ~~ 0 and:[buttonMotionAction notNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1287
	buttonMotionAction value:(x@y).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1288
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1289
	(autoScroll and:[buttonMotionAction notNil]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1290
	    "/ if moved outside of view, start autoscroll
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1291
	    (y between:0 and:height) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1292
		y < 0 ifTrue:[ self startAutoScroll:#scrollUp distance:y ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1293
		     ifFalse:[ self startAutoScroll:#scrollDown distance:(y - height) ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1294
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1295
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1296
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1297
    ].
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1298
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1299
    (enabled and:[highlightEnterItem]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1300
	self sensor anyButtonPressed ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1301
	    lnNr := self yVisibleToLineNr:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1302
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1303
	    lnNr notNil ifTrue:[ item := self at:lnNr ifAbsent:nil ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1304
		       ifFalse:[ item := nil ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1305
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1306
	    self pointerEntersItem:item.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1307
	]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1308
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1309
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1310
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1311
buttonMultiPress:button x:x y:y
2948
9b7b7b2e0dcd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  1312
    "button was pressed multiple - handle a doubleClick action"
9b7b7b2e0dcd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  1313
3704
c9b2102bfd1c handle doubleClick - element under point is not selected
ca
parents: 3684
diff changeset
  1314
    |lnNr item|
c9b2102bfd1c handle doubleClick - element under point is not selected
ca
parents: 3684
diff changeset
  1315
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1316
    buttonMotionAction := buttonReleaseAction := nil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1317
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1318
    enabled ifFalse:[^ self].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1319
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1320
    (button == 1) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1321
        doubleClickActionBlock notNil ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1322
            (     (lnNr := self yVisibleToLineNr:y)   notNil
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1323
             and:[(item := self at:lnNr ifAbsent:nil) notNil]
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1324
            ) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1325
                doubleClickActionBlock valueWithOptionalArgument:lnNr and:self.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1326
            ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1327
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1328
        ^ self.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1329
    ].
2947
caa98c08d3cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2920
diff changeset
  1330
2948
9b7b7b2e0dcd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2947
diff changeset
  1331
    super buttonMultiPress:button x:x y:y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1332
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1333
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1334
buttonPress:button x:x y:y
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1335
    "a button was pressed - handle selection here
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1336
    "
3146
b7294baadfb7 button press, move and release behaviour
ca
parents: 3137
diff changeset
  1337
    |sensor item menu appl isSelected lineNr startLine dragDistance|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1338
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1339
    modelChangedDuringButtonPress := buttonMotionAction := buttonReleaseAction := nil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1340
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1341
    self pointerEntersItem:nil.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1342
    self cursorEntersItem:nil.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1343
    self closeEditor.
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1344
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1345
    enabled ifFalse:[^ self].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1346
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  1347
    sensor := self sensor.
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  1348
    lineNr := self yVisibleToLineNr:y.
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  1349
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1350
    (button == 2) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1351
        (self selectOnMenuButton and:[self numberOfSelections <= 1]) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1352
            (     lineNr notNil
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1353
             and:[self canSelectIndex:lineNr forAdd:false ]
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1354
            ) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1355
                (lineNr ~~ self selectedIndex) ifTrue: [
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1356
                    (self selectWithoutScroll:lineNr redraw:true) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1357
                        self selectionChanged
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1358
                    ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1359
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1360
            ]
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1361
        ].
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1362
        item := self selectedElement.
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1363
        item notNil ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1364
            self makeSelectionVisible.
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1365
"/ now in activateMenu...
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1366
"/            menu := item perform:#middleButtonMenu ifNotUnderstood:nil.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1367
"/            menu notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1368
"/                menu isCollection ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1369
"/                    menu := Menu decodeFromLiteralArray:menu.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1370
"/                    appl := self application.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1371
"/
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1372
"/                    appl notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1373
"/                        menu findGuiResourcesIn:appl.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1374
"/                        "/ menu receiver:appl  -- now done in findGuiResources ...
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1375
"/                    ] ifFalse:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1376
"/                        menu receiver:item
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1377
"/                    ]
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1378
"/                ].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1379
"/                self startUpMenu:menu.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1380
"/                ^ self
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1381
"/            ].
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1382
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1383
        super buttonPress:button x:x y:y.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1384
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1385
    ].
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1386
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  1387
    lineNr isNil ifTrue:[ ^ self ].
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1388
    modelChangedDuringButtonPress := false.
1578
cfa573485242 ask for middleButtonMenu if menuButton pressed
ca
parents: 1569
diff changeset
  1389
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1390
    sensor ctrlDown ifTrue:[
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1391
        self buttonControlPressAtLine:lineNr x:x y:y.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1392
        ^ self
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1393
    ].
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1394
2976
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
  1395
    isSelected  := self isInSelection:lineNr.
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
  1396
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
  1397
    (self canDrag and:[sensor shiftDown not]) ifTrue:[
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1398
        dragDistance := UserPreferences current motionDistanceToStartDrag.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1399
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1400
        isSelected ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1401
            buttonMotionAction :=
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1402
                [:p|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1403
                    ((x@y) dist:p) > dragDistance ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1404
                        self startDragAt:p.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1405
                    ]
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1406
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1407
            buttonReleaseAction := [ self buttonPressOrReleaseAtLine:lineNr x:x y:y ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1408
            ^ self.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1409
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1410
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1411
        self selectOnButtonPress ifFalse: [
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1412
            |oldSelection|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1413
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1414
            "/ set selection to line;
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1415
            "/ set the model without change notification (objects to drag)
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1416
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1417
            oldSelection := selection copy.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1418
            self selectAndUpdateModelWithoutChangeNotification: lineNr.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1419
            self windowGroup processExposeEvents.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1420
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1421
            buttonMotionAction :=
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1422
                [:p|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1423
                    ((x@y) dist:p) > dragDistance ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1424
                        |handler|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1425
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1426
                        handler := self startDragAt:p.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1427
                        handler contentsWillChange.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1428
                        "/ restore old selection
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1429
                        self selectAndUpdateModelWithoutChangeNotification: oldSelection.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1430
                        self windowGroup processExposeEvents.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1431
                    ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1432
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1433
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1434
            buttonReleaseAction := [
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1435
                (self canSelectIndex:lineNr forAdd:false) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1436
                    "/ notify selection change
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1437
                    self selectionChanged.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1438
                ] ifFalse:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1439
                    "/ restore old selection
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1440
                    self selectAndUpdateModelWithoutChangeNotification: oldSelection.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1441
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1442
            ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1443
            ^ self
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1444
        ].
2976
136d983423ab drag & drop activation if moving horizontal n pixels
ca
parents: 2964
diff changeset
  1445
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1446
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1447
    multipleSelectOk ifFalse:[
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1448
        (isSelected or:[self canSelectIndex:lineNr forAdd:false]) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1449
            self buttonPressOrReleaseAtLine:lineNr x:x y:y.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1450
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1451
            (dragDistance notNil and:[self isInSelection:lineNr]) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1452
                buttonMotionAction :=
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1453
                    [:p|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1454
                        ((x@y) dist:p) > dragDistance ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1455
                            self startDragAt:p.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1456
                        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1457
                    ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1458
            ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1459
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1460
        ^ self
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  1461
    ].
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1462
    startLine := lineNr.
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  1463
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1464
    sensor shiftDown ifTrue:[ |min max|
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1465
        (isSelected or:[self canSelectIndex:lineNr forAdd:true]) ifFalse:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1466
            ^ self
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1467
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1468
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1469
        multipleSelectOk ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1470
            startLine := self firstInSelection.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1471
            startLine isNil ifTrue:[ startLine := lineNr ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1472
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1473
            startLine <= lineNr ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1474
                self selectFrom:startLine to:lineNr.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1475
            ] ifFalse:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1476
                startLine := self lastInSelection.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1477
                self selectFrom:lineNr to:startLine.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1478
            ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1479
        ]
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1480
    ] ifFalse:[
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1481
        (isSelected or:[self canSelectIndex:lineNr forAdd:false]) ifFalse:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1482
            ^ self
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1483
        ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1484
        self buttonPressOrReleaseAtLine:lineNr x:x y:y.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1485
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1486
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1487
    multipleSelectOk ifTrue:[
3740
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1488
        buttonMotionAction :=
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1489
            [:p| |ln|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1490
                (p y between:0 and:height) ifTrue:[ |ln|
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1491
                    ln := self yVisibleToLineNr:p y.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1492
                    ln isNil ifTrue:[ln := self size].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1493
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1494
                    (ln ~~ self lastInSelection and:[ln ~~ self firstInSelection]) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1495
                        self selectFrom:startLine to:ln.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1496
                        dragDistance := nil.   "/ selection changed - no longer dragable
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1497
                    ]
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1498
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1499
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1500
                (dragDistance notNil and:[(x dist:p x) > dragDistance]) ifTrue:[
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1501
                    self startDragAt:p.
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1502
                ].
67a77c2fcb03 preps for right-menu on buttonRelease
Claus Gittinger <cg@exept.de>
parents: 3728
diff changeset
  1503
            ].
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1504
    ].
3221
af3fae427c7e use decodeFromLiteralArray
Claus Gittinger <cg@exept.de>
parents: 3205
diff changeset
  1505
af3fae427c7e use decodeFromLiteralArray
Claus Gittinger <cg@exept.de>
parents: 3205
diff changeset
  1506
    "Modified: / 27-03-2007 / 08:43:58 / cg"
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1507
!
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1508
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1509
buttonPressOrReleaseAtLine:aLnNr x:x y:y
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1510
    "handle a button press or release at a line
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1511
    "
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1512
    aLnNr == self selectedIndex ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1513
	editorView notNil ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1514
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1515
	self openEditorAction notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1516
	    self openEditorAtX:x y:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1517
	    editorView notNil ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1518
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1519
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1520
	ignoreReselect ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1521
	    (toggleSelect and:[self sensor ctrlDown]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1522
		self selection:nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1523
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1524
		self selectionChanged
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1525
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1526
	].
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  1527
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1528
	(self selectWithoutScroll:aLnNr redraw:true) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1529
	    self selectionChanged
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1530
	]
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
  1531
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1532
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1533
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1534
buttonRelease:button x:x y:y
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1535
    "a button was released"
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1536
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1537
    |makeSelectionVisible|
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1538
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1539
    button == 1 ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1540
        makeSelectionVisible := modelChangedDuringButtonPress.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1541
        buttonMotionAction   := modelChangedDuringButtonPress := nil.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1542
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1543
        buttonReleaseAction notNil ifTrue:[
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1544
            buttonReleaseAction value.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1545
            buttonReleaseAction := nil.
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1546
        ].
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1547
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1548
        self cursorEntersItem:nil.
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  1549
    ].
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1747
diff changeset
  1550
    self stopAutoScroll.
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1551
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1552
    (makeSelectionVisible == true and:[self hasSelection]) ifTrue:[
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1553
        self makeSelectionVisible
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  1554
    ].
3750
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1555
948546ea76a5 fixed handling of menu button (fire on release)
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
  1556
    super buttonRelease:button x:x y:y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1557
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1558
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1559
characterPress:aKey x:x y:y
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1560
    " a character is pressed - lookup and change selection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1561
    "
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2455
diff changeset
  1562
    |lnNr size idx stp to1 fr2|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1563
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1564
    size := self size.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1565
    size > 1 ifFalse:[^ self].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1566
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1567
    lnNr := self firstInSelection.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1568
    lnNr isNil ifTrue:[lnNr := 0].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1569
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2455
diff changeset
  1570
    self sensor shiftDown ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1571
	stp := -1.              "/ search backward
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1572
	to1 :=  1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1573
	fr2 := size.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1574
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1575
	stp := 1.               "/ search forward
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1576
	to1 := size.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1577
	fr2 := 1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1578
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1579
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1580
    idx := self findLineFrom:lnNr+stp to:to1 by:stp startingWithCharacter:aKey.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1581
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1582
    idx == 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1583
	idx := self findLineFrom:fr2 to:lnNr-stp by:stp startingWithCharacter:aKey.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1584
	idx == 0 ifTrue:[^ self].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1585
    ].
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1586
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1587
    self selection:idx.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1588
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1589
    keyActionStyle == #selectAndDoubleClick ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1590
	self doubleClicked
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1591
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1592
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1593
1768
04b330a75f75 allow for subclasses to redefine character search
Claus Gittinger <cg@exept.de>
parents: 1758
diff changeset
  1594
characterSearchItemStringAt:anIndex
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1595
    "for first-character search:
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1596
     return a lines item-string.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1597
     For multi-col items, this may be different from the actual string
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1598
    "
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1599
    |item s|
1768
04b330a75f75 allow for subclasses to redefine character search
Claus Gittinger <cg@exept.de>
parents: 1758
diff changeset
  1600
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1601
    item := self at:anIndex ifAbsent:nil.
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1602
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1603
    item isHierarchicalItem ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1604
	item := item string
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1605
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1606
    item isNil ifTrue:[^ nil].
1768
04b330a75f75 allow for subclasses to redefine character search
Claus Gittinger <cg@exept.de>
parents: 1758
diff changeset
  1607
2455
44300555526c Convert Object>>errorSignal -> Error
Stefan Vogel <sv@exept.de>
parents: 2447
diff changeset
  1608
    (Error catch:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1609
	s := item asString
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1610
    ]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1611
	s := item displayString
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1612
    ].
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  1613
    ^ s
1768
04b330a75f75 allow for subclasses to redefine character search
Claus Gittinger <cg@exept.de>
parents: 1758
diff changeset
  1614
!
04b330a75f75 allow for subclasses to redefine character search
Claus Gittinger <cg@exept.de>
parents: 1758
diff changeset
  1615
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1616
containerChangedSize
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1617
    "/ stupid kludge for motif-style (which draws a frame at the right-edge)
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1618
    "/ cg: I think it should not (see normal SelectionInListView, which does only
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1619
    "/     draw the frame at the top and bottom, but NOT at the left and right
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1620
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  1621
    self hasSelection ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1622
	(hilightFrameColor notNil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1623
	or:[hilightStyle == #motif
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1624
	or:[hilightLevel ~~ 0]]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1625
	   "/ invalidate the right-edge
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1626
	    self invalidate:(((width-3) @ 0) corner:((width-1) @ (height-1))).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1627
	]
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1628
    ].
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1629
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1630
    super containerChangedSize.
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1631
!
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1632
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1633
cursorEntersItem:anItemOrNil
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1634
    "the cursor enters an item or nil
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1635
    "
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1636
    |lnNr x|
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1637
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1638
    (shown and:[self size ~~ 0]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1639
	cursorItem := nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1640
	^ self.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1641
    ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1642
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1643
    anItemOrNil == cursorItem ifTrue:[ ^ self ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1644
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1645
    2 timesRepeat:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1646
	cursorItem notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1647
	    lnNr := self identityIndexOf:cursorItem.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1648
	    lnNr notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1649
		x := self xVisibleOfItem:cursorItem.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1650
		self invalidateLineAt:lnNr fromX:x
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1651
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1652
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1653
	"/ set the new item
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1654
	cursorItem := anItemOrNil.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1655
    ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1656
    cursorItem notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1657
	self makeLineVisible:lnNr
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1658
    ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1659
!
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1660
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1661
doubleClicked
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1662
    "handle a double click
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1663
    "
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
  1664
    |arg|
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
  1665
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
  1666
    doubleClickActionBlock notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1667
	arg := self selectedIndex.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1668
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1669
	arg ~~ 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1670
	    doubleClickActionBlock valueWithOptionalArgument:arg and:self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1671
	]
2416
dd563121a967 instead of #numArgs use: #valueWithOptionalArgument:and
ca
parents: 2413
diff changeset
  1672
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1673
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1674
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1675
findLineFrom:aStart to:aStop by:aStep startingWithCharacter:aCharacter
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1676
    "find a line starting with a character
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1677
    "
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1678
    |char lbl cmp
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1679
     size     "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1680
     start    "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1681
     stop     "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1682
    |
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1683
    (size := self size) ~~ 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1684
	aStep > 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1685
	    aStart > aStop ifTrue:[^ 0].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1686
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1687
	    (aStep == 0 or:[aStop > aStart]) ifTrue:[^ 0]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1688
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1689
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1690
	start := aStart < 0 ifTrue:[1] ifFalse:[aStart min:size].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1691
	stop  := aStop  < 0 ifTrue:[1] ifFalse:[aStop  min:size].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1692
	char  := aCharacter asUppercase.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1693
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1694
	start to:stop by:aStep do:[:anIndex|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1695
	    lbl := self characterSearchItemStringAt:anIndex.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1696
	    lbl notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1697
		cmp := lbl string at:1 ifAbsent:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1698
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1699
		cmp notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1700
		    (char == cmp or:[char == cmp asUppercase]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1701
			(self canSelectIndex:anIndex forAdd:false) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1702
			    ^ anIndex
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1703
			].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1704
			^ 0
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1705
		    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1706
		]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1707
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1708
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1709
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1710
    ^ 0
3081
0af6dce8cbf0 first look for the next item then do a select check
fm
parents: 2976
diff changeset
  1711
0af6dce8cbf0 first look for the next item then do a select check
fm
parents: 2976
diff changeset
  1712
    "Modified: / 15-09-2006 / 11:26:29 / User"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1713
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1714
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1715
invalidateLineOfItem:anItem
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1716
    |lnNr x|
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1717
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1718
    lnNr := self identityIndexOf:enterItem.
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1719
    lnNr notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1720
	x := self xVisibleOfItem:enterItem.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1721
	self invalidateLineAt:lnNr fromX:x
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1722
    ].
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1723
!
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1724
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1725
keyPress:aKey x:x y:y
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1726
    "a key was pressed - handle page-keys here
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1727
    "
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  1728
    <resource: #keyboard( #CursorUp #CursorDown #EndOfText #EndOfLine
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1729
			  #BeginOfText #BeginOfLine #Return
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1730
			  #CmdReturn #CmdCursorUp #CmdCursorDown #SelectAll)>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1731
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1732
    |lineNr listSize shifted newSel step start|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1733
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1734
    enabled ifFalse:[ ^ self ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1735
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1736
    listSize := self size.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1737
    listSize == 0 ifTrue:[^ self].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1738
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  1739
    aKey isCharacter ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1740
	keyActionStyle notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1741
	    keyActionStyle == #pass ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1742
		super keyPress:aKey x:x y:y
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1743
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1744
		self characterPress:aKey x:x y:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1745
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1746
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1747
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1748
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1749
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1750
    aKey == #Escape ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1751
	cursorItem notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1752
	    self cursorEntersItem:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1753
	    self makeSelectionVisible.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1754
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1755
	super keyPress:aKey x:x y:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1756
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1757
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1758
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  1759
    ((aKey == #BeginOfText) or:[aKey == #BeginOfLine]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1760
	self cursorEntersItem:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1761
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1762
	1 to:listSize do:[:i|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1763
	    (self canSelectIndex:i forAdd:false) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1764
		self selection:i.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1765
		^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1766
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1767
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1768
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1769
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1770
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  1771
    ((aKey == #EndOfText) or:[aKey == #EndOfLine]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1772
	self cursorEntersItem:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1773
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1774
	listSize to:1 by:-1 do:[:i|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1775
	    (self canSelectIndex:i forAdd:false) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1776
		self selection:i.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1777
		^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1778
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1779
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1780
	^ self
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1781
    ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1782
    lineNr := self cursorLine.
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1783
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1784
    aKey == #Return ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1785
	returnKeyActionStyle == #pass ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1786
	    super keyPress:aKey x:x y:y
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1787
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1788
	    lineNr ~~ 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1789
		self cursorEntersItem:nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1790
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1791
		(self canSelectIndex:lineNr forAdd:false) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1792
		    self selection:lineNr
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1793
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1794
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1795
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1796
	    returnKeyActionStyle == #doubleClick ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1797
		self doubleClicked
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1798
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1799
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1800
	^ self
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1801
    ].
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1802
3607
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  1803
    aKey == #SelectAll ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1804
	self selectAll.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1805
	^ self
3607
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  1806
    ].
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  1807
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1808
    (lineNr == 0 and:[selection notNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1809
	multipleSelectOk ifFalse:[lineNr := selection]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1810
			  ifTrue:[lineNr := selection last].
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1811
    ].
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1812
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1813
    aKey == #CmdReturn ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1814
	"/ toggle selection of the item
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1815
	lineNr ~~ 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1816
	    (self isInSelection:lineNr) ifTrue:[ self removeFromSelection:lineNr ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1817
				       ifFalse:[ self addToSelection:lineNr ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1818
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1819
	    self cursorEntersItem:(self at:lineNr).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1820
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1821
	^ self
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1822
    ].
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1823
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1824
    (aKey == #CmdCursorDown or:[aKey == #CmdCursorUp]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1825
	aKey == #CmdCursorDown ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1826
	    lineNr := lineNr + 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1827
	    lineNr > listSize ifTrue:[lineNr := 1].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1828
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1829
	    lineNr := lineNr - 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1830
	    lineNr < 1 ifTrue:[lineNr := listSize].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1831
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1832
	self cursorEntersItem:(self at:lineNr).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1833
	^ self
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1834
    ].
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1835
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1836
    (aKey == #CursorUp or:[aKey == #CursorDown]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1837
	super keyPress:aKey x:x y:y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1838
	^ self
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  1839
    ].
2413
49f5c28b1364 key handling
ca
parents: 2410
diff changeset
  1840
    shifted := (multipleSelectOk and:[self sensor shiftDown]).
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1841
    self cursorEntersItem:nil.
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1842
2671
bba7717907bb compress keyEvents cursor Up and Down
ca
parents: 2670
diff changeset
  1843
    aKey == #CursorDown ifTrue:[ step :=  1.]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1844
		       ifFalse:[ step := -1.].
2671
bba7717907bb compress keyEvents cursor Up and Down
ca
parents: 2670
diff changeset
  1845
bba7717907bb compress keyEvents cursor Up and Down
ca
parents: 2670
diff changeset
  1846
    shifted ifFalse:[ |compressed|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1847
	compressed := self sensor compressKeyPressEventsWithKey:aKey.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1848
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1849
	compressed ~~ 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1850
	    aKey == #CursorDown ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1851
		lineNr := lineNr + compressed.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1852
		lineNr > listSize ifTrue:[lineNr := 1].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1853
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1854
		lineNr := lineNr - compressed.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1855
		lineNr < 1 ifTrue:[lineNr := listSize].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1856
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1857
	].
2671
bba7717907bb compress keyEvents cursor Up and Down
ca
parents: 2670
diff changeset
  1858
    ].
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1859
    start  := lineNr.
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1860
    lineNr := lineNr + step.
2368
8101aa8d50d2 cursor select behaviour in: #keyPress:x:y:
ca
parents: 2365
diff changeset
  1861
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1862
    [ lineNr ~~ start ] whileTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1863
	(lineNr between:1 and:listSize) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1864
	    lineNr < 1 ifTrue:[ lineNr := listSize ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1865
		      ifFalse:[ lineNr := 1 ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1866
	] ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1867
	    (self canSelectIndex:lineNr forAdd:shifted) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1868
		shifted ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1869
		    self selection:lineNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1870
		    ^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1871
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1872
		(self isInSelection:lineNr) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1873
		    selection isNil ifTrue:[ newSel := Array with:lineNr ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1874
				   ifFalse:[ newSel := selection copyWith:lineNr ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1875
		] ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1876
		    (start ~~ 0 and:[selection size > 1]) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1877
			^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1878
		    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1879
		    newSel := selection copyWithout:start.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1880
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1881
		self selectWithoutScroll:newSel redraw:true.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1882
		self makeLineVisible:lineNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1883
		self selectionChanged.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1884
		^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1885
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1886
	    lineNr := lineNr + step.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1887
	]
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1888
    ].
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1889
!
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1890
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1891
pointerEntersItem:anItemOrNil
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1892
    "the pointer moves over an item or nil
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1893
    "
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1894
    |newItem|
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1895
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  1896
    (shown and:[self size ~~ 0]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1897
	enterItem := nil.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1898
	^ self.
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1899
    ].
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1900
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1901
    highlightEnterItem ifTrue:[ newItem := anItemOrNil ]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1902
		      ifFalse:[ newItem := nil ].
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1903
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1904
    anItemOrNil == enterItem ifTrue:[ ^ self ].
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1905
3338
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1906
    enterItem notNil ifTrue:[ self invalidateLineOfItem:enterItem ].
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1907
    enterItem := anItemOrNil.
01ad784543fc no underline-highlighting
Claus Gittinger <cg@exept.de>
parents: 3275
diff changeset
  1908
    enterItem notNil ifTrue:[ self invalidateLineOfItem:enterItem ].
2323
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1909
!
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1910
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1911
pointerLeave:state
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1912
    self pointerEntersItem:nil.
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1913
    super pointerLeave:state.
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1914
!
8257059da044 support of highlighting items under mouse
ca
parents: 2309
diff changeset
  1915
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1916
sizeChanged:how
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1917
    |selectionWasVisible|
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1918
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1919
    selectionWasVisible := false.
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1920
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1921
    "/ stupid kludge for motif-style (which draws a frame at the right-edge)
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1922
    "/ cg: I think it should not (see normal SelectionInListView, which does only
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1923
    "/     draw the frame at the top and bottom, but NOT at the left and right
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  1924
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  1925
    self hasSelection ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1926
	selectionWasVisible := self isSelectionVisibleIn:(previousExtent ? self extent).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1927
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1928
	(hilightFrameColor notNil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1929
	or:[hilightStyle == #motif
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1930
	or:[hilightLevel ~~ 0]]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1931
	   "/ invalidate the right-edge
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1932
	    self invalidate:(((width-3) @ 0) corner:((width-1) @ (height-1))).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1933
	].
1917
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1934
    ].
21964f5b1cc1 fixed selection redraw when resizing (larger) in motif mode
Claus Gittinger <cg@exept.de>
parents: 1915
diff changeset
  1935
    super sizeChanged:how.
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1936
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1937
    selectionWasVisible ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1938
	self makeSelectionVisible
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  1939
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1940
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1941
1421
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1942
!SelectionInListModelView methodsFor:'focus handling'!
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1943
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1944
showFocus:explicit
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1945
    self invalidateSelection.
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1946
    super showFocus:explicit
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1947
!
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1948
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1949
showNoFocus:explicit
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1950
    self invalidateSelection.
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1951
    super showNoFocus:explicit
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1952
!
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1953
1421
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1954
wantsFocusWithPointerEnter
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1955
    "return true, if I want the focus when
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1956
     the mouse pointer enters"
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1957
2701
d95a0a764f4d do return false in #wantsFocusWithPointerEnter if an ecitor is open
ca
parents: 2671
diff changeset
  1958
    (editorView notNil and:[editorView realized]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1959
	^ false
2701
d95a0a764f4d do return false in #wantsFocusWithPointerEnter if an ecitor is open
ca
parents: 2671
diff changeset
  1960
    ].
d95a0a764f4d do return false in #wantsFocusWithPointerEnter if an ecitor is open
ca
parents: 2671
diff changeset
  1961
2959
afaf27dffcc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2948
diff changeset
  1962
    (UserPreferences current focusFollowsMouse ~~ false
1421
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1963
    and:[(styleSheet at:#'selection.requestFocusOnPointerEnter' default:true)
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1964
    ]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1965
	self size > 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1966
	    ^ true
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1967
	]
1421
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1968
    ].
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1969
    ^ false
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1970
! !
95ac3092660a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1971
2501
832cbac295b8 method category rename
Claus Gittinger <cg@exept.de>
parents: 2493
diff changeset
  1972
!SelectionInListModelView methodsFor:'initialization & release'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1973
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1974
fetchResources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1975
    "fetch device colors and ..., to avoid reallocation at redraw time;
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1976
     *** called after a create or snapin to fetch all device resources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1977
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1978
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1979
    super fetchResources.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1980
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1981
    hilightFgColor    := self colorOnDevice:hilightFgColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1982
    hilightBgColor    := self colorOnDevice:hilightBgColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1983
    hilightFrameColor := self colorOnDevice:hilightFrameColor.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1984
    lineMask          := lineMask  onDevice:device.
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1985
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1986
    hilightFgColorNoFocus := self colorOnDevice:hilightFgColorNoFocus.
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  1987
    hilightBgColorNoFocus := self colorOnDevice:hilightBgColorNoFocus.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1988
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1989
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1990
initStyle
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1991
    "setup viewStyle specifics
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1992
    "
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  1993
    <resource: #style (#'selection.selectOnMenuButton'
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  1994
                       #'selection.font')>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1995
    super initStyle.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1996
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1997
    lineMask isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  1998
        lineMask := Form width:2 height:2 fromArray:#[16rAA 16r55].
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  1999
    ].
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  2000
2228
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  2001
    hilightFrameColor   := nil.
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  2002
    hilightStyle        := DefaultHilightStyle.
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  2003
    highlightMode       := #label.
5268b9c3be4a add behavior: selectOnButtonMenu; update documentation
ca
parents: 2225
diff changeset
  2004
    textStartLeft       := 4.
3461
eb3980ed82ad bugfix: selectTreeElementOnRightClick behaviour
ca
parents: 3455
diff changeset
  2005
    selectOnMenuButton  := styleSheet at:#'selection.selectOnMenuButton' default:nil.
eb3980ed82ad bugfix: selectTreeElementOnRightClick behaviour
ca
parents: 3455
diff changeset
  2006
    selectOnMenuButton isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2007
        selectOnMenuButton := UserPreferences current selectOnRightClick
3461
eb3980ed82ad bugfix: selectTreeElementOnRightClick behaviour
ca
parents: 3455
diff changeset
  2008
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2009
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2010
    self font:(styleSheet fontAt:#'selection.font').
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
  2011
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2012
    device hasGrayscales ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2013
        "
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2014
         must get rid of these hard codings
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2015
        "
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2016
        (hilightStyle == #next) ifTrue:[
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2017
            hilightFgColor := fgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2018
            hilightBgColor := White.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2019
            hilightFrameColor := fgColor
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2020
        ] ifFalse:[
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2021
            (hilightStyle == #motif) ifTrue:[
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2022
                fgColor := White.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2023
                bgColor := Grey.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2024
                viewBackground := bgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2025
                hilightFgColor := bgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2026
                hilightBgColor := fgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2027
            ] ifFalse:[
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2028
                (hilightStyle == #openwin) ifTrue:[
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2029
                    hilightFgColor := fgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2030
                    hilightBgColor := Color grey.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2031
                ]
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2032
            ]
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2033
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2034
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2035
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2036
    hilightFgColor isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2037
        hilightFgColor := bgColor.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2038
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2039
    hilightBgColor isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2040
        hilightBgColor := fgColor.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2041
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2042
    DefaultForegroundColor notNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2043
        fgColor := DefaultForegroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2044
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2045
    DefaultBackgroundColor notNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2046
        bgColor := viewBackground := DefaultBackgroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2047
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2048
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2049
    DefaultHilightForegroundColor notNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2050
        hilightFgColor := DefaultHilightForegroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2051
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2052
    DefaultHilightBackgroundColor notNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2053
        hilightBgColor := DefaultHilightBackgroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2054
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2055
    DefaultHilightFrameColor notNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2056
        hilightFrameColor := DefaultHilightFrameColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2057
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2058
1741
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
  2059
    hilightLevel := DefaultHilightLevel ? 0.
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
  2060
    lineSpacing  := (hilightLevel abs > 0) ifTrue:[3] ifFalse:[2].
d928cdc5f4e5 add #ignoreReselect #toggleSelect; behaviour like SelectionInListView
ca
parents: 1739
diff changeset
  2061
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2062
    hilightFgColor isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2063
        hilightFgColor := bgColor.
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2064
        hilightBgColor := fgColor.
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  2065
    ].
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  2066
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  2067
    hilightFgColorNoFocus isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2068
        hilightFgColorNoFocus := hilightFgColor.
3137
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  2069
    ].
7e8fae56b94c highlight selection dependent on has focus
ca
parents: 3081
diff changeset
  2070
    hilightBgColorNoFocus isNil ifTrue:[
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2071
        hilightBgColorNoFocus := hilightBgColor lightened.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2072
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2073
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2074
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2075
initialize
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2076
    "setup default attributes/behavior
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2077
    "
2418
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2078
    multipleSelectOk     := false.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2079
    useIndex             := true.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2080
    ignoreReselect       := true.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2081
    toggleSelect         := false.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2082
    highlightEnterItem   := false.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2083
    strikeOut            := false.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2084
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2085
    keyActionStyle       := #select.
14a9dbec8434 support of #keyActionStyle #returnKeyActionStyle #strikeOut
ca
parents: 2416
diff changeset
  2086
    returnKeyActionStyle := #doubleClick.
2324
ada66df6ac14 support of highlighting items under mouse
ca
parents: 2323
diff changeset
  2087
ada66df6ac14 support of highlighting items under mouse
ca
parents: 2323
diff changeset
  2088
    super initialize.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2089
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2090
1745
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2091
mapped
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2092
    "get selection from model; scroll to selection
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2093
    "
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2094
    super mapped.
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2095
    self makeSelectionVisible.
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2096
!
4eb3b6b12c99 make selection visible after mapped
ca
parents: 1741
diff changeset
  2097
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2098
realize
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2099
    "get selection from model; scroll to selection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2100
    "
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2275
diff changeset
  2101
    self updateFromModel.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2102
    super realize.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2103
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2104
2493
8b70a26f1694 method category rename
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
  2105
!SelectionInListModelView methodsFor:'private-editor'!
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2106
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2107
computeEditorLayout
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2108
    "update the layout of the editor
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2109
    "
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2110
    |lnNr item y0 x0 y1|
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2111
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2112
    editorView isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2113
	^ self
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2114
    ].
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2115
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2116
    (    (lnNr := self selectedIndex) == 0
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2117
     or:[(item := self at:lnNr ifAbsent:nil) isNil]
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2118
    ) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2119
	"/ there is no more single selection; thus close the editor
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2120
	^ self closeEditor
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2121
    ].
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2122
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2123
    x0 := (self xVisibleOfItem:item) - (textStartLeft // 2).
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2124
    y0 := self yVisibleOfLine:lnNr.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2125
    y1 := self yVisibleOfLine:(lnNr + 1).
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2126
3524
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
  2127
    minimumEditorHeight notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2128
	y1 := y0 + ((y1 - y0) max:minimumEditorHeight).
3524
854b6484c001 minimumEditorHeight
ca
parents: 3482
diff changeset
  2129
    ].
2632
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2130
    "/ Changed by cg:
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2131
    "/ editorView layout:( Rectangle left:x top:y right:(width - 1 - margin) bottom:(h + 2 "- 1") ).
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2132
    editorView layout:( Rectangle left:x0 top:y0-2 right:(width - 1 - margin) bottom:y1 ).
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2133
!
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2134
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2135
openEditorAtX:x y:y
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2136
    "opens an editor on the current single selection
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2137
    "
2225
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2138
    |item lnNr x0 y0 editor|
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2139
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2140
    self closeEditor.
2308
c012b16422f0 replace ifNotNil: by notNil ifTrue:
ca
parents: 2302
diff changeset
  2141
    shown ifFalse:[^ self ].
2596
771e23c6d9cf access actions by call and not by reference
ca
parents: 2572
diff changeset
  2142
    self openEditorAction isNil ifTrue:[^ self].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2143
2225
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2144
    lnNr := self selectedIndex.
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2145
    lnNr == 0 ifTrue:[^ self].
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2146
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2147
    item := self at:lnNr ifAbsent:nil.
2308
c012b16422f0 replace ifNotNil: by notNil ifTrue:
ca
parents: 2302
diff changeset
  2148
    item isNil ifTrue:[^ self].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2149
1915
2f57720597d3 bug fix when opening editor on current selected line
ca
parents: 1909
diff changeset
  2150
    x < (self xVisibleOfItem:item) ifTrue:[
3778
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2151
        "/ not part of the selection frame; ignorre
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2152
        ^ self
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2153
    ].
2225
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2154
    editor := self openEditor.
2308
c012b16422f0 replace ifNotNil: by notNil ifTrue:
ca
parents: 2302
diff changeset
  2155
    editor isNil ifTrue:[^ self].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2156
2225
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2157
    y0 := (y - editor origin y) max:0.
d785c9d86aa3 make selection visible if size changed
penk
parents: 2185
diff changeset
  2158
    x0 := (x - editor origin x) max:0.
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2159
2125
67e0f2c9ad4d event types are private to WindowEvent;
ca
parents: 2070
diff changeset
  2160
    "/ simulate clicking into the editor
2632
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2161
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2162
    "/ Changed by cg:
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2163
    "/ but only if there was no initial selection
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2164
    editor isInputField ifTrue:[
3778
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2165
        editor hasSelection ifFalse:[
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2166
            self sensor
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2167
                pushEvent:(WindowEvent buttonPress:1 x:x0 y:y0 view:editor);
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2168
                pushEvent:(WindowEvent buttonRelease:1 x:x0 y:y0 view:editor).
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2169
        ]
2632
48a2b5f7d091 *** empty log message ***
martin
parents: 2613
diff changeset
  2170
    ].
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2171
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2172
    "/ to clear the selection
2245
546c6e5d0951 change #redrawSelectionAt: to #invalidateSelectionAt: (because is a invalidate)
ca
parents: 2228
diff changeset
  2173
    self invalidateLineAt:lnNr.
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2174
! !
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2175
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2176
!SelectionInListModelView methodsFor:'protocol'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2177
1458
02d7889dfb9a lostSynchronisation
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
  2178
lostSynchronisation
02d7889dfb9a lostSynchronisation
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
  2179
    "called when the changes derived from the model are faster than the handling
02d7889dfb9a lostSynchronisation
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
  2180
    "
1547
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2181
    self deselectWithoutRedraw.
1458
02d7889dfb9a lostSynchronisation
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
  2182
    super lostSynchronisation.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2183
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2184
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2185
!SelectionInListModelView methodsFor:'queries'!
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2186
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2187
isCursorKeyConsumer
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2188
    "return true, if the receiver can be controlled by cursor keys;
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2189
     i.e. it can handle some keyboard input,
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2190
     isCursorKeyConsumer are potential candidates for getting the keyboard
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2191
     focus initially within dialogBoxes, or when the focus-follows-pointer
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2192
     mode is off.
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2193
     Return false here, this is redefined in SelectionInListView."
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2194
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2195
    ^ true
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2196
! !
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2197
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2198
!SelectionInListModelView methodsFor:'scroller interface'!
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2199
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2200
heightOfContents
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2201
    "answer the height of the contents in pixels.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2202
     If the minimumEditorHeight and the openEditorAction is defined,
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2203
     we have to involve the minimumEditorHeight in the computation,
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2204
     to allow opening the editor fullyvisible at the last line."
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2205
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2206
    |cachedLinesY cachedMaxIdx y0 y1|
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2207
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2208
    cachedLinesY := self startOfLinesY.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2209
    cachedMaxIdx := cachedLinesY size.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2210
    cachedMaxIdx == 0 ifTrue:[ ^ 0 ].
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2211
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2212
    y1 := cachedLinesY at:cachedMaxIdx.
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2213
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2214
    (minimumEditorHeight notNil and:[openEditorAction notNil]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2215
	y0 := cachedLinesY at:(cachedMaxIdx - 1) ifAbsent:0.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2216
	y1 := y0 + ((y1 - y0) max:minimumEditorHeight).
3526
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2217
    ].
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2218
    ^ y1
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2219
! !
826547ea5ecc *** empty log message ***
ca
parents: 3525
diff changeset
  2220
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2221
!SelectionInListModelView methodsFor:'selection'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2222
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2223
addToSelection:lineNr
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2224
    "add line to selection without scrolling but raise a change notification
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2225
    "
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2226
    |oldSelect forAdd|
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2227
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2228
    (self isInSelection:lineNr) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2229
	^ self
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2230
    ].
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2231
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2232
    multipleSelectOk ifTrue:[ forAdd := selection notNil ]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2233
		    ifFalse:[ forAdd := false ].
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2234
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2235
    (self canSelectIndex:lineNr forAdd:forAdd) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2236
	^ self
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2237
    ].
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2238
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2239
    self closeEditor.
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2240
    self cursorEntersItem:nil.
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2241
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2242
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2243
	oldSelect := selection.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2244
	selection := lineNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2245
	oldSelect notNil ifTrue:[ self invalidateSelectionAt:oldSelect ].
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2246
    ] ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2247
	selection notNil ifTrue:[ selection := selection copyWith:lineNr ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2248
			ifFalse:[ selection := OrderedCollection with:lineNr ].
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2249
    ].
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2250
    self invalidateSelectionAt:lineNr.
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2251
    self selectionChanged.
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2252
!
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2253
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2254
deselect
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2255
    "clear selection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2256
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2257
    self selection:nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2258
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2259
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2260
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2261
firstInSelection
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2262
    "returns the minimum index of selected indices or nil if nothing is selected
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2263
    "
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2264
    |min|
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2265
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2266
    multipleSelectOk   ifFalse:[ ^ selection ].
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2267
    selection size == 0 ifTrue:[ ^ nil ].
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2268
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2269
    min := selection at:1.
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2270
    selection do:[:aNumber| min := min min:aNumber ].
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2271
    ^ min
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2272
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2273
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2274
hasSelection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2275
    "returns true if a selection exists
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2276
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2277
    ^ selection notNil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2278
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2279
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2280
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2281
isInSelection:aNumber
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2282
    "return true, if line, aNumber is in the selection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2283
    "
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2284
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2285
	^ (aNumber == selection)
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2286
    ].
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2287
    selection notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2288
	^ selection includesIdentical:aNumber
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2289
    ].
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2290
    ^ false
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2291
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2292
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2293
isSelectionVisible
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2294
    "returns true if any selected element is visible"
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2295
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2296
    ^ self isSelectionVisibleIn:(self extent)
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2297
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2298
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2299
isSelectionVisibleIn:anExtentPoint
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2300
    "returns true if any selected element is visible"
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2301
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2302
    self selectionDo:[:aLineNr|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2303
	(self isLineVisible:aLineNr in:anExtentPoint) ifTrue:[^ true].
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2304
    ].
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2305
    ^ false
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2306
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2250
diff changeset
  2307
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2308
lastInSelection
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2309
    "returns the maximum index of selected indices or nil if nothing is selected
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2310
    "
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2311
    |max|
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2312
2409
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2313
    multipleSelectOk   ifFalse:[ ^ selection ].
68095c891ceb reuse selection methods (prepared for common controller)
ca
parents: 2408
diff changeset
  2314
    selection size == 0 ifTrue:[ ^ nil ].
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2315
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2316
    max := 1.
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2317
    selection do:[:aNumber| max := max max:aNumber ].
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2318
    ^ max
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2319
!
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2320
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2321
makeSelectionVisible
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2322
    "scroll to make the selection line visible
3202
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2323
     dont scroll, if any in the selection isVisible
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2324
    "
3202
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2325
    |firstLine|
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2326
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2327
    shown ifFalse:[^ self].
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2328
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2329
    modelChangedDuringButtonPress notNil ifTrue:[^ self].
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2330
3202
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2331
    firstLine := self firstInSelection.
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2332
    (firstLine isNil or:[firstLine == 0]) ifTrue:[^ self].
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2333
11de451bc538 *** empty log message ***
ca
parents: 3146
diff changeset
  2334
    self selectionDo:[:aLnNr|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2335
	(self lineIsFullyVisible:aLnNr) ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2336
    ].
2368
8101aa8d50d2 cursor select behaviour in: #keyPress:x:y:
ca
parents: 2365
diff changeset
  2337
    self makeLineVisible:(self firstInSelection).
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2338
!
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2339
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2340
numberOfSelections
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2341
    "return the number of selected items
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2342
    "
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2343
    selection isNil   ifTrue:[ ^ 0 ].
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2344
    multipleSelectOk ifFalse:[ ^ 1 ].
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2345
  ^ selection size
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2346
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2347
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2348
removeFromSelection:lineNr
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2349
    "remove line from selection without scrolling but raise a change notification
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2350
    "
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2351
    (self isInSelection:lineNr) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2352
	^ self
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2353
    ].
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2354
    self closeEditor.
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2355
    self cursorEntersItem:nil.
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2356
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2357
    (multipleSelectOk and:[self numberOfSelections > 1]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2358
	selection := selection copyWithout:lineNr.
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2359
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2360
	selection := nil
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2361
    ].
2410
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2362
    self invalidateSelectionAt:lineNr.
39ec0844e7d6 discard #toggleSelection:
ca
parents: 2409
diff changeset
  2363
    self selectionChanged.
2401
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2364
!
c0c3b44afb43 mouse handling
ca
parents: 2399
diff changeset
  2365
3607
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2366
selectAll
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2367
    "select all entries.
3607
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2368
     Model and/or actionBlock notification IS done."
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2369
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2370
    self selectFrom:1 to:self size.
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2371
!
bec9e4c71bf4 implemented #selectAll
Claus Gittinger <cg@exept.de>
parents: 3526
diff changeset
  2372
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2373
selectElement:anElement
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2374
    "select the element. Scroll to make the new selection visible.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2375
     Model and/or actionBlock notification IS done.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2376
    "
2178
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2377
    self selectElement:anElement ifAbsent:[self deselect]
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2378
!
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2379
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2380
selectElement:anElement ifAbsent:exceptionalValue
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2381
    |idx|
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2382
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2383
    idx := self identityIndexOf:anElement.
2178
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2384
    idx == 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2385
	^ exceptionalValue value
2178
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2386
    ].
f02ca1516c04 selectElement changed
penk
parents: 2148
diff changeset
  2387
    self selection:idx
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2388
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2389
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2390
selectFrom:aStart to:aStop
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2391
    "select lines between start and stop
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2392
    "
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2393
    |start stop step nsel|
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2394
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2395
    multipleSelectOk ifFalse:[^ self].
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2396
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2397
    start := aStart.
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2398
    stop  := aStop.
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2400
    aStart < aStop ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2401
	start := aStart max:1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2402
	stop  := aStop  min:(self size).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2403
	step  := 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2404
	start > stop ifTrue:[^ self].
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2405
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2406
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2407
	start := aStart min:(self size).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2408
	stop  := aStop  max:1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2409
	step  := -1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2410
	start < stop ifTrue:[^ self].
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2411
    ].
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2412
    nsel := OrderedCollection new.
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2413
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2414
    start to:stop by:step do:[:i|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2415
	(self canSelectIndex:i forAdd:true) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2416
	    nsel add:i.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2417
	].
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2418
    ].
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2419
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2420
    (self selectWithoutScroll:nsel redraw:true) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2421
	self selectionChanged
2399
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2422
    ].
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2423
!
949ec827ab3a button handle shift pressed
ca
parents: 2381
diff changeset
  2424
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2425
selectedElement
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2426
    "return the single selected item or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2427
    "
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2428
    |index|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2429
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2430
    (index := self selectedIndex) ~~ 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2431
	^ self at:index ifAbsent:nil
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2432
    ].
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2433
    ^ nil
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2434
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2435
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2436
selectedIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2437
    "returns the index of the selected line or 0. If more
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2438
     lines are selected, 0 is returned
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2439
    "
2365
bdf6954a0358 key handling: EndOfText EndOfLine BeginOfText BeginOfLine
ca
parents: 2361
diff changeset
  2440
    selection notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2441
	multipleSelectOk ifFalse:[ ^ selection ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2442
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2443
	selection size == 1 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2444
	    ^ selection at:1
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2445
	]
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2446
    ].
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2447
    ^ 0
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2448
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2449
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2450
selection
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2451
    "return the selection index or collection of indices
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2452
     in case of multiple selection enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2453
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2454
    ^ selection
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2455
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2456
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2457
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2458
selection:something
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2459
    "select something or deselect if the argument is nil;
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2460
     scroll to make the selected line visible.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2461
     The model and/or actionBlock IS notified.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2462
    "
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2463
    (self selectWithoutScroll:something redraw:true) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2464
	self makeSelectionVisible.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2465
	self selectionChanged
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2466
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2467
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2468
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2469
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2470
selectionAsCollection
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2471
    "return the selection as a collection of line numbers.
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2472
     This allows users of this class to enumerate independent of
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2473
     the multipleSelect style.
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2474
    "
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2475
    selection isNil  ifTrue:[ ^ #() ].
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2476
    multipleSelectOk ifTrue:[ ^ selection ].
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2477
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2478
  ^ OrderedCollection with:selection
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2479
!
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2480
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2481
selectionDo:aBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2482
    "perform aBlock for each nr in the selection.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2483
     For single selection, it is called once for the items nr.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2484
     For multiple selections, it is called for each.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2485
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2486
    selection notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2487
	multipleSelectOk ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2488
	    selection do:aBlock
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2489
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2490
	    aBlock value:selection
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2491
	].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2492
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2493
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2494
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2495
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2496
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2497
selectionValue
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2498
    "return the selection value i.e. the text in the selected line.
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2499
     For multiple selections a collection containing the entries is returned.
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2500
    "
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2501
    multipleSelectOk ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2502
	selection isNil ifTrue:[^ #()].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2503
	^ selection collect:[:nr| self at:nr ]
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2504
    ].
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2505
    selection isNil ifTrue:[^ nil].
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2506
    ^ self at:selection ifAbsent:nil.
2330
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2507
!
7d83a6a7728b *** empty log message ***
ca
parents: 2324
diff changeset
  2508
2346
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2509
selectionValueAsCollection
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2510
    "return the selection values as a collection - allows selectionValues to
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2511
     be enumerated independent of the multiSelect settings
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2512
    "
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2513
    |value|
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2514
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2515
    value := self selectionValue.
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2516
    multipleSelectOk ifTrue:[^ value].
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2517
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2518
    value notNil ifTrue:[^ Array with:value ].
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2519
  ^ #()
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2520
!
b15af0e8dacc add #selectionValueAsCollection
ca
parents: 2333
diff changeset
  2521
1542
8607d072c319 accessing selection through to selector
Claus Gittinger <cg@exept.de>
parents: 1537
diff changeset
  2522
setSelection:something
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2523
    "select something or deselect if the argument is nil;
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2524
     scroll to make the selected line visible.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2525
     *** No model and/or actionBlock notification is done here.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2526
    "
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2527
    (self selectWithoutScroll:something redraw:true) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2528
	self makeSelectionVisible
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2529
    ]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2530
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2531
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2532
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2533
!SelectionInListModelView methodsFor:'selection private'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2534
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2535
canSelectIndex:anIndex
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2536
    "return true, if the object identified by its index is selectable
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2537
    "
1920
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2538
    ^ self canSelectIndex:anIndex forAdd:false
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2539
!
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2540
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2541
canSelectIndex:anIndex forAdd:isForAdd
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2542
    "return true, if the object identified by its index is selectable
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2543
    "
e3994a83fb16 selectConditionBlock can be a 2-arg block;
martin
parents: 1917
diff changeset
  2544
    |item isOk|
1649
60cf82a7d585 checkin from browser
ps
parents: 1644
diff changeset
  2545
60cf82a7d585 checkin from browser
ps
parents: 1644
diff changeset
  2546
    selectConditionBlock notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2547
	isOk := selectConditionBlock valueWithOptionalArgument:anIndex and:isForAdd.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2548
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2549
	isOk ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2550
	    ^ false
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2551
	]
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2552
    ].
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2553
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2554
    item := self at:anIndex ifAbsent:nil.
1752
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
  2555
    item isNil ifTrue:[^ false].
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2404
diff changeset
  2556
1752
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
  2557
    item isHierarchicalItem ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2558
	^ item isSelectable
1649
60cf82a7d585 checkin from browser
ps
parents: 1644
diff changeset
  2559
    ].
60cf82a7d585 checkin from browser
ps
parents: 1644
diff changeset
  2560
    ^ true
1641
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2561
!
22dc37288c14 add selectConditionBlock
ca
parents: 1599
diff changeset
  2562
1547
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2563
deselectWithoutRedraw
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2564
    "clear the selection without redraw and scrolling;
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2565
     the model and/or actionBlock is notified
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2566
    "
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2567
    (self selectWithoutScroll:nil redraw:false) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2568
	self selectionChanged
1547
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2569
    ]
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2570
!
f72d75aaec14 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1545
diff changeset
  2571
3370
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2572
selectAndUpdateModelWithoutChangeNotification: aLineNo
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2573
    |arg|
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2574
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2575
    self selectWithoutScroll:aLineNo redraw:true.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2576
    modelChangedDuringButtonPress := false.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2577
    model isNil ifTrue:[ ^ self ].
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2578
    arg := self argForChangeMessage.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2579
    self sendChangeMessage:#setValue: with:arg.
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2580
!
5199f62a817d Add posibility to configure the select behaviour (select on button press
ab
parents: 3367
diff changeset
  2581
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2582
selectWithoutScroll:something redraw:doRedraw
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2583
    "change selection to something; returns true if selection changed
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2584
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2585
    |oldSelect|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2586
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  2587
    selection = something ifTrue:[^ false].
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1547
diff changeset
  2588
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2589
    oldSelect := selection.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2590
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2591
    (something isNil or:[something == 0]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2592
	selection := nil
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2593
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2594
	something isNumber ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2595
	    selection := multipleSelectOk ifTrue:[Array with:something]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2596
					 ifFalse:[something]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2597
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2598
	    something size == 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2599
		selection := nil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2600
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2601
		selection := multipleSelectOk ifTrue:[something]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2602
					     ifFalse:[something at:1]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2603
	    ]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2604
	]
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2605
    ].
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2606
    selection = oldSelect ifTrue:[^ false].
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2607
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2608
    modelChangedDuringButtonPress notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2609
	modelChangedDuringButtonPress := true.
3205
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2610
    ].
7ff2e20b37d4 *** empty log message ***
ca
parents: 3202
diff changeset
  2611
1755
cbf87041448d add visible editor
ca
parents: 1752
diff changeset
  2612
    self closeEditor.
2377
6c368b8b0ec3 support cursor movements
ca
parents: 2368
diff changeset
  2613
    self cursorEntersItem:nil.
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2614
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2615
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2616
    (doRedraw and:[shown]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2617
	^ true
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2618
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2619
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2620
    multipleSelectOk ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2621
	oldSelect notNil ifTrue:[self invalidateSelectionAt:oldSelect].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2622
	selection notNil ifTrue:[self invalidateSelectionAt:selection].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2623
    ] ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2624
	(selection notNil and:[oldSelect notNil]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2625
	    selection do:[:i|(oldSelect includesIdentical:i) ifFalse:[self invalidateSelectionAt:i]].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2626
	    oldSelect do:[:i|(selection includesIdentical:i) ifFalse:[self invalidateSelectionAt:i]].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2627
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2628
	    oldSelect isNil ifTrue:[oldSelect := selection].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2629
	    oldSelect do:[:i|self invalidateSelectionAt:i]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3704
diff changeset
  2630
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2631
    ].
1545
65ae8d6b416e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1542
diff changeset
  2632
    ^ true
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2633
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2634
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2635
!SelectionInListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2636
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2637
version
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2638
    ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInListModelView.st,v 1.148 2009-11-05 19:56:37 stefan Exp $'
3778
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2639
!
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2640
ccbe7479c97b changed: #openEditorAtX:y:
Claus Gittinger <cg@exept.de>
parents: 3750
diff changeset
  2641
version_CVS
3851
03296acbf762 changed: #initStyle
Stefan Vogel <sv@exept.de>
parents: 3778
diff changeset
  2642
    ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInListModelView.st,v 1.148 2009-11-05 19:56:37 stefan Exp $'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  2643
! !