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