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