ListModelView.st
author Claus Gittinger <cg@exept.de>
Fri, 24 Jan 2020 14:42:44 +0100
changeset 6211 c922d4b60f5c
parent 6166 d6c2b44ade4f
child 6218 1e07ecc78305
permissions -rw-r--r--
#UI_ENHANCEMENT by cg class: TerminalView added: #outputEncoding: class: TerminalView class added: #openWithAction:setupTerminalViewWith:onExit: changed: #openWithAction:onExit:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5958
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
     1
"{ Encoding: utf8 }"
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
     2
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     3
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     4
 COPYRIGHT (c) 1999 by eXept Software AG
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
     5
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     6
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     7
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     8
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    10
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    11
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    12
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    13
"
1752
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
    14
"{ Package: 'stx:libwidg2' }"
1c11b6e4ab37 use isHierarchicalItem instead of hack variable
ca
parents: 1748
diff changeset
    15
4703
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
    16
"{ NameSpace: Smalltalk }"
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
    17
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
View subclass:#ListModelView
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    19
	instanceVariableNames:'list listHolder textStartLeft textStartTop viewOrigin enabled
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    20
		fgColor bgColor lineSpacing widthOfContents computeWidthInRange
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    21
		startOfLinesY autoScroll autoScrollBlock scrollWhenUpdating
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    22
		hasConstantHeight constantHeight previousExtent listRenderer
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
    23
		cachedPreferredExtent activeScrollProcess'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	classVariableNames:'DefaultForegroundColor DefaultBackgroundColor DefaultShadowColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
		DefaultLightColor StopRedrawSignal'
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	poolDictionaries:''
1430
ae9e48cc7b9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
    27
	category:'Views-Lists'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    30
Object subclass:#Renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    31
	instanceVariableNames:'view'
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    32
	classVariableNames:''
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    33
	poolDictionaries:''
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    34
	privateIn:ListModelView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    35
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    36
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    37
ListModelView::Renderer subclass:#TableRenderer
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    38
	instanceVariableNames:'xSplitbars hasFixedItemWidth savedCursor dragCursor
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    39
		columnDescriptors separatorOneDColor receiver dragOperation
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    40
		requiredColumnHeight minimumRequiredColumnHeight attributes'
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    41
	classVariableNames:''
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    42
	poolDictionaries:''
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    43
	privateIn:ListModelView
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    44
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    45
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    46
Object subclass:#ColumnDescriptor
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
    47
	instanceVariableNames:'dataSetColumnSpec columnNumber width'
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    48
	classVariableNames:'ClipColumnQuerySignal'
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    49
	poolDictionaries:''
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    50
	privateIn:ListModelView::TableRenderer
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    51
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
    52
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!ListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    55
copyright
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    56
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    57
 COPYRIGHT (c) 1999 by eXept Software AG
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
    58
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    59
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    60
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    61
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    62
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    63
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    64
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    65
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    66
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    67
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
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
documentation
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    72
    This widget is a new improved revision of the good-old ListView.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    73
    In contrast to ListView, this one reacts on changes of the
3386
f453c0cadf44 warning comments
Claus Gittinger <cg@exept.de>
parents: 3230
diff changeset
    74
    underlying list and performs optimized redraws.
f453c0cadf44 warning comments
Claus Gittinger <cg@exept.de>
parents: 3230
diff changeset
    75
    It requires a List (or alike) as list.
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    76
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    This class can only passively display collections of elements.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    The class doesn't keep its own list, it works directly on
3386
f453c0cadf44 warning comments
Claus Gittinger <cg@exept.de>
parents: 3230
diff changeset
    79
    the list ( List or HierarchicalList ).
f453c0cadf44 warning comments
Claus Gittinger <cg@exept.de>
parents: 3230
diff changeset
    80
3390
decfdcdb3f80 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3388
diff changeset
    81
    ATTENTION (warning by cg):
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    82
	in contrast to its inappropriate name, this class COMPLETELY ignores the model
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    83
	instance variable - all is through the list/listHolder.
3390
decfdcdb3f80 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3388
diff changeset
    84
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    Each list item is obligated to provide 3 services:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    86
	- heightOn:aGC
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    87
	- widthOn:aGC
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    88
	- displayOn:aGC x:x y:y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    [Instance variables:]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    91
	list                   <List-Model>     List or HierarchicalList ...
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    92
	listHolder             <Model>          Model, which keeps a List
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    93
	textStartLeft          <Number>         left inset of text
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    94
	viewOrigin             <Point>          the current origin
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    95
	enabled                <Boolean>        widget is enabled/disabeled
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    96
	fgColor                <Color>          color to draw characters
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    97
	bgColor                <Color>          the background
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    98
	lineSpacing            <Number>         pixels between lines
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
    99
	widthOfContents        <Number>         cached width of widest line
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   100
	computeWidthInRange    <Point>          used for recompute width of contents
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   101
	startOfLinesY          <Collection>     keeps all the absolute Y-start positions
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   102
						for each line in the list. The first
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   103
						entry into the list is the top Y inset.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   104
	supportsDisplayInRange <Boolean>        set to true if the list elements
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   105
						supports the service:
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   106
						    #displayOn:x:y:h:
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   107
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   108
	hasConstantHeight      <Boolean>        true, than each line has the same height
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   109
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   110
	constantHeight         <SmallInteger>   hasConstantHeight is turned on, this
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   111
						is the used line height
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   112
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    [author:]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   114
	Claus Atzkern
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    [see also:]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   118
	SelectionInListModelView
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   119
	HierarchicalListView
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   120
	List
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   121
	HierarchicalList
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
examples
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
"
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   127
									[exBegin]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    |top list view up index|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    list := List new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    top  := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    view := ScrollableView for:ListModelView miniScroller:true
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   134
			origin:0.0@0.0 corner:1.0@1.0 in:top.
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   135
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    view list:list.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    top  openAndWait.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    up := true.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    [top shown] whileTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   141
	Delay waitForSeconds:0.2.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   143
	up ifTrue:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   144
	    index := 1 + (list size).
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   145
	    list add:('element: ', index printString).
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   146
	    up := index < 20
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   147
	] ifFalse:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   148
	    list removeIndex:1.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   149
	    up := list isEmpty.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   150
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    ].
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   152
									[exEnd]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
!ListModelView class methodsFor:'initialization'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
initialize
1409
e46f8d30a9c9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   161
    "setup the signals
e46f8d30a9c9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   162
    "
4911
0ee3e61e96d8 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 4901
diff changeset
   163
    StopRedrawSignal isNil ifTrue:[
0ee3e61e96d8 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 4901
diff changeset
   164
        StopRedrawSignal := Notification newSignalMayProceed:true.
0ee3e61e96d8 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 4901
diff changeset
   165
        StopRedrawSignal nameClass:self message:#stopRedrawSignal.
0ee3e61e96d8 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 4901
diff changeset
   166
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!ListModelView class methodsFor:'Signal constants'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
stopRedrawSignal
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    ^ StopRedrawSignal
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
!ListModelView class methodsFor:'defaults'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   177
defaultRenderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   178
    ^ Renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   179
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   180
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    "extract values from the styleSheet and cache them in class variables"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    <resource: #style   (
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   185
                        #'text.backgroundColor'  #'text.foregroundColor'
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   186
                        #'selection.shadowColor' #'selection.lightColor'
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   187
                        #'text.font'
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   188
                        )>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
4513
6f14d468c903 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4509
diff changeset
   190
    DefaultForegroundColor         := StyleSheet colorAt:'text.foregroundColor' default:Color black.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    DefaultBackgroundColor         := StyleSheet colorAt:'text.backgroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    DefaultShadowColor             := StyleSheet colorAt:'selection.shadowColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    DefaultLightColor              := StyleSheet colorAt:'selection.lightColor'.
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   194
    "/ DefaultFont                    := StyleSheet  fontAt:'text.font'.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
     self updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
   200
    "Modified: / 14-08-2010 / 12:23:35 / cg"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
!ListModelView methodsFor:'accessing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    "get the list of items
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    ^ list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
list:aList
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    "set the list of items
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    "
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   216
    |negatedOrg|
1443
c9ef29f36c29 bug fix:
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
   217
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   218
    listRenderer listWillChange.
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
   219
1452
Claus Gittinger <cg@exept.de>
parents: 1451
diff changeset
   220
    list ~~ aList ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   221
        list removeDependent:self.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   222
        list := aList.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   223
        list isNil ifTrue:[list := self newDefaultList ].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   224
        list addDependent:self
1452
Claus Gittinger <cg@exept.de>
parents: 1451
diff changeset
   225
    ].
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
   226
"/    preferredExtent := nil.
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
   227
    cachedPreferredExtent := nil.
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   228
    widthOfContents := nil.
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   229
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   230
    self recomputeHeightOfContents.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   231
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   232
    scrollWhenUpdating == #beginOfText ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   233
        viewOrigin = (0@0) ifFalse:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   234
            self originWillChange.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   235
            negatedOrg := viewOrigin negated.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   236
            viewOrigin := (0@0).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   237
            self originChanged:negatedOrg.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   238
        ].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   239
    ] ifFalse:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   240
        scrollWhenUpdating == #endOfText ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   241
            self scrollTo:(0 @ self heightOfContents - self innerHeight) redraw:false
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   242
        ]
1422
98c0e3978fcf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1417
diff changeset
   243
    ].
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   244
    self invalidate.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   245
    self contentsChanged
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   246
!
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   247
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   248
listRenderer
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   249
    "returns the used listrenderer
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   250
    "
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   251
    ^ listRenderer
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   252
!
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   253
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   254
listRenderer:aRendererOrRendererClass
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   255
    "change the used listRenderer
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   256
    "
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   257
    aRendererOrRendererClass isNil ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   258
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   259
    listRenderer == aRendererOrRendererClass ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   260
    listRenderer notNil ifTrue:[listRenderer release].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   261
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   262
    aRendererOrRendererClass isBehavior ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   263
	listRenderer := aRendererOrRendererClass basicNew initialize.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   264
    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   265
	listRenderer := aRendererOrRendererClass.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   266
    ].
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   267
    listRenderer forView:self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   268
!
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   269
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   270
renderer
4243
963f8476336d class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4217
diff changeset
   271
    <resource: #obsolete>
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   272
    self obsoleteMethodWarning:'naming conflict renderer vs. listRenderer'.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   273
    ^ self listRenderer
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   274
!
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   275
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   276
renderer:aTableRenderer
4243
963f8476336d class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4217
diff changeset
   277
    <resource: #obsolete>
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   278
    self obsoleteMethodWarning:'naming conflict renderer vs. listRenderer'.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   279
    self listRenderer:aTableRenderer
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
   280
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
   281
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
   282
setupTableRenderer
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   283
    "creates a renderer with columns based on a DataSetColumnSpec
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
   284
     answer the new renderer"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
   285
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   286
    self listRenderer:TableRenderer.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   287
    ^ listRenderer
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   290
!ListModelView methodsFor:'accessing-behavior'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   292
autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   293
    "returns true if auto scrolling is enabled
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   294
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   295
    ^ autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   296
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   297
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   298
autoScroll:aBool
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   299
    "returns true if auto scrolling is enabled
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   300
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   301
    autoScroll := aBool ? true.
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   302
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   303
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
   "returns the enabled state
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
   "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
   ^ enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
enabled:aBoolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
   "set the enabled state
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
   "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
   enabled := aBoolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   318
!
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   319
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   320
hasConstantHeight
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   321
    "user configured; true if each line has the same lineHeight.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   322
     Optimizes scroll and redraw operations
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   323
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   324
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   325
    ^ hasConstantHeight
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   326
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   327
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   328
hasConstantHeight:aBool
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   329
    "user configured; true if each line has the same lineHeight.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   330
     Optimizes scrolling and redraw.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   331
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   332
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   333
    aBool == hasConstantHeight ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   334
	^ self
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   335
    ].
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   336
    constantHeight    := nil.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   337
    hasConstantHeight := aBool.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   338
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   339
    self lostSynchronisation.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   340
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   341
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   342
scrollWhenUpdating:aSymbolOrNil
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   343
    "define how to scroll, when I get a new text
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   344
     (via the model or the #contents/#list)
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   345
     Allowed arguments are:
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   346
	#keep / nil     -> no change
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   347
	#endOfText      -> scroll to the end
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   348
	#beginOfText    -> scroll to the top
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   349
     The default is #beginOfText.
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   350
     This may be useful for fields which get new values assigned from
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   351
     the program (i.e. not from the user)
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   352
    "
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   353
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   354
    scrollWhenUpdating := aSymbolOrNil
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   355
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   356
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   359
!ListModelView methodsFor:'accessing-items'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
at:anIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
    "return the list element at an index
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    ^ list at:anIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
at:anIndex ifAbsent:exceptionBlock
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   368
    "return the list element at an index if valid.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   369
     If the index is invalid, return the result of evaluating
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
     the exceptionblock.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   372
    ^ list at:anIndex ifAbsent:exceptionBlock
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   373
!
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   374
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   375
findLast:aOneArgBlock
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   376
    "find the last list entry, for which evaluation of the argument, aOneArgBlock
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   377
     returns true; return its index or 0 if none detected.
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   378
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   379
    ^ list findLast:aOneArgBlock
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
identityIndexOf:anElement
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
    "returns the index of an element or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   385
    ^ list identityIndexOf:anElement
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   386
!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   388
last
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   389
    "returns the last list entry
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   390
    "
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   391
    ^ list last
6020
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   392
!
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   393
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   394
listAt:anIndex
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   395
    "for protocol compatibility with SelectionInListView"
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   396
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   397
    ^ self at:anIndex
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   398
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
   399
    "Created: / 01-03-2019 / 20:11:00 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   402
!ListModelView methodsFor:'accessing-look'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
backgroundColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
    "get the background color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
    ^ bgColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
font:aFont
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
    "set a new font
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    "
4500
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   415
    |oldWidth oldHeight newFont|
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   416
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   417
    (aFont isNil or:[aFont = gc font]) ifFalse:[
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   418
        oldWidth  := gc font width.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   419
        oldHeight := gc font height.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   420
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   421
        super font:aFont.
5206
4308605ea7d6 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 5196
diff changeset
   422
        newFont := gc deviceFont.
4500
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   423
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   424
        newFont width ~~ oldWidth ifTrue:[       "/ force a recomputation
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
   425
"/            preferredExtent := nil.
4500
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   426
            cachedPreferredExtent := nil.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   427
            widthOfContents := nil.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   428
        ].
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   429
        realized ifTrue:[
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   430
            oldHeight ~~ newFont height ifTrue:[
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   431
                self recomputeHeightOfContents.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   432
                self contentsChanged.
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   433
            ].
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   434
            self invalidate
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
   435
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
foregroundColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    "get the foreground color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
    ^ fgColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
foregroundColor:aColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    "set the foreground color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
    (aColor notNil and:[fgColor ~~ aColor]) ifTrue:[
4509
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   450
        self realized ifTrue:[
5000
379e2142dc0f device access
Claus Gittinger <cg@exept.de>
parents: 4911
diff changeset
   451
            fgColor := aColor onDevice:device.
4509
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   452
            self invalidate
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   453
        ] ifFalse:[
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   454
            fgColor := aColor
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   455
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
    ]
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   457
!
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   458
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   459
lineSpacing
5256
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   460
    "get the lineSpacing - that's an additional number of pixels,
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   461
     by which lines are vertically separated.
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   462
    "
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   463
    ^ lineSpacing
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   464
!
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   465
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   466
lineSpacing:aNumber
5256
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   467
    "set the lineSpacing - that's an additional number of pixels,
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   468
     by which lines are vertically separated.
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   469
    "
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   470
    lineSpacing ~= aNumber ifTrue:[
5256
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   471
        lineSpacing := aNumber.
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   472
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   473
        realized ifTrue:[
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   474
            self recomputeHeightOfContents.
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   475
            self invalidate
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   476
        ].
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
   477
        self contentsChanged.
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   478
    ]
2605
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   479
!
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   480
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   481
viewBackground:aColor
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   482
    "set the background color
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   483
    "
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   484
    (aColor notNil and:[bgColor ~~ aColor]) ifTrue:[
4509
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   485
        bgColor := aColor.
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   486
        super viewBackground:bgColor.
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   487
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   488
        self realized ifTrue:[
5000
379e2142dc0f device access
Claus Gittinger <cg@exept.de>
parents: 4911
diff changeset
   489
            bgColor := bgColor onDevice:device.
4509
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   490
            self invalidate
9ff8e40915db class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4500
diff changeset
   491
        ].
2605
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   492
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   495
!ListModelView methodsFor:'accessing-mvc'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
    "returns the listHolder or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
    ^ listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
listHolder:aListHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
    "set a new listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    listHolder removeDependent:self.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
    (listHolder := aListHolder) notNil ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   509
	listHolder addDependent:self.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
    self list:(listHolder value).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
!ListModelView methodsFor:'change & update'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
lineChangedAt:aLnNr with:arg
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   517
    "line changed at position; check whether line height changed"
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   518
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   519
    |cache
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
     oldHeight "{ Class:SmallInteger }"
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   521
     deltaHeight "{ Class:SmallInteger }" |
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   522
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   523
    (arg == #icon or:[arg == #hierarchy]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   524
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
    ].
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   526
    hasConstantHeight ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   527
	self invalidateLineAt:aLnNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   528
	^ self
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   529
    ].
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   530
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    oldHeight := (self yVisibleOfLine:(aLnNr + 1)) - (self yVisibleOfLine:aLnNr).
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   532
    deltaHeight := (self heightOfLineAt:aLnNr) - oldHeight.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   534
    deltaHeight == 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   535
	self invalidateLineAt:aLnNr.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   536
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
    ].
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   538
    cache := self startOfLinesY.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   540
    aLnNr + 1 to:cache size do:[:i|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   541
	cache at:i put:((cache at:i) + deltaHeight)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   542
    ].
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
   543
    self contentsChanged.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
    self invalidate.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
listChangedInsert:start nItems:nLines
3894
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   548
    "list changed; items are added"
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   549
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   550
    |newLines
5905
fe6095c0c817 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5899
diff changeset
   551
     run newSz  
fe6095c0c817 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5899
diff changeset
   552
     cpyHg absY0 absY1  
fe6095c0c817 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5899
diff changeset
   553
     visY0 visY1 orgY dltY maxHg|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
    nLines == 0 ifTrue:[^ self ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
    self listSizeChanged:start nLines:nLines.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   558
    newSz := startOfLinesY size + nLines.
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   559
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   560
    (newSz - 1) ~~ self size ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   561
        "/
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   562
        "/ no longer synchronized
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   563
        "/
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   564
        self lostSynchronisation.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   565
        ^ self
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   566
    ].
3712
1c9ef2f85066 optimize
ca
parents: 3576
diff changeset
   567
    newLines := startOfLinesY. "/ copy.
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   568
    newLines addAll:(Array new:nLines) beforeIndex:start + 1.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   569
    absY0 := newLines at:start.
5906
98eab541bd52 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5905
diff changeset
   570
    absY0 isNil ifTrue:[
98eab541bd52 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5905
diff changeset
   571
        self lostSynchronisation.
98eab541bd52 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5905
diff changeset
   572
        ^ self
98eab541bd52 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5905
diff changeset
   573
    ].    
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
    absY1 := absY0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
    run   := start.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
    nLines timesRepeat:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   578
        absY1 := absY1 + (self heightOfLineAt:run).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   579
        run   := run + 1.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   580
        newLines at:run put:absY1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
    dltY := absY1 - absY0.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   583
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   584
    run + 1 to:newSz do:[:i||v|
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   585
        newLines at:i put:((newLines at:i) + dltY)
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
    ].
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   587
    startOfLinesY := newLines.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
    orgY  := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
    absY1 := absY0 + dltY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
    visY0 := absY0 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
    visY1 := absY1 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
    maxHg := height - margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
    absY0 < orgY ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   596
        self originWillChange.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   597
        viewOrigin y:(dltY + orgY).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   598
        self originChanged:(0 @ dltY).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
    ].
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   600
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
    (visY0 >= maxHg or:[visY1 <= margin]) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   602
        self contentsChanged.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   603
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
    visY0 := visY0 max:margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
    visY1 := visY1 min:maxHg.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   608
    self hasDamage ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   609
        self invalidate:(Rectangle left:0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   610
                                    top:visY0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   611
                                  width:width
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   612
                                 height:height - visY0).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   613
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   614
        self contentsChanged.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   615
        ^ self
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   616
    ].
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   617
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   618
    (start == self size or:[(cpyHg := maxHg - visY1) < 20]) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   619
        visY1 := maxHg
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
    ] ifFalse:[
3894
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   621
        shown ifTrue:[
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   622
            self catchExpose.
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   623
            self copyFrom:self x:0 y:visY0
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   624
                             toX:0 y:visY1
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   625
                           width:width height:cpyHg async:true.
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   626
            self waitForExpose.
6c2e84f93db1 changed: #listChangedInsert:nItems:
Stefan Vogel <sv@exept.de>
parents: 3892
diff changeset
   627
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   630
    self invalidateX:margin
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   631
                   y:visY0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   632
               width:width - margin - margin
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   633
              height:(visY1 - visY0).
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   634
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
    self contentsChanged.
5905
fe6095c0c817 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5899
diff changeset
   636
5906
98eab541bd52 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5905
diff changeset
   637
    "Modified: / 14-09-2018 / 22:23:43 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   640
listChangedRemove:aStart toIndex:aStop
5196
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   641
    "list changed; items are removed"
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   642
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   643
    |doRedraw newLines
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
     size  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
     absY0 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
     absY1 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
     visY0 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
     visY1 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
     orgY  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
     orgX  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
     dltY  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
     cpyHg "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
     maxHg "{ Class: SmallInteger }"
1444
0b7cd00e2537 check range before delete lines
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   654
     stop  "{ Class: SmallInteger }"
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   655
     start "{ Class: SmallInteger }"
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   656
     newSz "{ Class: SmallInteger }"
5919
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   657
     y|
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   658
     
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   659
    stop  := aStop.
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   660
    start := aStart.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   662
    (size := stop - start + 1) == 0 ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   663
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
    ].
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   665
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
    self listSizeChanged:start nLines:(size negated).
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   667
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   668
    newSz := startOfLinesY size - size.
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   669
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   670
    (newSz - 1) ~~ self size ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   671
        "/
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   672
        "/ no longer synchrounous
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   673
        "/
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   674
        ^ self lostSynchronisation
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   675
    ].
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   676
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
    absY0 := self yAbsoluteOfLine:start.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   678
    absY1 := self yAbsoluteOfLine:stop + 1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
    dltY  := absY1 - absY0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
3712
1c9ef2f85066 optimize
ca
parents: 3576
diff changeset
   681
    newLines := startOfLinesY. "/ copy.
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   682
    newLines removeFromIndex:(start + 1) toIndex:(stop + 1).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
5919
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   684
    [:exit |
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   685
        (start + 1) to:newSz do:[:i|
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   686
            y := newLines at:i.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   687
            "/ should not be nil, but it is!!
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   688
            y isNil ifTrue:[
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   689
                self recomputeHeightOfContents.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   690
                exit value.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   691
            ].    
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   692
            absY0 := y.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   693
            newLines at:i put:(absY0 - dltY).
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   694
        ].
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   695
        startOfLinesY := newLines.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   696
    ] valueWithExit.
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   697
    
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
    orgY  := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
    orgX  := viewOrigin x.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
    absY0 := self yAbsoluteOfLine:start.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
    absY1 := absY0 + dltY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
    visY0 := absY0 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
    visY1 := absY1 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
    maxHg := height - margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   707
    (self size == 0 or:[(orgY ~~ 0 and:[self maxViewOriginY == 0])]) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   708
        (orgX ~~ 0 or:[orgY ~~ 0]) ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   709
            self originWillChange.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   710
            viewOrigin := 0@0.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   711
            self originChanged:((orgX @ orgY) negated).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   712
        ].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   713
        self invalidate.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   714
        ^ self contentsChanged
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
    visY0 < margin ifTrue:[
5196
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   718
        doRedraw := visY1 > margin.
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   719
        doRedraw ifTrue:[dltY := visY0] ifFalse:[dltY := dltY negated].
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   720
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   721
        self originWillChange.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   722
        viewOrigin := viewOrigin x @ (dltY + orgY).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   723
        self originChanged:(0 @ dltY).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
    ] ifFalse:[
5196
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   725
        doRedraw := visY0 < maxHg
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
    ].
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   727
    visY0 := visY0 max:margin.
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   728
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   729
    self hasDamage ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   730
        self invalidate:(Rectangle left:0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   731
                                    top:visY0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   732
                                  width:width
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   733
                                 height:height - visY0).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   734
5196
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   735
        doRedraw := false.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   736
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
5196
48128e223c59 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5192
diff changeset
   738
    (shown and:[doRedraw]) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   739
        cpyHg := maxHg - visY1.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   740
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   741
        cpyHg > 20 ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   742
            self catchExpose.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   743
            self copyFrom:self x:0 y:visY1 toX:0 y:visY0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   744
                    width:width height:cpyHg async:true.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   745
            self waitForExpose.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   746
            visY0 := visY0 + cpyHg.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   747
        ].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   748
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   749
        self invalidateX:margin
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   750
                       y:visY0
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   751
                   width:width - margin - margin
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
   752
                  height:(maxHg - visY0).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
    self contentsChanged.
5919
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   755
25799af0939c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5906
diff changeset
   756
    "Modified: / 06-10-2018 / 12:36:32 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   759
update:what with:aPara from:chgObj
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   760
    "catch and handle any notification raised from the list model
2745
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   761
     or list holder"
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   762
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   763
    chgObj == self listHolder ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   764
	self list:chgObj value.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   765
	^ self.
2745
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   766
    ].
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   767
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   768
    chgObj == self list ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   769
	listRenderer withinUpdateFromListDo:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   770
	    self updateFromList:what with:aPara.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   771
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   772
	^ self.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   773
    ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   774
2745
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   775
    super update:what with:aPara from:chgObj
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   776
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   777
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   778
updateFromList:what with:aParameter
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   779
    "called if the list changed"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   780
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   781
    |arg1 arg2|
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   782
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   783
    aParameter isCollection ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   784
	what == #at:     ifTrue:[self lineChangedAt:aParameter        with:nil.   ^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   785
	what == #insert: ifTrue:[self listChangedInsert:aParameter  nItems:1.     ^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   786
	what == #remove: ifTrue:[self listChangedRemove:aParameter toIndex:aParameter. ^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   787
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   788
	self list:(self list).  "/ reload list
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   789
	^ self.
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   790
    ].
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   791
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   792
    arg1 := aParameter at:1.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   793
    arg2 := aParameter at:2.
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   794
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   795
    (arg1 == 1 and:[arg2 == self size]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   796
	self list:(self list).  "/ reload list
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   797
	^ self
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   798
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   800
    what == #at:               ifTrue:[self lineChangedAt:arg1        with:arg2. ^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   801
    what == #insertCollection: ifTrue:[self listChangedInsert:arg1  nItems:arg2. ^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   802
    what == #removeFrom:       ifTrue:[self listChangedRemove:arg1 toIndex:arg2. ^ self].
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   803
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   804
    what == #replace: ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   805
	arg1 to:arg2 do:[:i|self lineChangedAt:i with:nil].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   806
	^ self
1995
ede7d0221fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1945
diff changeset
   807
    ].
2981
cc53c4b39c74 leftover halt.
Claus Gittinger <cg@exept.de>
parents: 2951
diff changeset
   808
    self halt:'oops - general change'.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   809
    self list:(self list).  "/ reload list
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   810
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   811
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   812
!ListModelView methodsFor:'drawing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   814
drawElementsFrom:start to:stop x:x y:y w:w
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   815
    "draw lines from start to stop.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   816
     clipping and clearing the background is already done
1399
da1eed642569 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1391
diff changeset
   817
    "
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   818
    |item
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   819
     y0 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   820
     y1 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   821
     x0 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   822
    |
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   823
    self paint:fgColor on:bgColor.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   824
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   825
    x0 := textStartLeft - viewOrigin x.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   826
    y1 := y.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   827
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   828
    start to:stop do:[:i|
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   829
	item := self at:i ifAbsent:self.        "/ list changed during draw
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   830
	item == self ifTrue:[^ self].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   831
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   832
	y0 := y1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   833
	y1 := self yVisibleOfLine:(i + 1).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   834
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   835
	item notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   836
	    listRenderer display:item atX:x0 y:y0 lineHeight:(y1 - y0).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   837
	]
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   838
    ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   839
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   840
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   841
drawFrom:start to:stop x:xLft y:yTop w:aWidth 
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   842
    "draw lines from start to stop. Test whether a new clip
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   843
     must be setup."
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   844
    
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   845
    |maxX w|
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   846
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   847
    maxX := listRenderer maxItemWidthOrNil.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   848
    w := aWidth.
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   849
    maxX notNil ifTrue:[
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   850
        |clip|
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   851
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   852
        maxX := maxX - viewOrigin x.
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   853
        maxX > xLft ifFalse:[
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   854
            ^ self.
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   855
        ].
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   856
        w := maxX - xLft min:aWidth.
4478
7d68fb3be177 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4337
diff changeset
   857
        clip := self clippingBoundsOrNil.
7d68fb3be177 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4337
diff changeset
   858
        clip notNil ifTrue:[
7d68fb3be177 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4337
diff changeset
   859
            clip := clip copy.
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   860
            clip width:w
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   861
        ] ifFalse:[
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   862
            clip := Rectangle 
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   863
                        left:xLft
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   864
                        top:yTop
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   865
                        width:w
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   866
                        height:(height - yTop - margin).
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   867
        ].
4478
7d68fb3be177 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4337
diff changeset
   868
        self clippingBounds:clip.
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   869
    ].
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   870
    self 
5855
0a054286d062 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5758
diff changeset
   871
        drawElementsFrom:start to:stop
0a054286d062 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5758
diff changeset
   872
        x:xLft y:yTop
4319
83b76f13ddc3 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4243
diff changeset
   873
        w:w.
5855
0a054286d062 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5758
diff changeset
   874
0a054286d062 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5758
diff changeset
   875
    "Modified (format): / 29-07-2018 / 19:12:42 / Claus Gittinger"
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   876
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   877
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   878
drawSelectionFrameFrom:start to:stop x:x y:y w:w
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   879
    "What to do here?"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   880
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   881
    "Created: / 24-04-2013 / 14:07:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   882
!
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   883
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   884
invalidateLineAt:aLineNr
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   885
    "add a damage to redraw a line specified by its line number to the
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   886
     input event queue.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   887
    "
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   888
    ^ self invalidateLineAt:aLineNr fromX:0.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   889
!
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   890
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   891
invalidateLineAt:aLineNr fromX:x
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   892
    "add a damage to redraw a line specified by its line number to the
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   893
     input event queue.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   894
    "
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   895
    |y0 "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   896
     y1 "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   897
     yB "{ Class:SmallInteger }"
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   898
     x0 "{ Class:SmallInteger }"
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   899
     xR "{ Class:SmallInteger }"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   900
    |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   901
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   902
    (shown and:[aLineNr notNil and:[aLineNr > 0]]) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   903
	^ self
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   904
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   905
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   906
    xR := width - margin.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   907
    x0 := x max:margin.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   908
    x0 < xR ifFalse:[ ^ self].
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   909
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   910
    yB := height - margin.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   911
    y0 := (self yVisibleOfLine:aLineNr) max:margin.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   912
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   913
    y0 < yB ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   914
	y1 := (self yVisibleOfLine:(aLineNr + 1)) min:yB.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   915
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   916
	y1 > y0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   917
	    self invalidateX:x0 y:y0 width:(xR - x0) height:(y1 - y0) repairNow:false.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
   918
	]
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   919
    ].
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   920
!
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   921
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   922
redraw
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   923
    "redraw complete view
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   924
    "
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   925
    self redrawX:0 y:0 width:width height:height.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   926
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   927
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   928
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   929
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   930
redrawX:x y:y width:w height:h
5863
ddfab05b5b51 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 5855
diff changeset
   931
    "redraw part of myself immediately, given logical coordinates"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   932
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   933
    shown ifFalse:[^ self].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   934
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   935
    "/ the list may not change during the redraw
5758
bff79a5aad10 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5756
diff changeset
   936
    list synchronized:[
5863
ddfab05b5b51 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 5855
diff changeset
   937
        |numLines start stop yAbs yStart|
ddfab05b5b51 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 5855
diff changeset
   938
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   939
        numLines := list size.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
   940
        (startOfLinesY size) == (numLines + 1) ifFalse:[
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   941
            "oops, recompute the height of the contents (the first time after creation).
3974
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
   942
            "
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   943
            self recomputeHeightOfContents.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   944
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   945
            self startOfLinesY size > 1 ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   946
                "oops, the contents height changed
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   947
                "
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   948
                self invalidate.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   949
                self contentsChanged.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   950
                ^ self
3974
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
   951
            ].
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
   952
        ].
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   953
        "/    widthOfContents isNil ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   954
        "/        self preferredExtent
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   955
        "/    ].
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   956
        yStart := y.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   957
        start  := self yVisibleToLineNr:y.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   958
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   959
        start notNil ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   960
            yAbs := y + h.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   961
            stop := self yVisibleToLineNr:yAbs.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   962
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   963
            stop isNil ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   964
                stop := numLines.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   965
            ] ifFalse:[ |y0|
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   966
                stop := stop min:numLines.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
   967
                y0 := startOfLinesY at:stop ifAbsent:nil.
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   968
                y0 isNil ifTrue:[^ self].   "/ oops, lines differ (will be changed)
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   969
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   970
                yAbs == y0 ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   971
                    stop := (stop - 1) max:start
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   972
                ].
3974
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
   973
            ].
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   974
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   975
            start > stop ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   976
                start := stop := nil.
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   977
            ] ifFalse:[
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   978
                (listRenderer validateDrawableItemsFrom:start to:stop) ifFalse:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   979
                    self invalidate.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   980
                    ^ self.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   981
                ].
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   982
                yStart := self yVisibleOfLine:start.
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
   983
            ].
3974
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
   984
        ].
5756
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   985
        gc paint:bgColor.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   986
        gc fillRectangleX:x y:y width:w height:h.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   987
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   988
        StopRedrawSignal handle:[:ex|
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   989
            "/ an item changed its dimension during drawing, draw is aborted
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   990
            self invalidate
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   991
        ] do:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   992
            start notNil ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   993
                listRenderer showItemInAdditionToColumns ifTrue:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   994
                    self drawFrom:start to:stop x:x y:yStart w:w.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   995
                ] ifFalse:[
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   996
                    self drawSelectionFrameFrom:start to:stop x:x y:yStart w:w.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   997
                ].
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   998
            ].
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
   999
            listRenderer postRedrawX:x y:yStart w:w from:start to:stop.
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1000
        ].
0ab37900fabd #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1001
    ]
3974
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
  1002
e6b644647b6c comment/format in: #redrawX:y:width:height:
Claus Gittinger <cg@exept.de>
parents: 3926
diff changeset
  1003
    "Modified: / 24-11-2010 / 19:03:56 / cg"
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1004
    "Modified: / 24-04-2013 / 14:07:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5863
ddfab05b5b51 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 5855
diff changeset
  1005
    "Modified (comment): / 30-07-2018 / 15:47:42 / Stefan Vogel"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1006
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1007
3715
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1008
!ListModelView methodsFor:'enumerating'!
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1009
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1010
visibleLinesAndItemsDo:aTwoArgBlock
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1011
    "enumerate over each visible item"
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1012
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1013
    |lineNr item|
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1014
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1015
    shown ifFalse:[^ self].
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1016
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1017
    lineNr := self yVisibleToLineNr:1.
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1018
    lineNr isNil ifTrue:[ ^ self ].
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1019
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1020
    [   item := list at:lineNr ifAbsent:[ ^ self ].
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1021
	aTwoArgBlock value:lineNr value:item.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1022
	lineNr := lineNr + 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1023
	(self yVisibleOfLine:lineNr) < height
3715
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1024
    ] whileTrue.
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1025
! !
22a0f066793d visibleLinesAndItemsDo:
ca
parents: 3712
diff changeset
  1026
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1027
!ListModelView methodsFor:'event handling'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1028
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1029
keyPress:aKey x:x y:y
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1030
    "a key was pressed - handle page-keys here"
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1031
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1032
    <resource: #keyboard( #PreviousPage #NextPage  #HalfPageUp #HalfPageDown
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1033
			  #BeginOfText  #EndOfText #ScrollUp   #ScrollDown
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1034
			)>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1035
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1036
    |n|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1037
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1038
    self size ~~ 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1039
	(aKey == #PreviousPage) ifTrue:[^ self pageUp].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1040
	(aKey == #NextPage)     ifTrue:[^ self pageDown].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1041
	(aKey == #HalfPageUp)   ifTrue:[^ self halfPageUp].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1042
	(aKey == #HalfPageDown) ifTrue:[^ self halfPageDown].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1043
	(aKey == #BeginOfText)  ifTrue:[^ self scrollToTop].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1044
	(aKey == #EndOfText)    ifTrue:[^ self scrollToBottom].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1045
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1046
	(aKey == #ScrollUp or:[aKey == #ScrollDown]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1047
	    n := 1 + (self sensor compressKeyPressEventsWithKey:aKey).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1048
	    n := n * self verticalScrollStep.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1049
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1050
	    aKey == #ScrollUp ifTrue:[self scrollUp:n]
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1051
			     ifFalse:[self scrollDown:n].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1052
	    ^ self
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1053
	].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1054
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1055
    super keyPress:aKey x:x y:y
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1056
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1057
5668
76978cd4220f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5521
diff changeset
  1058
keyboardZoom:largerBoolean
5280
525cc70a8d6a #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
  1059
    "CTRL+/- zoom action"
525cc70a8d6a #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
  1060
5668
76978cd4220f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5521
diff changeset
  1061
    self fontLargerOrSmaller:largerBoolean
5280
525cc70a8d6a #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
  1062
!
525cc70a8d6a #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 5256
diff changeset
  1063
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1064
sizeChanged:how
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1065
    previousExtent := self extent.
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1066
    listRenderer sizeChanged:how.
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1067
    super sizeChanged:how.
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1068
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1069
    "Modified: / 17-04-2013 / 11:41:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1070
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1071
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1072
!ListModelView methodsFor:'event simulation'!
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1073
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1074
syncronizeEvents
2708
f3efc17bcbce Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 2670
diff changeset
  1075
    <resource:#obsolete>
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1076
    self obsoleteMethodWarning:'no longer supported'.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1077
    ^ false
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1078
!
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1079
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1080
syncronizeEvents:aBoolean
2708
f3efc17bcbce Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 2670
diff changeset
  1081
    <resource:#obsolete>
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1082
    self obsoleteMethodWarning:'no longer supported'.
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1083
! !
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
  1084
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1085
!ListModelView methodsFor:'fetch resources'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1086
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1087
colorOnDevice:aColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1088
    "fetch a device colors
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1089
    "
5000
379e2142dc0f device access
Claus Gittinger <cg@exept.de>
parents: 4911
diff changeset
  1090
    ^ aColor notNil ifTrue:[aColor onDevice:device] ifFalse:[nil]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1091
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1092
2488
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
  1093
imageOnMyDevice:anImage
4609
6b04d0372a95 Sending of Image>>#clearMaskedPixels moved to Image >> #asFormOnDevice:
Stefan Vogel <sv@exept.de>
parents: 4578
diff changeset
  1094
    "associate image to device and returns the new image."
6b04d0372a95 Sending of Image>>#clearMaskedPixels moved to Image >> #asFormOnDevice:
Stefan Vogel <sv@exept.de>
parents: 4578
diff changeset
  1095
6b04d0372a95 Sending of Image>>#clearMaskedPixels moved to Image >> #asFormOnDevice:
Stefan Vogel <sv@exept.de>
parents: 4578
diff changeset
  1096
    anImage isNil ifTrue:[^ nil].
5000
379e2142dc0f device access
Claus Gittinger <cg@exept.de>
parents: 4911
diff changeset
  1097
    ^ anImage onDevice:device.
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
1417
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1100
!ListModelView methodsFor:'focus handling'!
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1101
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1102
wantsFocusWithButtonPress
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1103
    "catch the keyboard focus on button click
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1104
    "
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1105
    ^  true
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1106
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1107
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1108
!
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1109
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1110
wantsFocusWithPointerEnter
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1111
    "views which like to take the keyboard focus
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1112
     when the pointer enters can do so by redefining this
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1113
     to return true"
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1114
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1115
    ^ true
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1116
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1117
! !
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1118
2501
832cbac295b8 method category rename
Claus Gittinger <cg@exept.de>
parents: 2488
diff changeset
  1119
!ListModelView methodsFor:'initialization & release'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1120
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1121
create
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1122
    "fetch device dependent resources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1123
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1124
    super create.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1125
    self fetchResources.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1126
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1127
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1128
initStyle
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1129
    "setup viewStyle specifics
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1130
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1131
    super initStyle.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1132
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1133
    DefaultBackgroundColor notNil ifTrue:[
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1134
        viewBackground := DefaultBackgroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1135
    ].
4569
cc9783bc24f6 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4513
diff changeset
  1136
    lineSpacing   := 2.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1137
    textStartLeft := 2.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1138
    textStartTop  := 2.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1139
    fgColor       := DefaultForegroundColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1140
    bgColor       := viewBackground.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1141
    startOfLinesY := OrderedCollection new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1142
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1143
    self font:SelectionInListView defaultFont. 
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1144
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1145
    startOfLinesY add:(textStartTop + margin). "/ top inset of first line
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1146
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1147
    DefaultShadowColor notNil ifTrue:[
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1148
        shadowColor := DefaultShadowColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1149
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1150
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1151
    DefaultLightColor notNil ifTrue:[
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1152
        lightColor := DefaultLightColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1153
    ].
3926
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1154
465e943676ed changed:
Claus Gittinger <cg@exept.de>
parents: 3909
diff changeset
  1155
    "Modified: / 14-08-2010 / 12:24:02 / cg"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1156
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1157
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1158
initialize
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1159
    "setup default attributes
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1160
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1161
    super initialize.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1162
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1163
    viewOrigin         := 0@0.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1164
    bitGravity         := #NorthWest.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1165
    enabled            := true.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1166
    autoScroll         := true.
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
  1167
    scrollWhenUpdating := #beginOfText.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1168
    hasConstantHeight  := false.
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1169
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1170
    listRenderer isNil ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1171
        listRenderer := self class defaultRenderer forView:self.
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1172
    ].
2600
69bc62444098 create default list during initialize
ca
parents: 2599
diff changeset
  1173
    self list:(self newDefaultList).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1174
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1175
1562
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1176
mapped
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1177
    "recompute list
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1178
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1179
    "/ shown ifFalse:[
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1180
"/        self recomputeHeightOfContents.
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1181
"/        self contentsChanged.     "/ is computeEditorLayout what you want ?
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1182
    "/ ].
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1183
    listRenderer mapped.
1562
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1184
    super mapped
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1185
1562
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1186
!
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1187
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1188
recreate
1832
f6e6640e99a3 comment
Claus Gittinger <cg@exept.de>
parents: 1828
diff changeset
  1189
    "sent after a snapin or a migration, reinit for new device"
1828
ea1f39c639f8 comment
Claus Gittinger <cg@exept.de>
parents: 1827
diff changeset
  1190
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1191
    super recreate.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1192
    self fetchResources.
1796
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1193
!
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1194
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1195
reinitialize
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1196
    "reinit after snapIn (font geometry might be different)
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1197
    "
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1198
    super reinitialize.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1199
    self recomputeHeightOfContents.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1200
    self contentsChanged.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1201
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1202
!
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1203
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1204
release
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1205
    "remove dependencies
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1206
    "
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1207
    listRenderer release.
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1208
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1209
    self listHolder removeDependent:self.
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1210
    self list       removeDependent:self.
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1211
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1212
    super release
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1213
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1214
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1215
!ListModelView methodsFor:'private'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1216
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1217
hasDamage
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1218
    "return true, if any damage events (i.e. expose or resize) are pending"
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1219
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1220
    ^ self sensor hasDamageFor:self
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1221
!
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1222
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1223
startOfLinesY
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1224
    "returns a collection of absolute Y-positions per line.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1225
     The first entry is the top Y inset.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1226
     The size of the list is one more than the lists size,
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1227
     providing the Y-position of the line below the contents as its last entry."
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1228
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1229
    ^ startOfLinesY
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1230
!
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1231
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1232
xAbsoluteOfItem:anItem
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1233
    "returns the absolute x of the labeled text
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1234
    "
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1235
    ^ (self xVisibleOfItem:anItem) + viewOrigin x.
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1236
!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1237
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1238
xVisibleOfItem:anItem
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1239
    "returns the visible x of the labeled text
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1240
    "
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1241
    ^ textStartLeft - viewOrigin x
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1242
!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1243
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1244
yAbsoluteOfLine:aLineNr
6166
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1245
    "given a lineNr, return its y-coordinate
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1246
     this returns the coordinate in absolute coordinates.
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1247
     (i.e. subtract the scrollOffset in viewOrigin to get the position within the window,
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1248
      and subtract the scrollOffset and add the view's screenorigin, to get the position on the screen)"
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1249
4578
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1250
    |y y2 y1 cache|
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1251
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1252
    cache := startOfLinesY.
4578
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1253
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1254
    (y := cache at:aLineNr ifAbsent:nil) notNil ifTrue:[
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1255
        ^ y
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
  1256
    ].
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1257
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1258
    "/ recompute a y position
4578
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1259
    y1 := cache at:1 ifAbsent:textStartTop.
95390b904254 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4573
diff changeset
  1260
    y2 := cache at:2 ifAbsent:(textStartTop + 16).
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1261
    ^ aLineNr * (y2 - y1) + y1
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1262
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1263
    "Modified (comment): / 20-07-2019 / 07:42:00 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1264
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1265
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1266
yAbsoluteToLineNr:yAbsolute
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1267
    "returns the line number for a given physical y coordinate
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1268
     or nil if beyond of list.
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1269
    "
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1270
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1271
    |cache yCache
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1272
     yAbs       "{ Class: SmallInteger}"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1273
     size       "{ Class: SmallInteger}"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1274
     ictr       "{ Class: SmallInteger}"
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1275
     yRun       
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1276
    |
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1277
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1278
    yAbs := yAbsolute.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1279
    cache := startOfLinesY.
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1280
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1281
    (size := cache size) < 2 ifTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1282
        "/ empty list
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1283
        (yAbs between:textStartTop and:textStartTop+16) ifTrue:[^ 1].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1284
        ^ nil
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1285
    ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1286
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1287
    yCache := cache at:size ifAbsent:nil.
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1288
    yCache isNil ifTrue:[ ^ nil ].    "/ out of list
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1289
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1290
    yRun := yCache.
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1291
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1292
    yAbs >= yRun ifTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1293
        yAbs == yRun ifTrue:[ ^ size - 1].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1294
        ^ nil   "/ out of list
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1295
    ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1296
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1297
    constantHeight notNil ifTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1298
        yAbs := yAbs - (cache at:1).
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1299
        yAbs < constantHeight ifTrue:[ ^ 1 ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1300
        ^ yAbs // constantHeight + 1
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1301
    ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1302
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1303
    ictr := yAbs // (cache at:2).
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1304
    ictr < 1 ifTrue:[ ictr := 1 ]
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1305
            ifFalse:[ ictr := ictr min:size ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1306
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1307
    yRun := cache at:ictr.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1308
    yRun isNil ifTrue:[^ nil].
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1309
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1310
    yRun > yAbs ifTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1311
        [(ictr := ictr - 1) > 0 ] whileTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1312
            yRun := cache at:ictr.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1313
            yRun isNil ifTrue:[
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1314
                self recomputeHeightOfContents.
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1315
                yRun := cache at:ictr.
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1316
                yRun isNil ifTrue:[
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1317
                    ^ nil   "/ out of list ???
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1318
                ].
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1319
            ].
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1320
            yRun <= yAbs ifTrue:[ ^ ictr ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1321
        ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1322
        ^ 1
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1323
    ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1324
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1325
    [ yRun ~~ yAbs ] whileTrue:[
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1326
        ictr := ictr + 1.
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1327
        yRun := cache at:ictr.
5899
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1328
        yRun isNil ifTrue:[
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1329
            self recomputeHeightOfContents.
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1330
            yRun := cache at:ictr.
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1331
            yRun isNil ifTrue:[
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1332
                ^ nil   "/ out of list ???
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1333
            ].
5797253dccd9 #BUGFIX by ab
ab
parents: 5863
diff changeset
  1334
        ].
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1335
        yRun > yAbs ifTrue:[ ^ ictr - 1 ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1336
    ].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1337
    ^ ictr
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1338
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1339
    "Created: / 18-04-2013 / 10:03:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1340
!
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1341
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1342
yAbsoluteToRowNr:yVisible
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1343
    "for protocol compatibility with DSVColumnView"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1344
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1345
    ^ self yAbsoluteToLineNr:yVisible
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1346
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1347
    "Created: / 18-04-2013 / 10:05:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1348
!
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1349
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1350
yVisibleOfLine:aLineNr
6166
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1351
    "given a lineNr, return the y-coordinate within the view"
d6c2b44ade4f #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6146
diff changeset
  1352
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1353
    ^ (self yAbsoluteOfLine:aLineNr) - viewOrigin y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1354
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1355
    "Modified (comment): / 20-07-2019 / 07:42:19 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1356
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1357
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1358
yVisibleToLineNr:yVisible
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1359
    "returns the line number for a given physical y coordinate
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1360
     or nil if beyond of list.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1361
    "
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1362
    ^self yAbsoluteToLineNr: yVisible + viewOrigin y.
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1363
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  1364
    "Modified: / 18-04-2013 / 10:04:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2464
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1365
!
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1366
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1367
yVisibleToRowNr:yVisible
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1368
    "for protocol compatibility with DSVColumnView"
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1369
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1370
    ^ self yVisibleToLineNr:yVisible
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1371
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1372
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1373
!ListModelView methodsFor:'protocol'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1374
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1375
fetchResources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1376
    "fetch device colors and ..., to avoid reallocation at redraw time;
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1377
     *** called after a create or snapin to fetch all device resources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1378
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1379
    fgColor    := self colorOnDevice:fgColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1380
    bgColor    := self colorOnDevice:bgColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1381
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1382
3533
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1383
heightForLines:numberOfLines
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1384
    |h|
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1385
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1386
    h := self lineHeightFor:'Yg'.
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1387
    ^ h * numberOfLines
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1388
!
3c7fa69fe1c7 heightForLines:
ca
parents: 3501
diff changeset
  1389
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1390
lineHeightFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1391
    "returns the computed line height for an item
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1392
    "
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1393
    ^ lineSpacing + (listRenderer heightFor:anItem)
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1394
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1395
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1396
listSizeChanged:anIndex nLines:noLines
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1397
    "list size changed; information is stored to recompute the
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1398
     width if required( preferredExtent, horizontal scroller ... ).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1399
     see: widthOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1400
     *** if nLines is negative, lines are removed otherwise added.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1401
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1402
    |start "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1403
     stop  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1404
     size  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1405
    |
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1406
"/    preferredExtent := nil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1407
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1408
    cachedPreferredExtent := nil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1409
    widthOfContents isNil ifTrue:[      "/ recompute whole list
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1410
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1411
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1412
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1413
    (noLines < 0 or:[(size := self size) <= noLines]) ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1414
	widthOfContents := nil.         "/ force recompute whole list
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1415
	^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1416
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1417
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1418
    stop  := anIndex + noLines - 1.     "/ recompute a range
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1419
    start := anIndex.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1420
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1421
    computeWidthInRange notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1422
	start := computeWidthInRange y.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1423
	stop  <  start ifTrue:[stop := start min:size].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1424
	start := (computeWidthInRange x) min:anIndex.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1425
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1426
    computeWidthInRange := start@stop
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1427
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1428
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1429
lostSynchronisation
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1430
    "called when the changes derived from the model are faster than the handling
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1431
    "
3892
4e95e7f60aa3 changed:
fm
parents: 3891
diff changeset
  1432
4e95e7f60aa3 changed:
fm
parents: 3891
diff changeset
  1433
    self recomputeHeightOfContents.
4e95e7f60aa3 changed:
fm
parents: 3891
diff changeset
  1434
    self invalidate.
4e95e7f60aa3 changed:
fm
parents: 3891
diff changeset
  1435
    self contentsChanged
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1436
!
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1437
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1438
newDefaultList
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1439
    "creates and returns a new default list class, on default a List
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1440
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1441
    ^ List new
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1442
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1443
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1444
widthOfWidestLineBetween:firstLine and:lastLine
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1445
    "return the width in pixels of the widest line in a range
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1446
     - used to optimize scrolling, by limiting the scrolled area;
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1447
       not for scrollbar or other width related stuff which should be exact."
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1448
2645
b3d3e7c3ee40 bugfix due to compilation (test SmallInteger for nil)
ca
parents: 2644
diff changeset
  1449
    |item width|
b3d3e7c3ee40 bugfix due to compilation (test SmallInteger for nil)
ca
parents: 2644
diff changeset
  1450
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1451
    width := listRenderer widthOfWidestLineBetween:firstLine and:lastLine.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1452
    width notNil ifTrue:[^ width].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1453
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1454
    width := textStartLeft.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1455
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1456
    firstLine to:lastLine do:[:anIndex|
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1457
        item := self at:anIndex ifAbsent:nil.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1458
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1459
        item isNil ifTrue:[^ width + textStartLeft].
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1460
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1461
        width := (listRenderer widthFor:item) max:width
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1462
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1463
    ^ width + textStartLeft
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1464
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1465
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1466
!ListModelView methodsFor:'queries'!
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1467
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1468
isLineFullyVisible:aLineNr
3201
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1469
    "returns true if the line is fully visible"
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1470
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1471
    |y|
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1472
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1473
    shown ifFalse:[^ false].
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1474
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1475
    y := self yVisibleOfLine:aLineNr.
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1476
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1477
    (y between:0 and:height) ifTrue:[
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1478
        y := self yVisibleOfLine:(aLineNr + 1).
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1479
        y <= height ifTrue:[^ true ].
3201
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1480
    ].
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1481
    ^ false
6091
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1482
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1483
    "Created: / 20-07-2019 / 07:50:09 / Claus Gittinger"
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1484
!
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1485
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1486
isLineVisible:aLineNr
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1487
    "returns true if the line is visible"
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1488
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1489
    ^ self isLineVisible:aLineNr in:self extent
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1490
!
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1491
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1492
isLineVisible:aLineNr in:anExtentPoint
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1493
    "returns true if the line is visible inside the top margin and the y given by the point"
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1494
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1495
    |y|
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1496
    
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1497
    y := self yVisibleOfLine:aLineNr.
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1498
    ^ (y between:margin and:(anExtentPoint y - margin))
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1499
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1500
    "Modified (comment): / 20-07-2019 / 07:48:19 / Claus Gittinger"
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1501
!
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1502
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1503
lineIsFullyVisible:aLineNr
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1504
    <resource: #obsolete>
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1505
    "returns true if the line is fully visible"
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1506
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1507
    ^ self isLineFullyVisible:aLineNr
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1508
63272e0ae72c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 6027
diff changeset
  1509
    "Modified: / 20-07-2019 / 07:50:29 / Claus Gittinger"
3201
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1510
!
aa2b0f83d8b2 *** empty log message ***
ca
parents: 2981
diff changeset
  1511
6020
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1512
numberOfLines
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1513
    "return the number of lines the text has
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1514
     (protocol compat. with SelectionInListView)"
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1515
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1516
    ^ self size
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1517
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1518
    "Created: / 01-03-2019 / 19:29:20 / Claus Gittinger"
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1519
!
2594f0f2752c #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5958
diff changeset
  1520
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1521
size
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1522
    "returns the number of list entries
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1523
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1524
    ^ self list size
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1525
! !
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1526
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1527
!ListModelView methodsFor:'recomputation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1528
5958
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1529
computePreferredExtent
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1530
    "returns the preferred extent"
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1531
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1532
    |x y|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1533
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1534
    cachedPreferredExtent isNil ifTrue:[
5958
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1535
        y := self heightOfContents.
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1536
        x := self widthOfContents.
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1537
        cachedPreferredExtent := x@y
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1538
    ].
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1539
    ^ cachedPreferredExtent
5958
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1540
198a6b4a3a8b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5919
diff changeset
  1541
    "Created: / 09-11-2018 / 19:56:16 / Claus Gittinger"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1542
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1543
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1544
recomputeHeightOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1545
    "recompute all the y positions
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1546
    "
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1547
    |newList
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1548
     yAbs "{ Class: SmallInteger }"
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1549
     size "{ Class: SmallInteger }"|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1550
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1551
    yAbs    := (textStartTop + margin).   "/ top inset of first line
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1552
    size    := self size.
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1553
    newList := OrderedCollection new:(size + 1).
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1554
    newList add:yAbs.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1555
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1556
    size ~~ 0 ifTrue:[
4569
cc9783bc24f6 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4513
diff changeset
  1557
        1 to:size do:[:anIndex|
4635
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1558
            yAbs := yAbs + (self heightOfLineAt:anIndex).
4569
cc9783bc24f6 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4513
diff changeset
  1559
            newList add:yAbs
cc9783bc24f6 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4513
diff changeset
  1560
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1561
    ].
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1562
    startOfLinesY := newList.
3483
c9946ba07f41 preferredExtent fixed (do not use pref'Extent as a cache)
Claus Gittinger <cg@exept.de>
parents: 3390
diff changeset
  1563
    cachedPreferredExtent := nil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1564
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1565
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1566
!ListModelView methodsFor:'scroller interface'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1567
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1568
getWidthOfContents
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1569
    ^ widthOfContents
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1570
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1571
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1572
heightOfAnyNonNilItem
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1573
    "returns the height of a line at an index (including lineSpacing...)"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1574
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1575
    |item|
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1576
4635
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1577
    item := list
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1578
        detect:[:i | i notNil]
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1579
        ifNone:[ ^ lineSpacing + gc font height ]. "arbitrary"
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1580
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1581
    ^ self lineHeightFor:item.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1582
!
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1583
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1584
heightOfContents
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1585
    "return the height of the contents in pixels"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1586
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1587
    ^ self startOfLinesY last ? 0
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1588
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1589
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1590
heightOfLineAt:aLineNr
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1591
    "returns the height of a line at an index (including lineSpacing...)"
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1592
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1593
    hasConstantHeight ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1594
	constantHeight isNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1595
	    constantHeight := self heightOfAnyNonNilItem.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1596
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1597
	^ constantHeight
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1598
    ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1599
    ^ self realHeightOfLineAt:aLineNr
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1600
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1601
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1602
innerHeight
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1603
    "returns the inner height of the contents shown
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1604
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1605
    ^ height - margin - margin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1606
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1607
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1608
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1609
innerWidth
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1610
    "returns the inner width of the contents shown
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1611
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1612
    ^ width - margin - margin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1613
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1614
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1615
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1616
maxViewOriginY
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1617
    "returns the maximum possible y of the view origin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1618
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1619
    ^ (self heightOfContents - self innerHeight) max:0
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1620
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1621
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1622
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1623
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1624
realHeightOfLineAt:aLineNr
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1625
    "returns the real (uncached) height of a line at an index"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1626
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1627
    |item|
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1628
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1629
    item := self at:aLineNr ifAbsent:nil.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1630
    item notNil ifTrue:[
4500
af93193304b4 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4478
diff changeset
  1631
        ^ self lineHeightFor:item
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1632
    ].
4635
117ff69e7cd0 class: ListModelView
ca
parents: 4626
diff changeset
  1633
    ^ lineSpacing + gc font height "arbitrary"
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1634
!
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1635
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1636
setWidthOfContents: aWidth
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1637
    widthOfContents := aWidth.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1638
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1639
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1640
verticalScrollStep
3501
1e571b1b2e15 comment
Claus Gittinger <cg@exept.de>
parents: 3483
diff changeset
  1641
    "return the amount to scroll when stepping up/down (also used for mouseWheel)."
1e571b1b2e15 comment
Claus Gittinger <cg@exept.de>
parents: 3483
diff changeset
  1642
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1643
    ^ 10
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1644
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1645
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1646
viewOrigin
5256
235f7d105201 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5206
diff changeset
  1647
    "return the viewOrigin; that's the coordinate of the contents
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1648
     which is shown topLeft in the view.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1649
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1650
    ^ viewOrigin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1651
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1652
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1653
widthOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1654
    "return the width of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1655
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1656
    |range
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1657
     size  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1658
     start "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1659
     stop  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1660
    |
5521
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1661
    (widthOfContents notNil and:[computeWidthInRange isNil]) ifFalse:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1662
        range               := computeWidthInRange.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1663
        computeWidthInRange := nil.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1664
    "/    preferredExtent     := nil.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1665
    "/    cachedPreferredExtent := nil.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1666
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1667
        size := self size.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1668
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1669
        size == 0 ifTrue:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1670
            widthOfContents := 20.
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1671
        ] ifFalse:[
5521
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1672
            widthOfContents isNil ifTrue:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1673
                widthOfContents := self widthOfWidestLineBetween:1 and:size
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1674
            ] ifFalse:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1675
                start := range x.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1676
                stop  := range y min:size.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1677
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1678
                start > stop ifFalse:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1679
                    size := self widthOfWidestLineBetween:start and:stop.
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1680
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1681
                    widthOfContents < size ifTrue:[
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1682
                        widthOfContents := size
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1683
                    ]
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1684
                ]
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1685
            ]
5521
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1686
        ].
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1687
    ].    
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1688
    ^ widthOfContents + textStartLeft
5521
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1689
a834aaae42a9 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 5454
diff changeset
  1690
    "Modified: / 21-03-2017 / 09:55:45 / cg"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1691
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1692
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1693
xOriginOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1694
    "return the horizontal origin of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1695
    "
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1696
    ^ viewOrigin x
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1697
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1698
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1699
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1700
yOriginOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1701
    "return the vertical origin of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1702
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1703
    ^ viewOrigin y
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1704
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1705
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1706
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1707
!ListModelView methodsFor:'scrolling'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1708
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1709
basicScrollTo:anOrigin redraw:doRedraw
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1710
    "change origin to have newOrigin be visible at the top-left.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1711
    "
1538
ef0eea7c074a check for windowGroup
Claus Gittinger <cg@exept.de>
parents: 1535
diff changeset
  1712
    |newOrg dltOrg winGrp
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1713
     innerWT    "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1714
     innerHG    "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1715
     h          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1716
     x          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1717
     x0         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1718
     x1         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1719
     y          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1720
     w          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1721
     y0         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1722
     y1         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1723
     dX         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1724
     dY         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1725
    |
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1726
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1727
    innerWT := self innerWidth.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1728
    innerHG := self innerHeight.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1729
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1730
    h := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1731
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1732
    (y := anOrigin y) > h ifTrue:[              "/ end of contents
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1733
        y > (dY := self maxViewOriginY) ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1734
            y := dY max:h                  
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1735
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1736
    ] ifFalse:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1737
        y := y max:0.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1738
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1739
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1740
    (x := anOrigin x) > 0 ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1741
        x := x min:(self widthOfContents - innerWT).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1742
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1743
    x      := x max:0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1744
    newOrg := (x @ y).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1745
    dltOrg := newOrg - viewOrigin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1746
    dX     := dltOrg x.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1747
    dY     := dltOrg y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1748
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1749
    (dX == 0 and:[dY == 0]) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1750
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1751
    ].
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1752
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1753
    dY := dY abs.
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1754
    dX := dX abs.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1755
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1756
    (   shown not                                        "/ check if we are shown
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1757
     or:[(dX ~~ 0 and:[dY ~~ 0])                         "/ scroll vertical & horizontal
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1758
     or:[(innerHG - dY < 20 or:[innerWT - dX < 20])]]    "/ faster to invalidate screen
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1759
    ) ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1760
        viewOrigin := newOrg.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1761
        self originChanged:dltOrg.
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1762
        shown ifTrue:[ self invalidate ].
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1763
        ^ self
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1764
    ].
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1765
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1766
    (winGrp := self windowGroup) notNil ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1767
        winGrp processRealExposeEventsFor:self.
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1768
    ].
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1769
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1770
    self originWillChange.
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1771
3892
4e95e7f60aa3 changed:
fm
parents: 3891
diff changeset
  1772
    (doRedraw and:[shown]) ifFalse:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1773
        viewOrigin := newOrg.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1774
        self originChanged:dltOrg.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1775
        ^ self
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1776
    ].
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1777
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1778
    self catchExpose.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1779
    viewOrigin := newOrg.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1780
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1781
    dY ~~ 0 ifTrue:[                            "/ SCROLL VERTICAL
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1782
        y0 := y1 := margin + dY.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1783
        h  := innerHG - dY.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1784
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1785
        dltOrg y < 0 ifTrue:[y0 := margin. y := y0]
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1786
                    ifFalse:[y1 := margin. y := y1 + h].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1787
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1788
        self copyFrom:self x:margin y:y0 toX:margin y:y1 width:innerWT height:h async:true.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1789
        self invalidateX:margin y:y width:innerWT height:(innerHG - h).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1790
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1791
    ] ifFalse:[                                 "/ SCROLL HORIZONTAL
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1792
        x0 := x1 := dX + margin.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1793
        w  := innerWT - dX.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1794
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1795
        dltOrg x < 0 ifTrue:[x0 := x := margin ]
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1796
                    ifFalse:[x1 := margin. x := w].
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1797
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1798
        self copyFrom:self x:x0 y:margin toX:x1 y:margin width:w height:innerHG async:true.
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1799
        self invalidateX:x y:margin width:(width - w) height:innerHG.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1800
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1801
    self originChanged:dltOrg.
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1802
    self waitForExpose.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1803
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1804
    winGrp notNil ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1805
        winGrp processRealExposeEventsFor:self.
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1806
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1807
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1808
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1809
halfPageDown
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1810
    "scroll down half a page
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1811
    "
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1812
    self scrollDown:(height // 2).
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1813
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1814
!
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1815
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1816
halfPageUp
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1817
    "scroll up half a page
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1818
    "
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1819
    self scrollUp:(height // 2).
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1820
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1821
!
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1822
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1823
makeLineVisible:aLnNr
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1824
    "make the line visible
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1825
    "
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1826
    aLnNr notNil ifTrue:[
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1827
	self scrollToLine:aLnNr
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1828
    ].
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1829
!
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1830
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1831
scrollTo:anOrigin redraw:doRedraw
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1832
    "change origin to have newOrigin be visible at the top-left.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1833
    "
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1834
    |process|
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1835
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1836
    "/ check if we are still in scrolling due to async. processes
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1837
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1838
    ((process := activeScrollProcess) notNil and:[process isDead]) ifTrue:[
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1839
        activeScrollProcess := nil.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1840
    ].
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1841
    activeScrollProcess notNil ifTrue:[^ self].
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1842
    activeScrollProcess := Processor activeProcess.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1843
    self basicScrollTo:anOrigin redraw:doRedraw.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1844
    activeScrollProcess := nil.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1845
!
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  1846
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1847
scrollToLine:aLineNumber
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1848
    "make line visible"
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1849
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1850
    |inHg "{ Class:SmallInteger }"
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1851
     yTop "{ Class:SmallInteger }"
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1852
     orgY "{ Class:SmallInteger }"
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1853
     yBot "{ Class:SmallInteger }"|
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1854
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1855
    (aLineNumber notNil and:[aLineNumber between:1 and:(self size)]) ifFalse:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1856
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1857
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1858
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1859
    yTop := self yAbsoluteOfLine:aLineNumber.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1860
    inHg := self innerHeight.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1861
    orgY := viewOrigin y.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1862
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1863
    yTop > orgY ifTrue:[
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1864
        yBot := self yAbsoluteOfLine:(aLineNumber + 1).
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1865
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1866
        yBot <= (orgY + inHg) ifTrue:[
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1867
            ^ self
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  1868
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1869
    ].
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1870
    yTop := (yTop - (inHg // 2)) max:0.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1871
    self scrollTo:(viewOrigin x @ yTop).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1872
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1873
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1874
!ListModelView methodsFor:'scrolling auto'!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1875
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1876
startAutoScroll:aSelectorOrBlock distance:aDistance
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1877
    "setup for auto-scroll (when button-press-moving below/above view);
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1878
     - timeDelta for scroll is computed from distance
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1879
    "
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1880
    |timeDelta scrollBlock|
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1881
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1882
    autoScroll ifFalse:[
6146
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1883
        self stopAutoScroll.
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1884
        ^ self
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1885
    ].
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1886
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1887
    autoScrollBlock notNil ifTrue:[
6146
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1888
        Processor removeTimedBlock:autoScrollBlock.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1889
    ] ifFalse:[
6146
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1890
        self compressMotionEvents:false.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1891
    ].
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1892
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1893
    timeDelta := 0.5 / (aDistance abs).
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1894
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1895
    scrollBlock :=
6146
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1896
        [
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1897
            aSelectorOrBlock isSymbol ifTrue:[
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1898
                self perform:aSelectorOrBlock.
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1899
            ] ifFalse:[
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1900
                aSelectorOrBlock value
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1901
            ].
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1902
            autoScrollBlock notNil ifTrue:[
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1903
                Processor addTimedBlock:autoScrollBlock afterSeconds:timeDelta.
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1904
            ]
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1905
        ].
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1906
86591195fd7d #REFACTORING by exept
Claus Gittinger <cg@exept.de>
parents: 6141
diff changeset
  1907
    autoScrollBlock := [self sensor pushAction:scrollBlock].
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1908
    Processor addTimedBlock:autoScrollBlock afterSeconds:timeDelta.
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1909
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1910
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1911
stopAutoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1912
    "stop any autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1913
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1914
    autoScrollBlock notNil ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1915
	Processor removeTimedBlock:autoScrollBlock.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1916
	autoScrollBlock := nil.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1917
	self compressMotionEvents:true.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1918
    ].
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1919
! !
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1920
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1921
!ListModelView methodsFor:'selection'!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1922
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1923
hasSelection
5683
85c4ad2adc62 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5668
diff changeset
  1924
    "by default, false is returned here (redefined in SelectionInListModelView)"
85c4ad2adc62 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5668
diff changeset
  1925
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1926
    ^ false
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1927
! !
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1928
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1929
!ListModelView::Renderer class methodsFor:'documentation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1930
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1931
documentation
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1932
"
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1933
    prepared for ListItemRenderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1934
    .... SelectionItemRenderer ...
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1935
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1936
    goal:
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  1937
	allow the user to redefine the display operation and the dimesion queries
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1938
"
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1939
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1940
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1941
!ListModelView::Renderer class methodsFor:'instance creation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1942
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1943
forView:aView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1944
    |renderer|
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1945
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1946
    renderer := self basicNew initialize.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1947
    renderer forView:aView.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1948
    ^ renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1949
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1950
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1951
!ListModelView::Renderer methodsFor:'accessing-look'!
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1952
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1953
showItemInAdditionToColumns
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1954
    "raise an error: must be redefined in concrete subclass(es)"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1955
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1956
    ^ true "/There are no columns!!"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1957
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1958
    "Modified: / 24-04-2013 / 13:27:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1959
! !
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  1960
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1961
!ListModelView::Renderer methodsFor:'change & update'!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1962
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1963
listWillChange
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1964
    "called before the list changed, clear caches etc.
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1965
     here nothing is done
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1966
    "
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1967
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1968
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1969
sizeChanged:how
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1970
    "Called when size of the corresponding view has changed."
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1971
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1972
    "Created: / 17-04-2013 / 11:42:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1973
!
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  1974
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1975
withinUpdateFromListDo:aBlock
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1976
    "handle an update from the list
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1977
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1978
    aBlock value
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1979
! !
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1980
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1981
!ListModelView::Renderer methodsFor:'displaying'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1982
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1983
display:anItem atX:xLeft y:yTop lineHeight:h
4703
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1984
    "display the item on the view"
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1985
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1986
    "/ obsolete - for backward compatibility
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1987
    self display:anItem atX:xLeft y:yTop lineHeight:h isHighlightedAsSelected:false
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1988
!
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1989
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  1990
display:anItem atX:xLeft y:yTop lineHeight:h isHighlightedAsSelected:isHighlightedAsSelected
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1991
    "display the item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1992
    "
4707
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  1993
    |x0 y0 label labelShown|
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1994
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1995
    x0 := xLeft.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1996
    y0 := yTop.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1997
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1998
    anItem isHierarchicalItem ifTrue:[
4752
37adb59864f9 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4720
diff changeset
  1999
        (anItem class whichClassIncludesSelector:#displayOn:x:y:h:) ~~ AbstractHierarchicalItem ifTrue:[
4720
5e42160bc8f1 class: ListModelView::Renderer
Stefan Vogel <sv@exept.de>
parents: 4707
diff changeset
  2000
            "/ it has a redefined displayOn method.
4706
c9dd0dfc2bef class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4703
diff changeset
  2001
            Transcript showCR:'please define #displayOn:x:y:h:isHighlightedAsSelected: in ',anItem class name.
c9dd0dfc2bef class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4703
diff changeset
  2002
            anItem displayOn:view x:x0 y:y0 h:h 
c9dd0dfc2bef class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4703
diff changeset
  2003
        ] ifFalse:[        
c9dd0dfc2bef class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4703
diff changeset
  2004
            anItem displayOn:view x:x0 y:y0 h:h isHighlightedAsSelected:isHighlightedAsSelected
c9dd0dfc2bef class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4703
diff changeset
  2005
        ].
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2006
    ] ifFalse:[
4703
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2007
        anItem isNil ifTrue:[^ self].
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2008
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2009
        y0    := y0 - (((self heightFor:anItem) + 1 - h) // 2).
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2010
        label := anItem.
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2011
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2012
        label isImageOrForm ifFalse:[
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2013
            label isNumber ifTrue:[
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2014
                label := label printString
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2015
            ].
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2016
            y0 := y0 + view font ascent
7fadc047104c class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4645
diff changeset
  2017
        ].
4707
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2018
        labelShown := label.
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2019
        label isText ifTrue:[
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2020
            isHighlightedAsSelected ifTrue:[
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2021
                (label hasChangeOfEmphasis) ifTrue:[
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2022
                    labelShown := Text string:label string emphasisCollection:label emphasis asArray.
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2023
                    labelShown emphasisAllRemove:#color.
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2024
                ].
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2025
            ].
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2026
        ].
13436a43bd10 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4706
diff changeset
  2027
        labelShown displayOn:view x:x0 y:y0
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2028
    ].
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2029
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2030
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2031
postRedrawX:damageX y:yStartOrYDamage w:damageWidth from:startOrNil to:stopOrNil
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2032
    "called after redraw of the items in range from start to stop is done;
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2033
     if no items are damaged, start and stop is set to nil.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2034
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2035
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2036
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2037
validateDrawableItemsFrom:start to:stop
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2038
    "called before drawing items from start to stop; if the method returns false
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2039
     nothing will be drawn and a invalidate is pushed on the event queue.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2040
     On default true is returned.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2041
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2042
    ^ true
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2043
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2044
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2045
!ListModelView::Renderer methodsFor:'instance creation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2046
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2047
forView:aView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2048
    view := aView.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2049
    view shown ifTrue:[ self mapped ].
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2050
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2051
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2052
mapped
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2053
    "called if the view is mapped; can be redefined by subclass
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2054
    "
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2055
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2056
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2057
!ListModelView::Renderer methodsFor:'queries-dimensions'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2058
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2059
heightFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2060
    "returns the height of an item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2061
    "
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2062
    ^ anItem heightOn:view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2063
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2064
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2065
maxItemWidthOrNil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2066
    "returns the maximum item width for drawing or nil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2067
     if unspecified (the default); used for cliping
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2068
    "
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2069
    ^ nil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2070
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  2071
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2072
widthFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2073
    "returns the width of an item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2074
    "
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2075
    ^ anItem widthOn:view
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2076
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2077
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2078
widthOfWidestLineBetween:firstLine and:lastLine
6141
c2e4f4074757 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6120
diff changeset
  2079
    "returns the width of the longest line in pixels in a range; if the renderer
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2080
     cannot compute the width, nil is returned (the default).
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2081
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  2082
    ^ nil
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2083
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  2084
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2085
!ListModelView::TableRenderer class methodsFor:'defaults'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2086
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2087
dragCursor
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2088
    "returns the cursor used to highliggt the drag can start operation
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2089
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2090
    ^ Cursor leftRightArrow
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2091
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2092
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2093
separatorOneDColor
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2094
    "answer the color used for drawing separators"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2095
4645
bda038fdd045 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 4635
diff changeset
  2096
    ^ Color lightGray
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2097
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2098
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2099
!ListModelView::TableRenderer methodsFor:'accessing'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2100
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2101
columnDescriptors:aSeqOfColumnSpecs
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2102
    "setup column descriptions for a sequence of DataSetColumnSpec's but still keep
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2103
     the receiver which provides the selectors called by the DataSetColumnSpec.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2104
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2105
     If the receiver is nil, the item into the list is invoked"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2106
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2107
    self columnDescriptors:aSeqOfColumnSpecs receiver:receiver.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2108
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2109
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2110
columnDescriptors:aSeqOfColumnSpecs receiver:aReceiver
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2111
    "setup column descriptions for a sequence of DataSetColumnSpec's and the
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2112
     receiver which provides the selectors called by the DataSetColumnSpec.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2113
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2114
     If the receiver is nil, the item into the list is invoked"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2115
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2116
    receiver := aReceiver.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2117
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2118
    minimumRequiredColumnHeight := 0.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2119
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2120
    aSeqOfColumnSpecs size == 0 ifTrue:[
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2121
        columnDescriptors := #().
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2122
    ] ifFalse:[
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2123
        columnDescriptors := aSeqOfColumnSpecs collect:[:aColumnSpec|
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2124
            ColumnDescriptor dataSetColumnSpec:aColumnSpec
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2125
        ].
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2126
        columnDescriptors keysAndValuesDo:[:colNr :spec|
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2127
            spec columnNumber:colNr.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2128
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2129
            minimumRequiredColumnHeight :=
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2130
                    minimumRequiredColumnHeight max:(spec minimumRequiredColumnHeight).
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2131
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2132
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2133
    hasFixedItemWidth := attributes at:#hasFixedItemWidth ifAbsent:[false].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2134
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2135
    self initializeSplitbars.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2136
    self splitbarsChanged
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2137
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2138
    "Modified: / 24-04-2013 / 13:32:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2139
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2140
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2141
numberOfColumns
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2142
    "answer the numbers of columns excluding the items row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2143
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2144
    ^ columnDescriptors size
4204
efb428640011 class: ListModelView::TableRenderer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4201
diff changeset
  2145
!
efb428640011 class: ListModelView::TableRenderer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4201
diff changeset
  2146
efb428640011 class: ListModelView::TableRenderer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4201
diff changeset
  2147
xSplitbars
efb428640011 class: ListModelView::TableRenderer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4201
diff changeset
  2148
    ^ xSplitbars
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2149
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2150
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2151
!ListModelView::TableRenderer methodsFor:'accessing-look'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2152
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2153
defaultWidthForItem
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2154
    "answer the default witdth of the item before the first column"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2155
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2156
    ^ attributes at:#defaultWidthForItem ifAbsent:[ 100 ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2157
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2158
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2159
defaultWidthForItem:anIntegerOrFloat
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2160
    "Set the default witdth of the item before the first column.
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2161
     If `anIntegerOrFloat` is 
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2162
        - an integer then the width is absolute width in pixels
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2163
        - a float in <0.0, 1,1> then the width is percentage
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2164
          of view's width
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2165
    "
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2166
    anIntegerOrFloat isFloat ifTrue:[
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2167
        self assert: (anIntegerOrFloat between: 0.0 and: 1.0)
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2168
    ].
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2169
    ^ attributes at:#defaultWidthForItem put:anIntegerOrFloat.
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2170
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2171
    "Modified: / 12-08-2013 / 12:20:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2172
!
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2173
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2174
defaultWidthForItemInPixels
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2175
    "Answer the default witdth of the item before the first column in pixels"
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2176
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2177
    | w |
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2178
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2179
    w := self defaultWidthForItem.
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2180
    w isFloat ifTrue:[
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2181
        w := (view width * w) rounded.
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2182
    ].
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2183
    ^ w
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2184
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2185
    "Created: / 12-08-2013 / 12:16:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2186
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2187
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2188
noAutoResizeForRowOfItems
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2189
    "the first row which keeps the items are not automaticaly resized
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2190
     when width of items changed"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2191
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2192
    hasFixedItemWidth := true.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2193
    attributes at:#hasFixedItemWidth put:true.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2194
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2195
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2196
separatorOneDColor
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2197
    "answer the color used for drawing separators"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2198
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2199
    separatorOneDColor isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2200
	separatorOneDColor := self class separatorOneDColor.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2201
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2202
	(view notNil and:[view realized]) ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2203
	    separatorOneDColor := separatorOneDColor onDevice:(view device).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2204
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2205
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2206
    ^ separatorOneDColor
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2207
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2208
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2209
showHorizontalSeparators
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2210
    "answer true if horizontal separators are drawn"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2211
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2212
    ^ attributes at:#showHorizontalSeparators ifAbsent:[ true ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2213
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2214
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2215
showHorizontalSeparators:aBoolean
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2216
    "set true if horizontal separators are drawn"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2217
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2218
    attributes at:#showHorizontalSeparators put:aBoolean.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2219
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2220
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2221
showHorizontalSeparatorsForItem
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2222
    "answer true if horizontal separators is drawn for the item row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2223
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2224
    ^ attributes at:#showHorizontalSeparatorsForItem ifAbsent:[ true ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2225
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2226
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2227
showHorizontalSeparatorsForItem:aBoolean
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2228
    "set true if horizontal separators is drawn for the item row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2229
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2230
    attributes at:#showHorizontalSeparatorsForItem put:aBoolean.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2231
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2232
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2233
showItemInAdditionToColumns
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2234
    "Return, whether the item itseld should be shown in addition to 
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2235
     columns (default)"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2236
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2237
    ^attributes at:#showVerticalSplitbarsBelowContents ifAbsent:[ true ]
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2238
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2239
    "Created: / 24-04-2013 / 13:26:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2240
!
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2241
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2242
showItemInAdditionToColumns:aBoolean
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2243
    "If set to troe, the implicit forst column is shown (old behaviour).
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2244
     When false, only column are shown"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2245
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2246
    | old |
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2247
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2248
    old := self showItemInAdditionToColumns.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2249
    old == self ifTrue:[ ^ self ].
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2250
    attributes at:#showVerticalSplitbarsBelowContents put:aBoolean.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2251
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2252
    "Created: / 24-04-2013 / 13:24:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2253
!
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2254
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2255
showVerticalSplitbars
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2256
    "answer true if vertical separators are drawn"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2257
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2258
    ^ attributes at:#showVerticalSplitbars ifAbsent:[ true ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2259
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2260
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2261
showVerticalSplitbars:aBoolean
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2262
    "set true if vertical separators are drawn"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2263
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2264
    attributes at:#showVerticalSplitbars put:aBoolean.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2265
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2266
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2267
showVerticalSplitbarsBelowContents
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2268
    "answer true if the vertical separators are drawn below last row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2269
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2270
    ^ attributes at:#showVerticalSplitbarsBelowContents ifAbsent:[ false ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2271
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2272
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2273
showVerticalSplitbarsBelowContents:aBoolean
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2274
    "set true if the vertical separators are drawn below last row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2275
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2276
    attributes at:#showVerticalSplitbarsBelowContents put:aBoolean.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2277
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2278
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2279
splitbarInset
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2280
    "returns the horizontal left and right inset of the splitbar"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2281
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2282
    ^ 2
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2283
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2284
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2285
textStartLeft
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2286
    "used when drawing the last separator;
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2287
     workaround when drawing the selection frame"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2288
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2289
    ^ 2
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2290
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2291
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2292
!ListModelView::TableRenderer methodsFor:'actions'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2293
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2294
moveSplitbarAt:aSepIndex toAbsoluteX:x
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2295
    "move the position of the separator at an index to absolute position x;
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2296
     used to drag splitbars"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2297
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2298
    |xOld xNew xPrv deltaX xAbsoluteOfFirstSplitbar|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2299
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2300
    aSepIndex == 1 ifTrue:[
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2301
        hasFixedItemWidth := true.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2302
        xPrv := view margin.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2303
    ] ifFalse:[
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2304
        xPrv := xSplitbars at:(aSepIndex - 1).
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2305
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2306
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2307
    aSepIndex == 1 ifTrue:[
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2308
        hasFixedItemWidth := true.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2309
        xPrv := view margin.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2310
    ] ifFalse:[
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2311
        xPrv := xSplitbars at:(aSepIndex - 1).
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2312
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2313
    xOld := xSplitbars at:aSepIndex.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2314
    xNew := x max:xPrv.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2315
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2316
    deltaX := xNew - xOld.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2317
    deltaX = 0 ifTrue:[ ^ self ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2318
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2319
    xAbsoluteOfFirstSplitbar := xSplitbars at:1.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2320
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2321
    xSplitbars from:aSepIndex keysAndValuesDo:[:sepIdx :sepX|
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2322
        xSplitbars at:sepIdx put:(sepX + deltaX).
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2323
    ].
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2324
    aSepIndex ~~ 1 ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2325
        (columnDescriptors at: aSepIndex - 1) width: (xSplitbars at: aSepIndex) - (xSplitbars at: aSepIndex - 1) - (self splitbarInset * 2).
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2326
    ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2327
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2328
    view setWidthOfContents:(xSplitbars last).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2329
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2330
    view shown ifTrue:[
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2331
        |damage width height orgX|
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2332
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2333
        view windowGroup processRealExposeEventsFor:self.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2334
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2335
        width  := view width.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2336
        height := view height.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2337
        orgX   := view viewOrigin x.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2338
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2339
        xNew := ((xNew - orgX) max:0) min:width.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2340
        xOld := ((xOld - orgX) max:0) min:width.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2341
        xPrv := ((xPrv - orgX) max:0) min:width.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2342
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2343
        xOld > xNew ifTrue:[                                    "/ <- copy to left
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2344
            deltaX := xOld - xNew.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2345
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2346
            view copyFrom:view x:xOld y:0 toX:xNew y:0
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2347
                    width:(width - xOld) height:height.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2348
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2349
            damage := Rectangle left:(width - deltaX) top:0 width:deltaX height:height.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2350
            view invalidateDeviceRectangle:damage repairNow:false.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2351
        ] ifFalse:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2352
            xOld < xNew ifTrue:[                                "/ -> copy to right
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2353
                view copyFrom:view x:xOld y:0 toX:xNew y:0
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2354
                        width:(width - xNew) height:height.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2355
            ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2356
        ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2357
        xNew > xPrv ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2358
            "/ should not invalidate the items display range..."
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2359
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2360
            xAbsoluteOfFirstSplitbar := xAbsoluteOfFirstSplitbar - self splitbarInset.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2361
            xPrv := (xPrv max:xAbsoluteOfFirstSplitbar).
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2362
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2363
            xNew > xPrv ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2364
                damage := Rectangle left:xPrv top:0 width:(xNew -xPrv) height:height.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2365
                view invalidateDeviceRectangle:damage repairNow:false.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2366
            ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2367
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2368
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2369
    view contentsChanged.
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2370
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2371
    "Modified: / 07-05-2013 / 20:55:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2372
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2373
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2374
!ListModelView::TableRenderer methodsFor:'change & update'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2375
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2376
sizeChanged:how
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2377
    view sensor pushUserEvent:#sizeChangedDelayed: for:self withArgument:how
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2378
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2379
    "Created: / 07-05-2013 / 18:32:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2380
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2381
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2382
sizeChangedDelayed:how
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2383
    self initializeSplitbars.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2384
    self splitbarsChanged.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2385
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2386
    "Created: / 07-05-2013 / 18:37:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2387
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2388
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2389
splitbarsChanged
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2390
    "called if the splitbars has changed; recompute the width of contents"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2391
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2392
    view notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2393
	|newWidth oldWidth|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2394
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2395
	oldWidth := view getWidthOfContents.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2396
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2397
	oldWidth notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2398
	    newWidth := xSplitbars last.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2399
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2400
	    newWidth ~= oldWidth ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2401
		view setWidthOfContents:newWidth.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2402
		view contentsChanged.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2403
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2404
	    view invalidate.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2405
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2406
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2407
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2408
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2409
withinUpdateFromListDo:aBlock
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2410
    "handle an change & update within the view"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2411
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2412
    |xAbs|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2413
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2414
    xAbs := xSplitbars last.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2415
    super withinUpdateFromListDo:aBlock.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2416
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2417
    xAbs ~~ xSplitbars last ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2418
	self splitbarsChanged
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2419
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2420
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2421
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2422
!ListModelView::TableRenderer methodsFor:'displaying'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2423
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2424
drawColumnsFrom:start to:stop x:xDmg y:yStart w:wDmg
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2425
    "draw columns from start to stop.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2426
     if the start/stop index is nil, than no row is affected by the damage."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2427
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2428
    |xNxt xMax xTrs clip y0 y1 x0 x1 hgFgColor hgBgColor fgColor bgColor colInset
3722
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2429
    shownSelected numSplitbars|
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2430
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2431
    start isNil ifTrue:[^ self].
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2432
    numSplitbars := xSplitbars size.
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2433
    numSplitbars > 1 ifFalse:[^ self].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2434
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2435
    xTrs := view viewOrigin x.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2436
    xMax := xDmg + wDmg.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2437
    xNxt := xSplitbars first - xTrs.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2438
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2439
    xNxt >= xMax ifTrue:[^ self].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2440
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2441
    view hasSelection ifTrue:[
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2442
        hgFgColor := view hilightForegroundColor.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2443
        hgBgColor := view hilightBackgroundColor.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2444
    ].
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2445
    fgColor := view foregroundColor.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2446
    bgColor := view backgroundColor.
4478
7d68fb3be177 class: ListModelView
Stefan Vogel <sv@exept.de>
parents: 4337
diff changeset
  2447
    clip    := view clippingBoundsOrNil.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2448
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2449
    clip isNil ifTrue:[
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2450
        clip := Rectangle left:xDmg top:yStart width:wDmg height:(view height - yStart).
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2451
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2452
    colInset := self splitbarInset.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2453
3722
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2454
    2 to:numSplitbars do:[:anIndex|
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2455
        |clipLft clipRgt colWdth colDesc|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2456
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2457
        xNxt < xMax ifFalse:[^ self].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2458
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2459
        x0   := xNxt.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2460
        xNxt := (xSplitbars at:anIndex) - xTrs.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2461
        x1   := xNxt.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2462
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2463
        "/ workaround due to drawing the selection frame
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2464
        anIndex == numSplitbars ifTrue:[ x1 := x1 + self textStartLeft ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2465
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2466
        colDesc := columnDescriptors at:(anIndex - 1) ifAbsent:[ ^ self ].    "/ can give up...
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2467
        clipLft := x0 max:xDmg.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2468
        clipRgt := x1 min:xMax.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2469
        colWdth := x1 - x0.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2470
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2471
        (colWdth > 2 and:[clipLft < clipRgt]) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2472
            clip := clip copy.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2473
            clip setLeft:clipLft.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2474
            clip right:clipRgt.
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2475
            view clippingBounds:clip.
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2476
            y1 := yStart.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2477
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2478
            start to:stop do:[:aRowNr| 
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2479
                |recv|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2480
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2481
                y0   := y1.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2482
                y1   := view yVisibleOfLine:(aRowNr + 1).
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2483
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2484
                recv := receiver.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2485
                recv isNil ifTrue:[ recv := view at:aRowNr ifAbsent:nil ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2486
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2487
                recv notNil ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2488
                    (hgFgColor notNil and:[view isInSelection:aRowNr]) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2489
                        shownSelected := true.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2490
                        view paint:hgFgColor on:hgBgColor
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2491
                    ] ifFalse:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2492
                        shownSelected := false.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2493
                        view paint:fgColor on:bgColor.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2494
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2495
                    colDesc
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2496
                        drawRowAt:aRowNr
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2497
                        shownSelected:shownSelected
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2498
                        receiver:recv
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2499
                        x:x0 + colInset
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2500
                        y:y0
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2501
                        w:colWdth - colInset - colInset
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2502
                        h:(y1 - y0) on:view.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2503
                ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2504
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2505
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2506
    ].
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2507
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2508
    "Modified: / 16-06-2010 / 16:34:32 / cg"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2509
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2510
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2511
drawHorizontalSeparatorsX:x y:y w:w from:start to:stop
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2512
    "draw horizontal seperators from start to stop.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2513
     if the start/stop index is nil, than no row is affected by the damage."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2514
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2515
    |x1 ySep clipRec x0|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2516
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2517
    start isNil ifTrue:[ ^ self ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2518
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2519
    "/ workaround due to drawing the selection frame
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2520
    x1 := self xVisibleOfLastSplitbar + self textStartLeft.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2521
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2522
    x1 := x1 min:(x + w).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2523
    x1 <= x ifTrue:[^ self].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2524
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2525
    x0 := x.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2526
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2527
    self showHorizontalSeparatorsForItem ifFalse:[
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2528
        x0 := x0 max:(self xVisibleOfSplitbarAt:1).
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2529
        x1 <= x0 ifTrue:[^ self].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2530
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2531
    clipRec := Rectangle left:x0 top:0 right:x1 bottom:(view height).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2532
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2533
    view clippingBounds:clipRec.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2534
    view paint:(self separatorOneDColor).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2535
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2536
    start to:stop do:[:aRowNr|
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2537
        ySep := (view yVisibleOfLine:(aRowNr + 1)) - 1.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2538
        view displayLineFromX:x0 y:ySep toX:x1 y:ySep.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2539
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2540
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2541
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2542
drawVerticalSplitbarsX:x0 y:y0 w:w from:start to:stop
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2543
    "draw vertical splitbars"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2544
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2545
    |x x1 vX y1 clipRec nrOfSep|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2546
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2547
    nrOfSep := xSplitbars size.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2548
    nrOfSep == 0 ifTrue:[^ self].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2549
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2550
    "/ workaround for textStartTop
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2551
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2552
    y1 := view height.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2553
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2554
    self showVerticalSplitbarsBelowContents ifFalse:[
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2555
        stop isNil ifTrue:[^ self].
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2556
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2557
        y1 := y1 min:(view yVisibleOfLine:(stop + 1)).
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2558
        y1 <= y0 ifTrue:[ ^ self ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2559
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2560
    x1 := x0 + w.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2561
    vX := view viewOrigin x.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2562
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2563
    xSplitbars keysAndValuesDo:[:anIndex :physY|
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2564
        (self showVerticalSplitbarAt:anIndex) ifTrue:[
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2565
            x := physY - vX.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2566
            x > x1 ifTrue:[^ self]. "/ can giveup - behind max x1
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2567
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2568
            anIndex == nrOfSep ifTrue:[
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2569
                "/ workaround due to drawing the selection frame
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2570
                x := x + self textStartLeft
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2571
            ].
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2572
            x >= x0  ifTrue:[
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2573
                clipRec isNil ifTrue:[
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2574
                    "/ first time to setup clipping and colors
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2575
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2576
                    clipRec := Rectangle left:x0 top:y0 right:x1 bottom:y1.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2577
                    view clippingBounds:clipRec.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2578
                    view paint:(self separatorOneDColor).
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2579
                ].
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2580
                view displayLineFromX:x y:y0 toX:x y:y1.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2581
            ].
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  2582
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2583
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2584
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2585
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2586
postRedrawX:x y:y w:w from:start to:stop
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2587
    "draw columns and than the splitbars"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2588
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2589
    self drawColumnsFrom:start to:stop x:x y:y w:w.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2590
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2591
    self showHorizontalSeparators ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2592
	self drawHorizontalSeparatorsX:x y:y w:w from:start to:stop.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2593
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2594
    self showVerticalSplitbars ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2595
	self drawVerticalSplitbarsX:x y:y w:w from:start to:stop.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2596
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2597
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2598
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2599
validateDrawableItemsFrom:start to:stop
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2600
    "called before drawing the items in range from start to stop; the
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2601
     renderer can perform some tests whether the draw operation might
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2602
     fail; width, ... might change during draw.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2603
     If a test failed, the renderer should repair the failed test and
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2604
     return false. In this case a full redraw is done.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2605
     On default true is returned."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2606
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2607
    |xLastOld xLastNew|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2608
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2609
    xLastOld := xSplitbars last.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2610
    xLastNew := self widthOfWidestLineBetween:start and:stop.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2611
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2612
    xLastNew == xLastOld ifTrue:[^ true].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2613
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2614
    self splitbarsChanged.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2615
    ^ false
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2616
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2617
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2618
!ListModelView::TableRenderer methodsFor:'enumerating'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2619
3722
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2620
columnDescriptorsDo:aOneArgBlock
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2621
    columnDescriptors size > 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2622
	columnDescriptors do:aOneArgBlock.
3722
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2623
    ].
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2624
!
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2625
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2626
columnDescriptorsKeysAndValuesDo:aTwoArgBlock
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2627
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2628
    columnDescriptors size > 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2629
	columnDescriptors keysAndValuesDo:aTwoArgBlock.
3722
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2630
    ].
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2631
!
a962de66d7b5 *** empty log message ***
ca
parents: 3721
diff changeset
  2632
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2633
xSplitbarsDo:aOneArgblock
6120
360ca31c4e49 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6091
diff changeset
  2634
    <resource: #obsolete>
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2635
    "evaluate a block on each x splitbar position
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2636
    "
6120
360ca31c4e49 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6091
diff changeset
  2637
    xSplitbars do:aOneArgblock.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2638
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2639
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2640
xSplitbarsKeysAndValuesDo:aTwoArgblock
6120
360ca31c4e49 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6091
diff changeset
  2641
    <resource: #obsolete>
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2642
    "evaluate a block on each x splitbar index and position
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2643
    "
6120
360ca31c4e49 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 6091
diff changeset
  2644
    xSplitbars keysAndValuesDo:aTwoArgblock.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2645
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2646
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2647
!ListModelView::TableRenderer methodsFor:'event processing'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2648
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2649
addEventHook
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2650
    "add event hook to window group"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2651
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2652
    |winGrp|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2653
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2654
    view notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2655
	winGrp := view windowGroup.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2656
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2657
	winGrp notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2658
	    view enableMotionEvents.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2659
	    winGrp addPreEventHook:self.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2660
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2661
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2662
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2663
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2664
processEvent:ev
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2665
    "only handled if drag splitbar is enabled"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2666
4168
e204a2320df0 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 3974
diff changeset
  2667
    <resource: #keyboard (#Escape )>
e204a2320df0 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 3974
diff changeset
  2668
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2669
    ev isInputEvent ifFalse:[^ false].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2670
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2671
    dragOperation notNil ifTrue:[
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2672
        dragOperation value:ev.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2673
        ^ true
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2674
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2675
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2676
    (view shown
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2677
    and:[ev view == view
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2678
    and:[(ev isButtonPressEvent or:[ev isButtonMotionEvent])
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2679
    and:[((ev button ~= 2) and:[ev button ~= #menu])]]]) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2680
        |splitBarColIndex colIndex phyX colX descr|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2681
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2682
        splitBarColIndex := self xVisibleToSplitbar:(ev x).
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2683
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2684
        (splitBarColIndex > 0 and:[self showVerticalSplitbarsBelowContents not]) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2685
            "/ test whether y is below contents....
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2686
            ev y > (view heightOfContents - view viewOrigin y) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2687
                splitBarColIndex := 0
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2688
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2689
        ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2690
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2691
        ev isButtonPressEvent ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2692
            splitBarColIndex < 1 ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2693
                "/ see if a title-column has been clicked on...
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2694
                colIndex := self xAbsoluteToColumnIndex:(ev x). 
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2695
                (colIndex > 0 and:[colIndex <= columnDescriptors size]) ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2696
                    descr := columnDescriptors at:colIndex.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2697
                    descr := descr dataSetColumnSpec.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2698
                    descr isSortable ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2699
                        "/ see if clicked in the top-row; sort as appropriate...
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2700
self breakPoint:#todo.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2701
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2702
                ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2703
                ^ false
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2704
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2705
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2706
            colX := self xAbsoluteOfSplitbarAt:splitBarColIndex.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2707
            phyX := ev x.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2708
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2709
            dragOperation := [:event|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2710
                event isKeyEvent ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2711
                    event rawKey == #Escape ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2712
                        dragOperation := nil.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2713
                        self moveSplitbarAt:splitBarColIndex toAbsoluteX:colX.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2714
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2715
                ] ifFalse:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2716
                    event isButtonPressEvent ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2717
                        dragOperation := nil.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2718
                        self moveSplitbarAt:splitBarColIndex toAbsoluteX:colX.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2719
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2720
                    event isButtonReleaseEvent ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2721
                        dragOperation := nil.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2722
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2723
                    event isButtonMotionEvent ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2724
                        (view sensor hasExposeEventFor:nil) ifFalse:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2725
                            self
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2726
                                moveSplitbarAt:splitBarColIndex
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2727
                                toAbsoluteX:(colX + (event x) - phyX).
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2728
                        ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2729
                    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2730
                ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2731
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2732
            ^ true
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2733
        ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2734
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2735
        splitBarColIndex == 0 ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2736
            savedCursor notNil ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2737
                view cursor:savedCursor.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2738
                savedCursor := nil.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2739
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2740
        ] ifFalse:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2741
            savedCursor isNil ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2742
                savedCursor := view cursor.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2743
                view cursor:dragCursor.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2744
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2745
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2746
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2747
    ^ false
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2748
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  2749
    "Modified: / 16-06-2010 / 16:35:41 / cg"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2750
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2751
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2752
removeEventHook
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2753
    "release my event hook"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2754
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2755
    |winGrp|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2756
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2757
    view notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2758
	winGrp := view windowGroup.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2759
	winGrp notNil ifTrue:[ winGrp removePreEventHook:self ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2760
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2761
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2762
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2763
!ListModelView::TableRenderer methodsFor:'initialization'!
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2764
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2765
initializeSplitbars
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2766
    | xInset numCols xOffset widths |
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2767
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2768
    xInset      := 2 * self splitbarInset.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2769
    numCols     := columnDescriptors size.
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2770
    xOffset     := self showItemInAdditionToColumns ifTrue:[self defaultWidthForItemInPixels] ifFalse:[0].
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2771
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2772
    xSplitbars  := Array new:(numCols + 1).
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2773
    xSplitbars at:1 put:xOffset.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2774
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2775
    widths := self computeColumnWidthsWithXOffset: xOffset .
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2776
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2777
    1 to:numCols do:[:aColNr|
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2778
        xOffset := xOffset + xInset + (widths at: aColNr).
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2779
        xSplitbars at:(aColNr + 1) put:xOffset.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2780
    ].
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2781
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2782
    "Created: / 24-04-2013 / 13:32:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2783
    "Modified: / 12-08-2013 / 12:16:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2784
! !
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2785
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2786
!ListModelView::TableRenderer methodsFor:'instance creation'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2787
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2788
forView:aView
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2789
    "setup instance for a view;
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2790
     setup my default columnDescription"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2791
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2792
    attributes isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2793
	attributes := IdentityDictionary new.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2794
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2795
    self columnDescriptors:nil.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2796
    super forView:aView.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2797
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2798
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2799
mapped
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2800
    "install event hook and enable motion events
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2801
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2802
    view notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2803
	dragCursor isNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2804
	    dragCursor := self class dragCursor onDevice:(view device).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2805
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2806
	separatorOneDColor notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2807
	    separatorOneDColor := separatorOneDColor onDevice:(view device).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2808
	].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2809
	self isDragEnabled ifTrue:[ self addEventHook ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2810
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2811
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2812
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2813
release
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2814
    "release event hook
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2815
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2816
    self removeEventHook.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2817
    super release.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2818
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2819
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2820
!ListModelView::TableRenderer methodsFor:'private'!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2821
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2822
computeColumnWidthsWithXOffset: xoffset
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2823
    | done widthsFixed widths viewW remainingW nCols flexSum flexUnit |
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2824
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2825
    done := false.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2826
    nCols := columnDescriptors size.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2827
    nCols == 0 ifTrue:[ ^#() ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2828
    widthsFixed := Array new: nCols.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2829
    widths := Array new: nCols.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2830
    viewW := view width - 
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2831
             (xoffset) -
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2832
             (self splitbarInset * nCols * 2) -
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2833
             (nCols) "splitbar width".
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2834
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2835
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2836
    [ done ] whileFalse:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2837
        done := true.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2838
        1 to: nCols do:[:c | 
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2839
            widths at: c put: (widthsFixed at: c) ? ((columnDescriptors at: c) width ? (columnDescriptors at: c) widthSpec)
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2840
        ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2841
        remainingW := viewW.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2842
        flexSum := 0.0.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2843
        1 to: nCols do:[:c | | ws |
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2844
            (ws := widths at: c) isInteger ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2845
                remainingW := remainingW - ws.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2846
                widthsFixed at: c put:ws.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2847
            ] ifFalse:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2848
                ws isFloat ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2849
                    flexSum := flexSum + ws.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2850
                ]
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2851
            ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2852
        ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2853
        remainingW := remainingW max: 0.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2854
        "/ Now, distribute remaining space to columns according their flex widths
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2855
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2856
        flexSum > 0 ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2857
            flexUnit := remainingW / flexSum.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2858
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2859
            1 to: nCols do:[:c | | wflex wmin w |
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2860
                (wflex := widths at: c) isFloat ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2861
                    w := (flexUnit * wflex) floor.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2862
                    wmin := (columnDescriptors at:c) widthMin.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2863
                    w < wmin ifTrue:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2864
                        widthsFixed at: c put: wmin.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2865
                        done := false.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2866
                    ] ifFalse:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2867
                        widths at: c put: w.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2868
                    ]
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2869
                ]
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2870
            ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2871
        ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2872
    ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2873
    ^widths
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2874
4323
c05e731505fb Support for relative width settings for first column in TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4319
diff changeset
  2875
    "Created: / 12-08-2013 / 12:14:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2876
! !
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  2877
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2878
!ListModelView::TableRenderer methodsFor:'private accessing'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2879
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2880
columnAlignmentAt:aColNr
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2881
    ^ (columnDescriptors at:aColNr) alignment
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2882
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2883
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2884
defaultColumnWidthAt:aColIndex
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2885
    ^ (columnDescriptors at:aColIndex) defaultColumnWidth
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2886
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2887
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2888
showVerticalSplitbarAt:aColIndex
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2889
    aColIndex > 1 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2890
	^ (columnDescriptors at:(aColIndex - 1)) showVerticalSplitbar
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2891
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2892
    ^ true
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2893
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2894
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2895
!ListModelView::TableRenderer methodsFor:'queries-behavior'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2896
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2897
isDragEnabled
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2898
    "answer true if drag of separators is enabled"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2899
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2900
    ^ attributes at:#isDragEnabled ifAbsent:[ true ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2901
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2902
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2903
isDragEnabled:aBoolean
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2904
    "answer true if drag of separators is enabled"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2905
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2906
    attributes at:#isDragEnabled put:aBoolean.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2907
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2908
    aBoolean ifTrue:[ self addEventHook ]
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  2909
	    ifFalse:[ self removeEventHook ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2910
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2911
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2912
!ListModelView::TableRenderer methodsFor:'queries-dimensions'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2913
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2914
boundingBoxForCellAtXAbsolute:x yAbsolute:y
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2915
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2916
    |xNxt xTrs y0 y1 x0 x1 colInset colNr rowNr numSplitbars|
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2917
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2918
    numSplitbars := xSplitbars size.
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2919
    numSplitbars > 1 ifFalse:[^ nil].
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2920
    colNr := self xAbsoluteToColumnIndex: x. 
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2921
    colNr == 0 ifTrue:[^nil].
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2922
    rowNr := view yAbsoluteToLineNr: y.
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2923
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2924
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2925
    xTrs := view viewOrigin x.
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2926
    xNxt := xSplitbars first - xTrs.
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2927
    colInset := self splitbarInset.
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2928
4199
9e655a8d339f Workaround stc bug, sigh
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4198
diff changeset
  2929
    colNr ~~ 1 ifTrue:[x0 := (xSplitbars at:colNr - 1)] ifFalse:[x0 := 0].       
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2930
    x1 := (xSplitbars at:colNr) " - xTrs".
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2931
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2932
    "/ workaround due to drawing the selection frame
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2933
    colNr == numSplitbars ifTrue:[ x1 := x1 + self textStartLeft ].
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2934
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2935
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2936
    y0   := view yAbsoluteOfLine:(rowNr).
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2937
    y1   := view yAbsoluteOfLine:(rowNr + 1).
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2938
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2939
    ^ Rectangle 
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2940
        left: x0 + colInset - (view viewOrigin x)
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2941
        top: y0 - (view viewOrigin y)
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2942
        width: x1 - x0 - colInset - colInset
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2943
        height: y1 - y0 - 1 "/Separator line"
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2944
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2945
    "Created: / 17-04-2013 / 16:28:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2946
    "Modified: / 18-04-2013 / 10:12:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2947
!
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2948
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2949
boundingBoxForCellAtXVisible:x yVisible:y
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2950
    ^self boundingBoxForCellAtXAbsolute: x + view viewOrigin x yAbsolute: y + view viewOrigin y
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2951
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  2952
    "Created: / 18-04-2013 / 10:15:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4198
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2953
!
c787bd3fe1fd class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4197
diff changeset
  2954
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2955
heightFor:anItem
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2956
    "returns the height of an item on the view
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2957
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2958
    |h|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2959
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2960
    h := (anItem heightOn:view) max:minimumRequiredColumnHeight.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2961
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2962
    "/ add some space for the horizontal separator
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2963
    h := h + self splitbarInset.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2964
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2965
    h odd ifTrue:[ ^ h + 1 ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2966
    ^ h
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2967
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2968
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2969
maxItemWidthOrNil
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2970
    "returns the maximum item width for drawing; the
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2971
     offset to the first splitbar minus an inset.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2972
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2973
    ^ xSplitbars first - self splitbarInset.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2974
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2975
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2976
widthFor:anItem
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2977
    "returns the width of an item on the view including the columns
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2978
     but extracting the hierarchical tree inset.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2979
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2980
    |xStart xStop xDiff inset|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2981
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2982
    self showItemInAdditionToColumns ifFalse:[ ^ 0 ].
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2983
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2984
    xStart := view xAbsoluteOfItem:anItem.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2985
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2986
    hasFixedItemWidth ifFalse:[
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2987
        inset := self splitbarInset.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2988
        xStop := (anItem widthOn:view) + xStart + inset + inset.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2989
        xDiff := xStop - xSplitbars first.
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2990
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2991
        xDiff > 0 ifTrue:[
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2992
            xDiff := xDiff + 10.        "/ add more to have less computation
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2993
            xSplitbars := xSplitbars collect:[:xSep| xSep + xDiff ].
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2994
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2995
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2996
    ^ xSplitbars last - xStart
4207
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2997
a7f50b5be37c Added support for drawing only columns, not the item itself (implicit first-column)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4205
diff changeset
  2998
    "Modified: / 24-04-2013 / 13:56:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  2999
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3000
3723
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3001
widthOfColumn:aColumn
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3002
    "answer the width of a column or nil"
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3003
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3004
    |index x0 x1|
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3005
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3006
    index := columnDescriptors identityIndexOf:aColumn.
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3007
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3008
    index > 0 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3009
	(     (x0 := xSplitbars at:index       ifAbsent:nil) notNil
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3010
	 and:[(x1 := xSplitbars at:(index + 1) ifAbsent:nil) notNil])
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3011
	ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3012
	    ^ (x1 - x0 - (2 * (self splitbarInset))) max:0
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3013
	].
3723
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3014
    ].
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3015
    ^ nil
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3016
!
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3017
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3018
widthOfItemColumn
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3019
    "answer the current width of the column which holds the hierarchical
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3020
     item label."
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3021
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3022
    ^ xSplitbars at:1.
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3023
!
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3024
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3025
widthOfWidestLineBetween:firstLine and:lastLine
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3026
    "returns the width of the longest line in pixels in a range
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3027
     - used to optimize scrolling, by limiting the scrolled area;
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3028
       not for scrollbar or other width related stuff which should be exact."
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3029
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3030
    |item|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3031
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3032
    hasFixedItemWidth ifFalse:[
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3033
        firstLine to:lastLine do:[:i|
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3034
            item := view at:i ifAbsent:nil.
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3035
            item notNil ifTrue:[self widthFor:item].
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3036
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3037
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3038
    ^ xSplitbars last
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3039
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3040
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3041
xAbsoluteOfSplitbarAt:anIndex
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3042
    "returns the physical x of the splitbar at an index
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3043
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3044
    ^ xSplitbars at:anIndex
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3045
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3046
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3047
xAbsoluteToColumnIndex:absX
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3048
    "returns the column index for position x or 0 if not detected"
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3049
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3050
    |nextX|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3051
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3052
    nextX := nil.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3053
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3054
    "/ must walk reverse because a column could have a zero width
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3055
    xSplitbars keysAndValuesReverseDo:[:index :x|
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3056
        nextX notNil ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3057
            x <= absX ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3058
                nextX >= absX ifTrue:[^ index + 1].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3059
            ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3060
        ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3061
        nextX := x.
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3062
    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3063
    nextX notNil ifTrue:[
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3064
        nextX >= absX ifTrue:[^ 1].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3065
    ].
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3066
    ^ 0
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3067
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3068
    "Created: / 16-06-2010 / 16:25:33 / cg"
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3069
!
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3070
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3071
xAbsoluteToSplitbar:absX
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3072
    "returns the splitbar index at the position x or 0 if not detected"
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3073
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3074
    |minX maxX|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3075
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3076
    minX  := absX - 2.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3077
    maxX  := absX + 2.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3078
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3079
    "/ must walk reverse because a column could have a zero width
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3080
    xSplitbars keysAndValuesReverseDo:[:index :x|
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3081
        (x between:minX and:maxX) ifTrue:[^ index].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3082
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3083
    ^ 0
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3084
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3085
    "Modified: / 16-06-2010 / 16:23:12 / cg"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3086
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3087
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3088
xVisibleOfLastSplitbar
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3089
    "answer the visible x position of the last splitBar"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3090
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3091
    ^ self xVisibleOfSplitbarAt:(xSplitbars size).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3092
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3093
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3094
xVisibleOfSplitbarAt:anIndex
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3095
    "returns the visible x of the splitbar at an index
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3096
    "
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3097
    |x|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3098
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3099
    x := xSplitbars at:anIndex.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3100
    ^ x - (view viewOrigin x)
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3101
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3102
4201
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3103
xVisibleToColumnIndex:relX
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3104
    "returns the column index for visible position x or 0 if not detected"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3105
    ^ self xAbsoluteToColumnIndex: relX + view viewOrigin x
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3106
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3107
    "Created: / 18-04-2013 / 10:15:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3108
!
916929769f2f Added more helper methods to query cell bounding box and position
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4199
diff changeset
  3109
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3110
xVisibleToSplitbar:visX
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3111
    "returns the splitbar index at the position x or 0 if not detected"
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3112
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3113
    ^ self xAbsoluteToSplitbar:(visX + view viewOrigin x).
3909
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3114
2c7ef0998665 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3894
diff changeset
  3115
    "Modified: / 16-06-2010 / 16:22:56 / cg"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3116
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3117
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3118
!ListModelView::TableRenderer::ColumnDescriptor class methodsFor:'instance creation'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3119
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3120
dataSetColumnSpec:aDataSetColumnSpec
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3121
    ^ self new dataSetColumnSpec:aDataSetColumnSpec
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3122
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3123
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3124
new
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3125
    ClipColumnQuerySignal isNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3126
	ClipColumnQuerySignal := QuerySignal new.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3127
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3128
    ^ self basicNew initialize
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3129
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3130
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3131
!ListModelView::TableRenderer::ColumnDescriptor methodsFor:'accessing'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3132
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3133
alignment
6027
ee9c37e8e045 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 6020
diff changeset
  3134
    "returns the aligmnent of the contents of the underlying cell"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3135
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3136
    |alignment|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3137
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3138
    alignment := dataSetColumnSpec columnAlignment.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3139
    ^ alignment ? #left
6027
ee9c37e8e045 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 6020
diff changeset
  3140
ee9c37e8e045 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 6020
diff changeset
  3141
    "Modified (comment): / 05-03-2019 / 23:18:46 / Claus Gittinger"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3142
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3143
3723
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3144
dataSetColumnSpec
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3145
    ^ dataSetColumnSpec
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3146
!
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3147
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3148
dataSetColumnSpec:aDataSetColumnSpec
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3149
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3150
    aDataSetColumnSpec isSequenceable ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3151
	dataSetColumnSpec := DataSetColumnSpec decodeFromLiteralArray:aDataSetColumnSpec.
3723
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3152
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3153
	dataSetColumnSpec := aDataSetColumnSpec.
3723
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3154
    ].
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3155
!
e3c5f00861e1 *** empty log message ***
ca
parents: 3722
diff changeset
  3156
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3157
defaultColumnWidth
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3158
    |width|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3159
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3160
    width := (dataSetColumnSpec width ? 0) max:(dataSetColumnSpec minWidth ? 0).
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3161
    width > 0 ifTrue:[^ width ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3162
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3163
    ^ 70
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3164
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3165
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3166
minimumRequiredColumnHeight
4337
b5f21412bcb0 Hack to workaround new symbolic height specifier (which is made default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4323
diff changeset
  3167
b5f21412bcb0 Hack to workaround new symbolic height specifier (which is made default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4323
diff changeset
  3168
    "Kludge because of CG's change...sigh."
b5f21412bcb0 Hack to workaround new symbolic height specifier (which is made default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4323
diff changeset
  3169
    dataSetColumnSpec height isNumber ifFalse:[ ^ 0 ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3170
    ^ dataSetColumnSpec height ? 0
4337
b5f21412bcb0 Hack to workaround new symbolic height specifier (which is made default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4323
diff changeset
  3171
b5f21412bcb0 Hack to workaround new symbolic height specifier (which is made default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4323
diff changeset
  3172
    "Modified: / 23-08-2013 / 17:59:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3173
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3174
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3175
showVerticalSplitbar
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3176
    "answer true if the verical splitbar is shown"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3177
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3178
    ^ dataSetColumnSpec showColSeparator ? true.
4217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3179
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3180
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3181
width
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3182
    "Return 
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3183
      - width in px if the column (if explicit) 
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3184
      - nil if the width should be computed dynamically
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3185
        based on view's width
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3186
    "
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3187
    ^width
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3188
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3189
    "Modified (comment): / 07-05-2013 / 17:56:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3190
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3191
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3192
width:anInteger
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3193
    width := anInteger.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3194
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3195
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3196
widthMin
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3197
    "Return the minimal required width in px."
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3198
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3199
    ^dataSetColumnSpec minWidth
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3200
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3201
    "Created: / 07-05-2013 / 17:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3202
!
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3203
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3204
widthSpec
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3205
    "Return either
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3206
      - width in px as Integer or
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3207
      - relative width as Float"
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3208
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3209
    | w |
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3210
    w := dataSetColumnSpec width.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3211
    w isFloat ifTrue:[ ^ w ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3212
    w := w max: dataSetColumnSpec minWidth.
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3213
    w > 0 ifFalse:[
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3214
        w := 70
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3215
    ].
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3216
    ^w
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3217
806440cdc323 Initial support for flex-width columns for TableRenderer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4207
diff changeset
  3218
    "Created: / 07-05-2013 / 17:58:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3219
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3220
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3221
!ListModelView::TableRenderer::ColumnDescriptor methodsFor:'displaying'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3222
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3223
drawRowAt:aRowNr shownSelected:isShownSelected receiver:aReceiver x:x y:y w:w h:h on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3224
    "display a column for a specific row"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3225
4901
Stefan Vogel <sv@exept.de>
parents: 4895
diff changeset
  3226
    |oldClippingRectangle paint savedPaint label drawSelector |
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3227
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3228
    isShownSelected ifFalse:[
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3229
        "/ draw the background color if required by spec..
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3230
        paint := self extractBackgroundColorFrom:aReceiver rowNr:aRowNr on:aGC.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3231
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3232
        paint notNil ifTrue:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3233
            savedPaint := aGC paint.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3234
            aGC paint:paint.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3235
            "/ splitbarInset - draw from 0 to width of aGC (is clipped)
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3236
            aGC fillRectangleX:0 y:y width:(aGC width) height:h.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3237
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3238
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3239
    w < 5 ifTrue:[ ^ self ].    "/ makes no sense to draw the label
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3240
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3241
    label := self extractColumnFrom:aReceiver rowNr:aRowNr on:aGC.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3242
    label isEmptyOrNil ifTrue:[^ self].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3243
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3244
    (drawSelector := dataSetColumnSpec drawSelector) notNil ifTrue:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3245
        "/ Set clip rect to make sure nobody can draw outside the cell
4901
Stefan Vogel <sv@exept.de>
parents: 4895
diff changeset
  3246
        oldClippingRectangle := aGC clippingRectangleOrNil.
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  3247
        aGC clippingBounds:(Rectangle left:x top:y width:w height:h).
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3248
        drawSelector numArgs == 5 ifTrue:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3249
            aReceiver perform:  drawSelector with: aGC with: x with: y with: w with: h.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3250
        ] ifFalse:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3251
            drawSelector numArgs == 6 ifTrue:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3252
                aReceiver perform:  drawSelector with: aGC with: x with: y with: w with: h with: columnNumber
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3253
            ] ifFalse:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3254
                self error: 'Invalid draw selector'
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3255
            ]
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3256
        ].
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  3257
        aGC clippingBounds:oldClippingRectangle.
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3258
    ].
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3259
4199
9e655a8d339f Workaround stc bug, sigh
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4198
diff changeset
  3260
    drawSelector notNil ifTrue:[ ^ self ].
9e655a8d339f Workaround stc bug, sigh
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4198
diff changeset
  3261
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3262
    ClipColumnQuerySignal handle:[:ex|
4901
Stefan Vogel <sv@exept.de>
parents: 4895
diff changeset
  3263
        oldClippingRectangle isNil ifTrue:[
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  3264
            oldClippingRectangle := aGC clippingBoundsOrNil.
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  3265
            aGC clippingBounds:(Rectangle left:x top:y width:w height:h).
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3266
        ].
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3267
        ex proceedWith:true.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3268
    ] do:[
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3269
        isShownSelected ifFalse:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3270
            paint := self extractForegroundColorFrom:aReceiver rowNr:aRowNr on:aGC.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3271
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3272
            paint notNil ifTrue:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3273
                aGC paint:paint.
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3274
            ] ifFalse:[
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3275
                savedPaint notNil ifTrue:[ aGC paint:savedPaint ].
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3276
            ].
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3277
        ].
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3278
        self drawObject:label x:x y:y w:w h:h on:aGC.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3279
    ].
4901
Stefan Vogel <sv@exept.de>
parents: 4895
diff changeset
  3280
    oldClippingRectangle notNil ifTrue:[
5406
292ed7b88598 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
  3281
        aGC clippingBounds:oldClippingRectangle.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3282
    ].
4197
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3283
a3688c9c86fe Added support for custom cell rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4168
diff changeset
  3284
    "Modified: / 17-04-2013 / 13:05:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3285
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3286
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3287
!ListModelView::TableRenderer::ColumnDescriptor methodsFor:'extract values'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3288
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3289
extractBackgroundColorFrom:aReceiver rowNr:aRowNr on:aView
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3290
    |color selector|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3291
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3292
    aReceiver notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3293
	selector := dataSetColumnSpec backgroundSelector.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3294
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3295
	selector notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3296
	    color := aReceiver perform:selector withOptionalArgument:columnNumber and:aRowNr and:aView.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3297
	    color notNil ifTrue:[ ^ color ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3298
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3299
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3300
    ^ dataSetColumnSpec backgroundColor.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3301
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3302
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3303
extractColumnFrom:aReceiver rowNr:aRowNr on:aView
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3304
    |selector|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3305
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3306
    aReceiver notNil ifTrue:[
4205
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3307
        selector := dataSetColumnSpec printSelector ? dataSetColumnSpec readSelector.
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3308
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3309
        selector notNil ifTrue:[
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3310
            ^ aReceiver perform:selector withOptionalArgument:columnNumber and:aRowNr and:aView
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3311
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3312
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3313
    ^ nil
4205
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3314
6c0e13fa3eb7 class: ListModelView
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4204
diff changeset
  3315
    "Modified: / 22-04-2013 / 14:04:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3316
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3317
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3318
extractForegroundColorFrom:aReceiver rowNr:aRowNr on:aView
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3319
    |color selector|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3320
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3321
    aReceiver notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3322
	selector := dataSetColumnSpec foregroundSelector.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3323
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3324
	selector notNil ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3325
	    color := aReceiver perform:selector withOptionalArgument:columnNumber and:aRowNr and:aView.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3326
	    color notNil ifTrue:[ ^ color ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3327
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3328
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3329
    ^ dataSetColumnSpec foregroundColor.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3330
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3331
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3332
!ListModelView::TableRenderer::ColumnDescriptor methodsFor:'instance creation'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3333
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3334
columnNumber:aNumber
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3335
    columnNumber := aNumber.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3336
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3337
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3338
!ListModelView::TableRenderer::ColumnDescriptor methodsFor:'private displaying'!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3339
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3340
alignAndDisplay:anObject x:x y:y w:w on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3341
    "display an object on aGC; care for alignment"
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3342
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3343
    |x0 width align|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3344
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3345
    x0    := x.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3346
    align := self alignment.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3347
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3348
    align ~~ #left ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3349
	width := anObject widthOn:aGC.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3350
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3351
	width < w ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3352
	    align == #right ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3353
		x0 := x0 + w - width
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3354
	    ] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3355
		x0 := x0 + ((w - width) // 2)
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3356
	    ].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3357
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3358
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3359
    anObject displayOn:aGC x:x0 y:y.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3360
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3361
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3362
displayImage:anImage x:x y:y w:w h:h on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3363
    "display an image on aGC; answer the height used...."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3364
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3365
    |height|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3366
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3367
    height := anImage heightOn:aGC.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3368
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3369
    height > h ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3370
	(self queryForClipColumnWithAvailableHeight:h) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3371
	    ^ height
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3372
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3373
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3374
    self alignAndDisplay:anImage x:x y:y w:w on:aGC.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3375
    ^ height
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3376
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3377
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3378
displayLabelAndIcon:aLabelAndIcon x:x y:y w:w h:h on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3379
    "display an image on aGC; answer the height used...."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3380
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3381
    |height|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3382
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3383
    height := aLabelAndIcon heightOn:aGC.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3384
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3385
    height > h ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3386
	(self queryForClipColumnWithAvailableHeight:h) ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3387
	    ^ height
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3388
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3389
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3390
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3391
    self alignAndDisplay:aLabelAndIcon x:x y:(y + aGC font ascent) w:w on:aGC.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3392
    ^ height
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3393
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3394
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3395
displayString:aString x:x y:y w:w h:h on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3396
    "display a string on aGC; answer the height used...."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3397
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3398
    |shortWidth font shortedLabel fontHeight|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3399
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3400
    font       := aGC font.
3719
2467d35b9a6c *** empty log message ***
ca
parents: 3717
diff changeset
  3401
    fontHeight := font height.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3402
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3403
    aString isEmptyOrNil ifTrue:[ ^ fontHeight ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3404
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3405
    (self queryForClipColumnWithAvailableHeight:h) ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3406
	^ fontHeight
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3407
    ].
3719
2467d35b9a6c *** empty log message ***
ca
parents: 3717
diff changeset
  3408
    dataSetColumnSpec longStringCompression ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3409
	shortWidth := font widthOf:aString.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3410
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3411
	shortWidth <= w ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3412
	    shortedLabel := aString.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3413
	] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3414
	    |dottedString dottedWidth index|
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3415
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3416
	    dottedString := '...'.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3417
	    dottedWidth  := font widthOf:dottedString.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3418
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3419
	    w < dottedWidth ifTrue:[ ^ fontHeight ].   "/ give up
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3420
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3421
	    index := aString size // 2.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3422
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3423
	    [   index := index - 1.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3424
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3425
		index > 0 ifTrue:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3426
		    shortedLabel := (aString copyFirst:index), '...', (aString copyLast:index).
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3427
		    shortWidth   := font widthOf:shortedLabel.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3428
		] ifFalse:[
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3429
		    shortedLabel := dottedString.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3430
		    shortWidth   := dottedWidth.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3431
		].
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3432
		shortWidth > w
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3433
	    ] whileTrue.
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3434
	].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3435
    ] ifFalse:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3436
	shortedLabel := aString
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3437
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3438
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3439
    shortedLabel notNil ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3440
	self alignAndDisplay:shortedLabel x:x y:(y + aGC font ascent) w:w on:aGC.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3441
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3442
    ^ fontHeight.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3443
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3444
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3445
drawObject:anObject x:x y:y w:w h:h on:aGC
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3446
    "display any object (sequence of objects) on aGC; answer the height used...."
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3447
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3448
    |totalHeight usedHeight|
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3449
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3450
    h < 4 ifTrue:[ ^ h ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3451
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3452
    anObject isEmptyOrNil ifTrue:[ ^ 2 ]. "/ nothing to draw; add 2 pixels
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3453
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3454
    anObject isImage ifTrue:[
5440
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3455
        ^ self displayImage:anObject x:x y:y w:w h:h on:aGC.
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3456
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3457
    anObject isString ifTrue:[
5440
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3458
        ^ self displayString:anObject x:x y:y w:w h:h on:aGC.
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3459
    ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3460
    anObject isSequenceable ifFalse:[
5440
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3461
        "/ not yet handled....
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3462
        anObject isLabelAndIcon ifTrue:[
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3463
            ^ self displayLabelAndIcon:anObject x:x y:y w:w h:h on:aGC
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3464
        ].
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3465
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3466
        ^ self displayString:(anObject printString) x:x y:y w:w h:h on:aGC
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3467
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3468
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3469
    totalHeight := 0.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3470
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3471
    anObject do:[:aSubObj|
5440
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3472
        totalHeight < h ifTrue:[
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3473
            usedHeight := self
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3474
                    drawObject:aSubObj
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3475
                    x:x
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3476
                    y:(y + totalHeight)
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3477
                    w:w
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3478
                    h:(h - totalHeight)
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3479
                    on:aGC.
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3480
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3481
            totalHeight := totalHeight + usedHeight.
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3482
        ].
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3483
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3484
    ^ (h - totalHeight)
5440
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3485
2630eb3cb7f3 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5423
diff changeset
  3486
    "Modified: / 04-02-2017 / 22:11:21 / cg"
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3487
!
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3488
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3489
queryForClipColumnWithAvailableHeight:anAvailableHeight
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3490
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3491
    anAvailableHeight > 8 ifTrue:[
3728
8858b3571313 oops: licenceBox dependency was missing;
sr
parents: 3723
diff changeset
  3492
	^ (ClipColumnQuerySignal query) == true
3717
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3493
    ].
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3494
    ^ false.
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3495
! !
40bfb28c04f8 prepared for table rendering
ca
parents: 3715
diff changeset
  3496
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3497
!ListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3498
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3499
version
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3500
    ^ '$Header$'
3891
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  3501
!
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  3502
0cce5a3615ee comment/format in: #initialize
fm
parents: 3728
diff changeset
  3503
version_CVS
4858
5ec7fb478874 #BUGFIX
Claus Gittinger <cg@exept.de>
parents: 4752
diff changeset
  3504
    ^ '$Header$'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3505
! !
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
  3506
4168
e204a2320df0 class: ListModelView
Claus Gittinger <cg@exept.de>
parents: 3974
diff changeset
  3507
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3508
ListModelView initialize!