ListModelView.st
author Claus Gittinger <cg@exept.de>
Thu, 06 Oct 2005 12:58:18 +0200
changeset 2852 c5651fcf9770
parent 2745 5986c83276b1
child 2866 01d609cfb3d9
permissions -rw-r--r--
change and update: MUST update everything if no detail information is given.
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
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
     3
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     4
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     5
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     6
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     8
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     9
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    10
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    11
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    12
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
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
View subclass:#ListModelView
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    17
	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
    18
		fgColor bgColor lineSpacing widthOfContents computeWidthInRange
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    19
		startOfLinesY autoScroll autoScrollBlock scrollWhenUpdating
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
    20
		hasConstantHeight constantHeight previousExtent renderer'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	classVariableNames:'DefaultForegroundColor DefaultBackgroundColor DefaultShadowColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
		DefaultLightColor StopRedrawSignal'
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	poolDictionaries:''
1430
ae9e48cc7b9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1425
diff changeset
    24
	category:'Views-Lists'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    27
Object subclass:#Renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    28
	instanceVariableNames:'view'
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    29
	classVariableNames:''
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    30
	poolDictionaries:''
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    31
	privateIn:ListModelView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    32
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
    33
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
!ListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    36
copyright
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    37
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    38
 COPYRIGHT (c) 1999 by eXept Software AG
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
    39
	      All Rights Reserved
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    40
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    41
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    42
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    44
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    45
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    46
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    47
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    48
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    49
!
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    50
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
documentation
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
"
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    53
    This widget is a new improved revision of the good-old ListView.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    54
    In contrast to ListView, this one reacts on changes of the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    55
    underlying model and performs optimized redraws.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    56
    It requires a List (or alike) as model.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    57
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    This class can only passively display collections of elements.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    The class doesn't keep its own list, it works directly on
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    the model( List or HierarchicalList ).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    Each list item is obligated to provide 3 services:
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    63
        - heightOn:aGC
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    64
        - widthOn:aGC
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    65
        - displayOn:aGC x:x y:y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    [Instance variables:]
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    68
        list                   <List-Model>     List or HierarchicalList ...
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    69
        listHolder             <Model>          Model, which keeps a List
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    70
        textStartLeft          <Number>         left inset of text
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    71
        viewOrigin             <Point>          the current origin
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    72
        enabled                <Boolean>        widget is enabled/disabeled
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    73
        fgColor                <Color>          color to draw characters
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    74
        bgColor                <Color>          the background
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    75
        lineSpacing            <Number>         pixels between lines
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    76
        widthOfContents        <Number>         cached width of widest line
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    77
        computeWidthInRange    <Point>          used for recompute width of contents
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    78
        startOfLinesY          <Collection>     keeps all the absolute Y-start positions
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    79
                                                for each line in the list. The first
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    80
                                                entry into the list is the top Y inset.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    81
        supportsDisplayInRange <Boolean>        set to true if the list elements
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    82
                                                supports the service:
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    83
                                                    #displayOn:x:y:h:
1535
872422bc0e81 support frames (views) within the list
Claus Gittinger <cg@exept.de>
parents: 1534
diff changeset
    84
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    85
        hasConstantHeight      <Boolean>        true, than each line has the same height
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
    86
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    87
        constantHeight         <SmallInteger>   hasConstantHeight is turned on, this
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    88
                                                is the used line height
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
    89
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    [author:]
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    91
        Claus Atzkern
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    [see also:]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    95
        SelectionInListModelView
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    96
        HierarchicalListView
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    97
        List
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
    98
        HierarchicalList
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
examples
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
"
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   104
									[exBegin]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    |top list view up index|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    list := List new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    top  := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    view := ScrollableView for:ListModelView miniScroller:true
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   111
			origin:0.0@0.0 corner:1.0@1.0 in:top.
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   112
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    view list:list.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    top  openAndWait.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    up := true.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    [top shown] whileTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   118
	Delay waitForSeconds:0.2.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   120
	up ifTrue:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   121
	    index := 1 + (list size).
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   122
	    list add:('element: ', index printString).
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   123
	    up := index < 20
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   124
	] ifFalse:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   125
	    list removeIndex:1.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   126
	    up := list isEmpty.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   127
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    ].
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   129
									[exEnd]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!ListModelView class methodsFor:'initialization'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
initialize
1409
e46f8d30a9c9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   138
    "setup the signals
e46f8d30a9c9 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   139
    "
2552
7f6a07978018 notifications are proceedable
Claus Gittinger <cg@exept.de>
parents: 2551
diff changeset
   140
    StopRedrawSignal := Notification newSignalMayProceed:true.
2551
84b5eef43b23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2548
diff changeset
   141
    StopRedrawSignal nameClass:self message:#stopRedrawSignal.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
!ListModelView class methodsFor:'Signal constants'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
stopRedrawSignal
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    ^ StopRedrawSignal
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
!ListModelView class methodsFor:'defaults'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   152
defaultRenderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   153
    ^ Renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   154
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   155
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    "extract values from the styleSheet and cache them in class variables"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    <resource: #style   (
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   160
			#'text.backgroundColor'  #'text.foregroundColor'
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   161
			#'selection.shadowColor' #'selection.lightColor'
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   162
			#'text.font'
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   163
			)>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    DefaultForegroundColor         := StyleSheet colorAt:'text.foregroundColor' default:Black.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    DefaultBackgroundColor         := StyleSheet colorAt:'text.backgroundColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    DefaultShadowColor             := StyleSheet colorAt:'selection.shadowColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    DefaultLightColor              := StyleSheet colorAt:'selection.lightColor'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    DefaultFont                    := StyleSheet  fontAt:'text.font'.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
     self updateStyleCache
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!ListModelView methodsFor:'accessing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "get the list of items
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    ^ list
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
list:aList
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    "set the list of items
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    "
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   191
    |negatedOrg|
1443
c9ef29f36c29 bug fix:
Claus Gittinger <cg@exept.de>
parents: 1431
diff changeset
   192
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
   193
    renderer listWillChange.
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
   194
1452
Claus Gittinger <cg@exept.de>
parents: 1451
diff changeset
   195
    list ~~ aList ifTrue:[
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   196
        list removeDependent:self.
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   197
        list := aList.
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   198
        list isNil ifTrue:[list := self newDefaultList ].
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   199
        list addDependent:self
1452
Claus Gittinger <cg@exept.de>
parents: 1451
diff changeset
   200
    ].
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   201
    preferredExtent := nil.
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   202
    widthOfContents := nil.
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   203
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   204
    realized ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   205
        self recomputeHeightOfContents.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   206
        scrollWhenUpdating == #beginOfText ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   207
            viewOrigin = (0@0) ifFalse:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   208
                self originWillChange.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   209
                negatedOrg := viewOrigin negated.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   210
                viewOrigin := (0@0).
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   211
                self originChanged:negatedOrg.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   212
            ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   213
        ] ifFalse:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   214
            scrollWhenUpdating == #endOfText ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   215
                self scrollTo:(0 @ self heightOfContents - self innerHeight) redraw:false
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   216
            ]
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   217
        ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   218
        self invalidate.
1422
98c0e3978fcf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1417
diff changeset
   219
    ].
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   220
    self contentsChanged
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   221
!
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   222
2605
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   223
renderer
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   224
    "returns the used renderer
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   225
    "
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   226
    ^ renderer
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   227
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   228
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   229
renderer:aRenderer
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   230
    "change the used renderer
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   231
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   232
    aRenderer isNil ifTrue:[^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   233
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   234
    renderer == aRenderer ifTrue:[^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   235
    renderer notNil ifTrue:[renderer release].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   236
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   237
    renderer := aRenderer.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   238
    renderer isBehavior ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   239
        renderer := renderer basicNew initialize.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   240
    ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   241
    renderer forView:self.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   244
!ListModelView methodsFor:'accessing-behavior'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   246
autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   247
    "returns true if auto scrolling is enabled
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   248
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   249
    ^ autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   250
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   251
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   252
autoScroll:aBool
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   253
    "returns true if auto scrolling is enabled
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   254
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   255
    autoScroll := aBool ? true.
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   256
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
   257
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
   "returns the enabled state
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
   "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
   ^ enabled
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
enabled:aBoolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
   "set the enabled state
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
   "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
   enabled := aBoolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   272
!
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   273
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   274
hasConstantHeight
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   275
    "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
   276
     Optimizes scroll and redraw operations
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   277
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   278
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   279
    ^ hasConstantHeight
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   280
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   281
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   282
hasConstantHeight:aBool
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   283
    "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
   284
     Optimizes scrolling and redraw.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   285
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   286
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   287
    aBool == hasConstantHeight ifTrue:[
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   288
        ^ self
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   289
    ].
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   290
    constantHeight    := nil.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   291
    hasConstantHeight := aBool.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   292
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   293
    self lostSynchronisation.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   294
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
   295
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   296
scrollWhenUpdating:aSymbolOrNil
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   297
    "define how to scroll, when I get a new text 
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   298
     (via the model or the #contents/#list)
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   299
     Allowed arguments are:
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   300
	#keep / nil     -> no change
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   301
	#endOfText      -> scroll to the end
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   302
	#beginOfText    -> scroll to the top
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   303
     The default is #beginOfText.
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   304
     This may be useful for fields which get new values assigned from
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   305
     the program (i.e. not from the user)
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   306
    "
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   307
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   308
    scrollWhenUpdating := aSymbolOrNil
1742
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   309
28c2834d7c3c add #scrollWhenUpdating: - but not yet supported
ca
parents: 1736
diff changeset
   310
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   313
!ListModelView methodsFor:'accessing-items'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
at:anIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
    "return the list element at an index
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
    ^ list at:anIndex
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
at:anIndex ifAbsent:exceptionBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
    "return the list element at an index if valid. 
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
     If the index is invalid, return the result of evaluating 
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
     the exceptionblock.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   326
    ^ list at:anIndex ifAbsent:exceptionBlock
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   327
!
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   328
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   329
findLast:aOneArgBlock
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   330
    "find the last list entry, for which evaluation of the argument, aOneArgBlock
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   331
     returns true; return its index or 0 if none detected.
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   332
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   333
    ^ list findLast:aOneArgBlock
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
identityIndexOf:anElement
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    "returns the index of an element or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   339
    ^ list identityIndexOf:anElement
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   340
!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   342
last
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   343
    "returns the last list entry
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   344
    "
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   345
    ^ list last
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   348
!ListModelView methodsFor:'accessing-look'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
backgroundColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
    "get the background color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    ^ bgColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
font:aFont
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    "set a new font
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    |oldWidth oldHeight|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
    (aFont isNil or:[aFont = font]) ifFalse:[
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   364
        oldWidth  := font width.
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   365
        oldHeight := font height.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   367
        super font:aFont.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   369
        (font widthOn:device) ~~ oldWidth ifTrue:[       "/ force a recomputation
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   370
            preferredExtent := nil.
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   371
            widthOfContents := nil.
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   372
        ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   373
        realized ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   374
            oldHeight ~~ (font heightOn:device) ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   375
                self recomputeHeightOfContents.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   376
            ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   377
            self invalidate
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   378
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
foregroundColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
    "get the foreground color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    ^ fgColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
foregroundColor:aColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
    "set the foreground color
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    (aColor notNil and:[fgColor ~~ aColor]) ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   393
	self realized ifTrue:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   394
	    fgColor := aColor onDevice:device.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   395
	    self invalidate
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   396
	] ifFalse:[
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   397
	    fgColor := aColor
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   398
	]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
    ]
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   400
!
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   401
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   402
lineSpacing
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   403
    "get the lineSpacing - thats an additional number of pixels,
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   404
     by which lines are vertically separated.
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   405
    "
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   406
    ^ lineSpacing
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   407
!
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   408
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   409
lineSpacing:aNumber
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   410
    "set the lineSpacing - thats an additional number of pixels,
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   411
     by which lines are vertically separated.
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   412
    "
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   413
    lineSpacing ~= aNumber ifTrue:[
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
   414
        lineSpacing := aNumber.
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   415
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   416
        realized ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   417
            self recomputeHeightOfContents.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   418
            self invalidate
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   419
        ]
1945
694ea5d18b60 add access methods for lineSpacing
martin
parents: 1845
diff changeset
   420
    ]
2605
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   421
!
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   422
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   423
viewBackground:aColor
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   424
    "set the background color
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   425
    "
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   426
    (aColor notNil and:[bgColor ~~ aColor]) ifTrue:[
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   427
        bgColor := aColor.
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   428
        super viewBackground:bgColor.
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   429
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   430
        self realized ifTrue:[
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   431
            bgColor := bgColor onDevice:device.
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   432
            self invalidate
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   433
        ].
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   434
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
   437
!ListModelView methodsFor:'accessing-mvc'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    "returns the listHolder or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
    ^ listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
listHolder:aListHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
    "set a new listHolder
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
    listHolder removeDependent:self.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
    (listHolder := aListHolder) notNil ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
   451
	listHolder addDependent:self.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    self list:(listHolder value).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
!ListModelView methodsFor:'change & update'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
lineChangedAt:aLnNr with:arg
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   459
    "line changed at position; check whether line height changed"
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   460
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   461
    |cache
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
     oldHeight "{ Class:SmallInteger }"
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   463
     deltaHeight "{ Class:SmallInteger }" |
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   464
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   465
    (arg == #icon or:[arg == #hierarchy]) ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   466
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
    ].
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   468
    hasConstantHeight ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   469
        self invalidateLineAt:aLnNr.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   470
        ^ self
2264
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   471
    ].
0241177f2a2b *** empty log message ***
ca
parents: 2261
diff changeset
   472
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
    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
   474
    deltaHeight := (self heightOfLineAt:aLnNr) - oldHeight.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   476
    deltaHeight == 0 ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   477
        self invalidateLineAt:aLnNr.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   478
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
    ].
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   480
    cache := self startOfLinesY.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
2548
2d96d09497e9 Fix funny names
Stefan Vogel <sv@exept.de>
parents: 2501
diff changeset
   482
    aLnNr + 1 to:cache size do:[:i|
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   483
        cache at:i put:((cache at:i) + deltaHeight)
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
    self invalidate.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
listChangedInsert:start nItems:nLines
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
    "list changed; items are added
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
    "
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   491
    |newLines
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
     run    "{ Class: SmallInteger }"
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   493
     newSz  "{ Class: SmallInteger }"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
     cpyHg  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
     absY0  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
     absY1  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
     visY0  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
     visY1  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
     orgY   "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
     dltY   "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
     maxHg  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
   |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
    nLines == 0 ifTrue:[^ self ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
    self listSizeChanged:start nLines:nLines.
2569
bfe9e33b545e not ifTrue -> ifFalse
Claus Gittinger <cg@exept.de>
parents: 2568
diff changeset
   506
    shown ifFalse:[^ self].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   508
    newSz := startOfLinesY size + nLines.
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   509
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   510
    (newSz - 1) ~~ self size ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   511
        "/
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   512
        "/ no longer synchronized
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   513
        "/
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   514
        ^ self lostSynchronisation
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   515
    ].
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   516
    newLines := startOfLinesY copy.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   517
    newLines addAll:(Array new:nLines) beforeIndex:start + 1.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   518
    absY0 := newLines at:start.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
    absY1 := absY0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    run   := start.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
    nLines timesRepeat:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   523
        absY1 := absY1 + (self heightOfLineAt:run).
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   524
        run   := run + 1.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   525
        newLines at:run put:absY1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
    dltY := absY1 - absY0.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   528
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   529
    run + 1 to:newSz do:[:i||v|
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   530
        newLines at:i put:((newLines at:i) + dltY)
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    ].
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   532
    startOfLinesY := newLines.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
    orgY  := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
    absY1 := absY0 + dltY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
    visY0 := absY0 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
    visY1 := absY1 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    maxHg := height - margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
    absY0 < orgY ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   541
        self originWillChange.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   542
        viewOrigin y:(dltY + orgY).
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   543
        self originChanged:(0 @ dltY).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
    ].
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   545
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
    (visY0 >= maxHg or:[visY1 <= margin]) ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   547
        ^ self contentsChanged
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
    visY0 := visY0 max:margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
    visY1 := visY1 min:maxHg.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   552
    self hasDamage ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   553
        self invalidate:(Rectangle left:0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   554
                                    top:visY0 
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   555
                                  width:width 
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   556
                                 height:height - visY0).
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   557
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   558
        ^ self contentsChanged.
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   559
    ].
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   560
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   561
    (start == self size or:[(cpyHg := maxHg - visY1) < 20]) ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   562
        visY1 := maxHg
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
    ] ifFalse:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   564
        self catchExpose.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   566
        self copyFrom:self x:0 y:visY0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   567
                         toX:0 y:visY1
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   568
                       width:width height:cpyHg async:true.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   570
        self waitForExpose
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   573
    self invalidateX:margin
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   574
                   y:visY0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   575
               width:width - margin - margin
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   576
              height:(visY1 - visY0).
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   577
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
    self contentsChanged.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   581
listChangedRemove:aStart toIndex:aStop
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
    "list changed; items are removed
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
    "
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   584
    |noRedraw newLines
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
     size  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
     absY0 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
     absY1 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
     visY0 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
     visY1 "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
     orgY  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
     orgX  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
     dltY  "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
     cpyHg "{ Class: SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
     maxHg "{ Class: SmallInteger }"
1444
0b7cd00e2537 check range before delete lines
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   595
     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
   596
     start "{ Class: SmallInteger }"
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   597
     newSz "{ Class: SmallInteger }"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
    |
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   599
    stop  := aStop.
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   600
    start := aStart.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   602
    (size := stop - start + 1) == 0 ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   603
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
    ].
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
   605
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
    self listSizeChanged:start nLines:(size negated).
2569
bfe9e33b545e not ifTrue -> ifFalse
Claus Gittinger <cg@exept.de>
parents: 2568
diff changeset
   607
    shown ifFalse:[^ self].
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   608
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   609
    newSz := startOfLinesY size - size.
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   610
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   611
    (newSz - 1) ~~ self size ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   612
        "/
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   613
        "/ no longer synchrounous
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   614
        "/
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   615
        ^ self lostSynchronisation
1451
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   616
    ].
85e0df1771e5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1446
diff changeset
   617
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
    absY0 := self yAbsoluteOfLine:start.
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   619
    absY1 := self yAbsoluteOfLine:stop + 1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
    dltY  := absY1 - absY0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   622
    newLines := startOfLinesY copy.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   623
    newLines removeFromIndex:(start + 1) toIndex:(stop + 1).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   625
    (start + 1) to:newSz do:[:i|
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   626
        absY0 := newLines at:i.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   627
        newLines at:i put:(absY0 - dltY).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
    ].
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   629
    startOfLinesY := newLines.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
    orgY  := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
    orgX  := viewOrigin x.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
    absY0 := self yAbsoluteOfLine:start.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
    absY1 := absY0 + dltY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
    visY0 := absY0 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
    visY1 := absY1 - orgY.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
    maxHg := height - margin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   640
    (self size == 0 or:[(orgY ~~ 0 and:[self maxViewOriginY == 0])]) ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   641
        (orgX ~~ 0 or:[orgY ~~ 0]) ifTrue:[
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   642
            self originWillChange.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   643
            viewOrigin := 0@0.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   644
            self originChanged:((orgX @ orgY) negated).
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   645
        ].
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   646
        self invalidate.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   647
        ^ self contentsChanged    
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
    visY0 < margin ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   651
        noRedraw := visY1 <= margin.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   652
        noRedraw ifTrue:[dltY := dltY negated] ifFalse:[dltY := visY0].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   654
        self originWillChange.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   655
        viewOrigin y:(dltY + orgY).
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   656
        self originChanged:(0 @ dltY).        
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
    ] ifFalse:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   658
        noRedraw := visY0 >= maxHg
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
    ].
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   660
    visY0 := visY0 max:margin.
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   661
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   662
    self hasDamage ifTrue:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   663
        self invalidate:(Rectangle left:0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   664
                                    top:visY0 
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   665
                                  width:width 
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   666
                                 height:height - visY0).
1773
9dba0f0dda0e invalidate uptoend not all if a damage exists (insert/remove)
ca
parents: 1753
diff changeset
   667
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   668
        noRedraw := true
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   669
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
   671
    noRedraw ifFalse:[
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   672
        cpyHg := maxHg - visY1.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   674
        cpyHg > 20 ifTrue:[
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   675
            self catchExpose.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   676
            self copyFrom:self x:0 y:visY1 toX:0 y:visY0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   677
                    width:width height:cpyHg async:true.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   678
            self waitForExpose.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   679
            visY0 := visY0 + cpyHg.
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   680
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
2385
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   682
        self invalidateX:margin
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   683
                       y:visY0
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   684
                   width:width - margin - margin
8113112e2184 *** empty log message ***
ca
parents: 2384
diff changeset
   685
                  height:(maxHg - visY0).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
    self contentsChanged.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   690
update:what with:aPara from:chgObj
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   691
    "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
   692
     or list holder"
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   693
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   694
    chgObj == self listHolder ifTrue:[
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   695
        self list:chgObj value.
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   696
        ^ self.
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   697
    ].
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   698
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   699
    chgObj == self list ifTrue:[
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   700
        renderer withinUpdateFromListDo:[
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   701
            self updateFromList:what with:aPara.
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   702
        ].
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   703
        ^ self.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   704
    ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   705
2745
5986c83276b1 clean up obfuscated code
Stefan Vogel <sv@exept.de>
parents: 2708
diff changeset
   706
    super update:what with:aPara from:chgObj
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   707
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   708
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   709
updateFromList:what with:aParameter
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   710
    "called if the list changed"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   711
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   712
    |arg1 arg2|
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   713
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   714
    aParameter isCollection ifFalse:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   715
        what == #at:     ifTrue:[self lineChangedAt:aParameter        with:nil.   ^ self].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   716
        what == #insert: ifTrue:[self listChangedInsert:aParameter  nItems:1.     ^ self].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   717
        what == #remove: ifTrue:[self listChangedRemove:aParameter toIndex:aParameter. ^ self].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   718
        self halt.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   719
        self list:(self list).  "/ reload list
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   720
        ^ self.
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   721
    ].
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   722
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   723
    arg1 := aParameter at:1.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   724
    arg2 := aParameter at:2.
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   725
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   726
    (arg1 == 1 and:[arg2 == self size]) ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   727
        self list:(self list).  "/ reload list
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   728
        ^ self
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   729
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   731
    what == #at:               ifTrue:[self lineChangedAt:arg1        with:arg2. ^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   732
    what == #insertCollection: ifTrue:[self listChangedInsert:arg1  nItems:arg2. ^ self].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   733
    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
   734
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   735
    what == #replace: ifTrue:[
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   736
        arg1 to:arg2 do:[:i|self lineChangedAt:i with:nil].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   737
        ^ self
1995
ede7d0221fa0 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1945
diff changeset
   738
    ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   739
    self halt.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   740
    self list:(self list).  "/ reload list
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
!ListModelView methodsFor:'drawing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   745
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
   746
    "draw lines from start to stop.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   747
     clipping and clearing the background is already done
1399
da1eed642569 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1391
diff changeset
   748
    "
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   749
    |item
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   750
     y0 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   751
     y1 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   752
     x0 "{ Class:SmallInteger }"
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   753
    |
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   754
    self paint:fgColor on:bgColor.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   755
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   756
    x0 := textStartLeft - viewOrigin x.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   757
    y1 := y.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   758
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   759
    start to:stop do:[:i|
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   760
        item := self at:i ifAbsent:self.        "/ list changed during draw
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   761
        item == self ifTrue:[^ self].
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   762
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   763
        y0 := y1.
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   764
        y1 := self yVisibleOfLine:(i + 1).
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   765
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   766
        item notNil ifTrue:[
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
   767
            renderer display:item atX:x0 y:y0 lineHeight:(y1 - y0).
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   768
        ]
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   769
    ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   770
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   771
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   772
drawFrom:start to:stop x:xLft y:yTop w:aWidth
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   773
    "draw lines from start to stop. Test whether a new clip
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   774
     must be setup.
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   775
    "
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   776
    |maxX w|
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   777
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   778
    maxX := renderer maxItemWidthOrNil.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   779
    w := aWidth.
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   780
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   781
    maxX notNil ifTrue:[ |clip|
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   782
        maxX := maxX - viewOrigin x.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   783
        maxX > xLft ifFalse:[^ self.].
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   784
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   785
        w := maxX - xLft min:aWidth.
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   786
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   787
        (clip := self clipRect copy) notNil ifTrue:[
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   788
            clip width:w
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   789
        ] ifFalse:[
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   790
            clip := Rectangle left:xLft top:yTop width:w height:(height - yTop - margin).
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   791
        ].
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   792
        self clippingRectangle:clip.
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   793
    ].
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   794
    self drawElementsFrom:start to:stop x:xLft y:yTop w:w.
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   795
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
   796
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   797
invalidateLineAt:aLineNr
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   798
    "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
   799
     input event queue.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   800
    "
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   801
    ^ self invalidateLineAt:aLineNr fromX:0.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   802
!
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   803
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   804
invalidateLineAt:aLineNr fromX:x
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   805
    "add a damage to redraw a line specified by its line number to the
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   806
     input event queue.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   807
    "
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   808
    |y0 "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   809
     y1 "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   810
     yB "{ Class:SmallInteger }"
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   811
     x0 "{ Class:SmallInteger }"
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   812
     xR "{ Class:SmallInteger }"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
    |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   814
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   815
    (shown and:[aLineNr notNil and:[aLineNr > 0]]) ifFalse:[
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   816
        ^ self
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   817
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   818
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   819
    xR := width - margin.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   820
    x0 := x max:margin.
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   821
    x0 < xR ifFalse:[ ^ self].
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   822
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   823
    yB := height - margin.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   824
    y0 := (self yVisibleOfLine:aLineNr) max:margin.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   825
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   826
    y0 < yB ifTrue:[
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   827
        y1 := (self yVisibleOfLine:(aLineNr + 1)) min:yB.
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   828
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   829
        y1 > y0 ifTrue:[
2322
b033ff2263ec add method: #invalidateLineAt:fromX:.
ca
parents: 2304
diff changeset
   830
            self invalidateX:x0 y:y0 width:(xR - x0) height:(y1 - y0) repairNow:false.
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   831
        ]
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   832
    ].
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   833
!
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   834
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   835
redraw
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   836
    "redraw complete view
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   837
    "
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   838
    self redrawX:0 y:0 width:width height:height.
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
   839
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   840
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   841
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   842
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   843
redrawX:x y:y width:w height:h
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   844
    "redraw part of myself immediately, given logical coordinates 
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   845
    "
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   846
    |start stop yAbs yStart|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   847
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   848
    shown ifFalse:[^ self].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   849
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
   850
    (self startOfLinesY size) == (self size + 1) ifFalse:[
2598
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   851
        "oops, recompute the height of the contents (the first time after creation).
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   852
        "
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   853
        self recomputeHeightOfContents.
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   854
2599
4945da23d4e9 oops-forget asking for #size
ca
parents: 2598
diff changeset
   855
        self startOfLinesY size > 1 ifTrue:[
2598
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   856
            "oops, the contents height changed
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   857
            "
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   858
            self invalidate.
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   859
            self contentsChanged.
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   860
            ^ self
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   861
        ].
b0c2d20f4062 recomputation of the contents height during redraw if not yet happen;
ca
parents: 2595
diff changeset
   862
    ].
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   863
    widthOfContents isNil ifTrue:[
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   864
        self preferredExtent
2188
774f66eedaea *** empty log message ***
ca
parents: 2156
diff changeset
   865
    ].
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   866
    yStart := y.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   867
    start  := self yVisibleToLineNr:y.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   868
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   869
    start notNil ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   870
        yAbs := y + h.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   871
        stop := self yVisibleToLineNr:yAbs.
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   872
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   873
        stop isNil ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   874
            stop := self size.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   875
        ] ifFalse:[ |y0|
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   876
            y0 := self startOfLinesY at:stop ifAbsent:nil.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   877
            y0 isNil ifTrue:[^ self].   "/ oops, lines differ (will be changed)
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   878
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   879
            yAbs == y0 ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   880
                stop := (stop - 1) max:start
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   881
            ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   882
        ].
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
   883
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   884
        start > stop ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   885
            start := stop := nil.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   886
        ] ifFalse:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   887
            (renderer validateDrawableItemsFrom:start to:stop) ifFalse:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   888
                self invalidate.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   889
                ^ self.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   890
            ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   891
            yStart := self yVisibleOfLine:start.
2304
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   892
        ].
50c23d061969 must recompute width of contents if line changed
ca
parents: 2302
diff changeset
   893
    ].
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   894
    self paint:bgColor.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   895
    self fillRectangleX:x y:y width:w height:h.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   896
2605
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   897
    StopRedrawSignal handle:[:ex|
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   898
        "/ an item changed its dimension during drawing, draw is aborted
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   899
        self invalidate
3690a334fac1 bug fix: when setting #viewBackground: and computation of automatic scroll to x
ca
parents: 2600
diff changeset
   900
    ] do:[
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   901
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   902
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   903
        start notNil ifTrue:[
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   904
            self drawFrom:start to:stop x:x y:yStart w:w.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   905
        ].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
   906
        renderer 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
   907
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   908
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   909
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   910
!ListModelView methodsFor:'event handling'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   911
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   912
keyPress:aKey x:x y:y
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
   913
    "a key was pressed - handle page-keys here"
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
   914
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   915
    <resource: #keyboard( #PreviousPage #NextPage  #HalfPageUp #HalfPageDown
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   916
                          #BeginOfText  #EndOfText #ScrollUp   #ScrollDown
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   917
                        )>
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   918
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
   919
    |n|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   920
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   921
    self size ~~ 0 ifTrue:[
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   922
        (aKey == #PreviousPage) ifTrue:[^ self pageUp].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   923
        (aKey == #NextPage)     ifTrue:[^ self pageDown].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   924
        (aKey == #HalfPageUp)   ifTrue:[^ self halfPageUp].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   925
        (aKey == #HalfPageDown) ifTrue:[^ self halfPageDown].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   926
        (aKey == #BeginOfText)  ifTrue:[^ self scrollToTop].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   927
        (aKey == #EndOfText)    ifTrue:[^ self scrollToBottom].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   928
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   929
        (aKey == #ScrollUp or:[aKey == #ScrollDown]) ifTrue:[
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
   930
            n := 1 + (self sensor compressKeyPressEventsWithKey:aKey).
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   931
            n := n * self verticalScrollStep.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   932
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   933
            aKey == #ScrollUp ifTrue:[self scrollUp:n]
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   934
                             ifFalse:[self scrollDown:n].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   935
            ^ self
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
   936
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   937
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   938
    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
   939
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
   940
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
   941
sizeChanged:how
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
   942
    previousExtent := self extent.
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
   943
    super sizeChanged:how.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   944
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   945
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   946
!ListModelView methodsFor:'event simulation'!
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   947
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   948
syncronizeEvents
2708
f3efc17bcbce Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 2670
diff changeset
   949
    <resource:#obsolete>
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   950
    self obsoleteMethodWarning:'no longer supported'.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   951
    ^ false
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   952
!
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   953
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   954
syncronizeEvents:aBoolean
2708
f3efc17bcbce Mark obsolete methods
Stefan Vogel <sv@exept.de>
parents: 2670
diff changeset
   955
    <resource:#obsolete>
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
   956
    self obsoleteMethodWarning:'no longer supported'.
1554
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   957
! !
c45cac3c4d31 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1538
diff changeset
   958
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   959
!ListModelView methodsFor:'fetch resources'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   960
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   961
colorOnDevice:aColor
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   962
    "fetch a device colors
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   963
    "
2097
78bfd62fdcbc on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
   964
    ^ aColor notNil ifTrue:[aColor onDevice:device] ifFalse:[nil]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   965
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   966
2488
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   967
imageOnMyDevice:anImage
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   968
    "associate image to device and clear pixel mask
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   969
     returns the new image.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   970
    "
2488
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   971
    |deviceImage|
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   972
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   973
    anImage isNil ifTrue:[^ anImage].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   974
2488
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   975
    deviceImage := anImage onDevice:device.
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   976
    deviceImage isImage ifTrue:[
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   977
        deviceImage clearMaskedPixels.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   978
    ].
2488
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   979
    ^ deviceImage
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   980
"/    |image|
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   981
"/
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   982
"/    (image := anImage) notNil ifTrue:[
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   983
"/        image device ~~ device ifTrue:[
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   984
"/            image := image copy.
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   985
"/        ].
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   986
"/        image := image onDevice:device.
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   987
"/        image := image clearMaskedPixels.
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   988
"/    ].
74c81c1e30d7 imageOnDevice -> imageOnMyDevice
Claus Gittinger <cg@exept.de>
parents: 2482
diff changeset
   989
"/    ^ image
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   990
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   991
1417
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   992
!ListModelView methodsFor:'focus handling'!
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   993
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   994
wantsFocusWithButtonPress
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   995
    "catch the keyboard focus on button click
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   996
    "
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   997
    ^  true
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   998
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
   999
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1000
!
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1001
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1002
wantsFocusWithPointerEnter
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1003
    "views which like to take the keyboard focus
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1004
     when the pointer enters can do so by redefining this
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1005
     to return true"
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1006
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1007
    ^ true
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1008
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1009
! !
3d331ae2d2b6 implements:
Claus Gittinger <cg@exept.de>
parents: 1409
diff changeset
  1010
2501
832cbac295b8 method category rename
Claus Gittinger <cg@exept.de>
parents: 2488
diff changeset
  1011
!ListModelView methodsFor:'initialization & release'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1012
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1013
create
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1014
    "fetch device dependent resources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1015
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1016
    super create.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1017
    self fetchResources.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1018
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1019
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1020
initStyle
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1021
    "setup viewStyle specifics
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1022
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1023
    super initStyle.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1024
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1025
    DefaultBackgroundColor notNil ifTrue:[
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1026
        viewBackground := DefaultBackgroundColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1027
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1028
    lineSpacing   := 0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1029
    textStartLeft := 2.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1030
    textStartTop  := 2.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1031
    fgColor       := DefaultForegroundColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1032
    bgColor       := viewBackground.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1033
    startOfLinesY := OrderedCollection new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1034
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1035
    startOfLinesY add:(textStartTop + margin). "/ top inset of first line
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1036
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1037
    DefaultShadowColor notNil ifTrue:[
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1038
        shadowColor := DefaultShadowColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1039
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1040
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1041
    DefaultLightColor notNil ifTrue:[
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1042
        lightColor := DefaultLightColor
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1043
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1044
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1045
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1046
initialize
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1047
    "setup default attributes
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1048
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1049
    super initialize.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1050
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1051
    viewOrigin         := 0@0.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1052
    bitGravity         := #NorthWest.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1053
    enabled            := true.
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1054
    autoScroll         := true.
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
  1055
    scrollWhenUpdating := #beginOfText.
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1056
    hasConstantHeight  := false.
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1057
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1058
    renderer isNil ifTrue:[
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1059
        renderer := self class defaultRenderer forView:self.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1060
    ].
2600
69bc62444098 create default list during initialize
ca
parents: 2599
diff changeset
  1061
    self list:(self newDefaultList).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1062
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1063
1562
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1064
mapped
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1065
    "recompute list
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1066
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1067
    "/ shown ifFalse:[
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1068
        self recomputeHeightOfContents.
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1069
        self contentsChanged.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1070
    "/ ].
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1071
    renderer mapped.
1562
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1072
    super mapped
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1073
!
342e61e7bc99 recompute height of contents after mapped
ca
parents: 1554
diff changeset
  1074
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1075
recreate
1832
f6e6640e99a3 comment
Claus Gittinger <cg@exept.de>
parents: 1828
diff changeset
  1076
    "sent after a snapin or a migration, reinit for new device"
1828
ea1f39c639f8 comment
Claus Gittinger <cg@exept.de>
parents: 1827
diff changeset
  1077
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1078
    super recreate.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1079
    self fetchResources.
1796
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1080
!
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1081
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1082
reinitialize
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1083
    "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
  1084
    "
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1085
    super reinitialize.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1086
    self recomputeHeightOfContents.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1087
    self contentsChanged.
c9d801c011f7 recompute layout after snapIn (font geometry could be different)
Claus Gittinger <cg@exept.de>
parents: 1773
diff changeset
  1088
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1089
!
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1090
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1091
release
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1092
    "remove dependencies
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1093
    "
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1094
    renderer release.
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1095
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1096
    self listHolder removeDependent:self.
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1097
    self list       removeDependent:self.
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1098
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2147
diff changeset
  1099
    super 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
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1102
!ListModelView methodsFor:'private'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1103
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1104
hasDamage
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1105
    "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
  1106
2482
13acaaf02528 Use SynchronousWindoeSensor if no windowGroup
Stefan Vogel <sv@exept.de>
parents: 2464
diff changeset
  1107
    ^ self sensor hasDamageFor:self
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1108
!
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1109
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1110
startOfLinesY
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1111
    "returns a collection of absolute Y-positions per line. 
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1112
     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
  1113
     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
  1114
     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
  1115
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1116
    ^ startOfLinesY
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1117
!
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1118
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1119
xAbsoluteOfItem:anItem
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1120
    "returns the absolute x of the labeled text
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1121
    "
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1122
    ^ (self xVisibleOfItem:anItem) + viewOrigin x.
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1123
!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1124
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1125
xVisibleOfItem:anItem
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1126
    "returns the visible x of the labeled text
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1127
    "
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1128
    ^ textStartLeft - viewOrigin x
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1129
!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1130
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1131
yAbsoluteOfLine:aLineNr
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1132
    "given a lineNr, return y-coordinate absolute
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1133
    "
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1134
    |y y2 y1 cash|
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
  1135
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1136
    cash := self startOfLinesY.
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
  1137
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1138
    (y := cash at:aLineNr ifAbsent:nil) notNil ifTrue:[
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1139
        ^ y
1446
fb46beba2d0c startOfLines can have nil at end; lookup the first not nil
Claus Gittinger <cg@exept.de>
parents: 1444
diff changeset
  1140
    ].
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1141
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1142
    "/ recompute a y position
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1143
    y1 := cash at:1 ifAbsent:textStartTop.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1144
    y2 := cash at:2 ifAbsent:(textStartTop + 16).
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1145
    ^ aLineNr * (y2 - y1) + y1
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1146
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1147
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1148
yVisibleOfLine:aLineNr
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1149
    "given a lineNr, return y-coordinate in view
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1150
    "
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1151
    ^ (self yAbsoluteOfLine:aLineNr) - viewOrigin y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1152
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1153
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1154
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1155
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1156
yVisibleToLineNr:yVisible
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1157
    "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
  1158
     or nil if beyond of list.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1159
    "
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1160
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1161
    |cache
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1162
     yAbs       "{ Class: SmallInteger}"
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1163
     size       "{ Class: SmallInteger}"
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1164
     ictr       "{ Class: SmallInteger}"
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1165
     yRun       "{ Class: SmallInteger}"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1166
    |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1167
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1168
    yAbs := yVisible + viewOrigin y.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1169
    cache := self startOfLinesY.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1170
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1171
    (size := cache size) < 2 ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1172
        "/ empty list
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1173
        (yAbs between:textStartTop and:textStartTop+16) ifTrue:[^ 1].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1174
        ^ nil
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1175
    ].   
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1176
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1177
    yRun := cache at:size.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1178
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1179
    yAbs >= yRun ifTrue:[
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1180
        yAbs == yRun ifTrue:[ ^ size - 1].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1181
        ^ nil   "/ out of list
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1182
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1183
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1184
    constantHeight notNil ifTrue:[
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1185
        yAbs := yAbs - (cache at:1).
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1186
        yAbs < constantHeight ifTrue:[ ^ 1 ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1187
        ^ yAbs // constantHeight + 1
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1188
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1189
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1190
    ictr := yAbs // (cache at:2).
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1191
    ictr < 1 ifTrue:[ ictr := 1 ]
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1192
            ifFalse:[ ictr := ictr min:size ].
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1193
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1194
    yRun := cache at:ictr.
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1195
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1196
    yRun > yAbs ifTrue:[
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1197
        [(ictr := ictr - 1) > 0 ] whileTrue:[
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1198
            yRun := cache at:ictr.
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1199
            yRun <= yAbs ifTrue:[ ^ ictr ].
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1200
        ].
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1201
        ^ 1
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1202
    ].
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1203
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1204
    [ yRun ~~ yAbs ] whileTrue:[
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1205
        ictr := ictr + 1.
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1206
        yRun := cache at:ictr.
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1207
        yRun > yAbs ifTrue:[ ^ ictr - 1 ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1208
    ].
2301
ce583553d709 use constantHeight for computing #yVisibleToLineNr
ca
parents: 2274
diff changeset
  1209
    ^ ictr
2464
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1210
!
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1211
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1212
yVisibleToRowNr:yVisible
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1213
    "for protocol compatibility with DSVColumnView"
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1214
2fcd6ccdaa7b +yVisibleToRowNr: for protocol compatibility
Claus Gittinger <cg@exept.de>
parents: 2458
diff changeset
  1215
    ^ self yVisibleToLineNr:yVisible
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1216
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1217
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1218
!ListModelView methodsFor:'protocol'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1219
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1220
fetchResources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1221
    "fetch device colors and ..., to avoid reallocation at redraw time;
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1222
     *** called after a create or snapin to fetch all device resources
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1223
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1224
    fgColor    := self colorOnDevice:fgColor.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1225
    bgColor    := self colorOnDevice:bgColor.
2097
78bfd62fdcbc on: -> onDevice:
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  1226
    font       := font onDevice:device.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1227
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1228
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1229
lineHeightFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1230
    "returns the computed line height for an item
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1231
    "
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1232
    ^ lineSpacing + (renderer heightFor:anItem)
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1233
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1234
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1235
listSizeChanged:anIndex nLines:noLines
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1236
    "list size changed; information is stored to recompute the
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1237
     width if required( preferredExtent, horizontal scroller ... ).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1238
     see: widthOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1239
     *** if nLines is negative, lines are removed otherwise added.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1240
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1241
    |start "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1242
     stop  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1243
     size  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1244
    |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1245
    preferredExtent := nil.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1246
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1247
    widthOfContents isNil ifTrue:[      "/ recompute whole list
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1248
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1249
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1250
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1251
    (noLines < 0 or:[(size := self size) <= noLines]) ifTrue:[
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1252
        widthOfContents := nil.         "/ force recompute whole list
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1253
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1254
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1255
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1256
    stop  := anIndex + noLines - 1.     "/ recompute a range
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1257
    start := anIndex.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1258
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1259
    computeWidthInRange notNil ifTrue:[
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1260
        start := computeWidthInRange y.
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1261
        stop  <  start ifTrue:[stop := start min:size].
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1262
        start := (computeWidthInRange x) min:anIndex.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1263
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1264
    computeWidthInRange := start@stop
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1265
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1266
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1267
lostSynchronisation
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1268
    "called when the changes derived from the model are faster than the handling
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1269
    "
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1270
    shown ifTrue:[
2302
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1271
        self recomputeHeightOfContents.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1272
        self invalidate.
5a2a1d5d09f8 remove asynchronous handling of changes; always disabled because doesn't work
ca
parents: 2301
diff changeset
  1273
        self contentsChanged
1457
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1274
    ].
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1275
!
76491c5ae369 lostSynchronisation:
Claus Gittinger <cg@exept.de>
parents: 1456
diff changeset
  1276
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1277
newDefaultList
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1278
    "creates and returns a new default list class, on default a List
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1279
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1280
    ^ List new
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1281
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1282
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1283
widthOfWidestLineBetween:firstLine and:lastLine
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1284
    "return the width in pixels of the widest line in a range
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1285
    "
2645
b3d3e7c3ee40 bugfix due to compilation (test SmallInteger for nil)
ca
parents: 2644
diff changeset
  1286
    |item width|
b3d3e7c3ee40 bugfix due to compilation (test SmallInteger for nil)
ca
parents: 2644
diff changeset
  1287
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1288
    width := renderer widthOfWidestLineBetween:firstLine and:lastLine.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1289
    width notNil ifTrue:[^ width].
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1290
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1291
    width := textStartLeft.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1292
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1293
    firstLine to:lastLine do:[:anIndex|
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1294
        item := self at:anIndex ifAbsent:nil.
1508
9c54f2e53da1 check whether #at:ifAbsent returns nil.
Claus Gittinger <cg@exept.de>
parents: 1457
diff changeset
  1295
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1296
        item isNil ifTrue:[^ width + textStartLeft].
1508
9c54f2e53da1 check whether #at:ifAbsent returns nil.
Claus Gittinger <cg@exept.de>
parents: 1457
diff changeset
  1297
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1298
        width := (renderer widthFor:item) max:width
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1299
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1300
    ^ width + textStartLeft
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1301
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1302
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1303
!ListModelView methodsFor:'queries'!
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1304
2274
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1305
isLineVisible:aLineNr
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1306
    "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
  1307
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1308
    ^ self isLineVisible:aLineNr in:self extent
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1309
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1310
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1311
isLineVisible:aLineNr in:anExtentPoint
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1312
    "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
  1313
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1314
    |y|
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1315
    y := self yVisibleOfLine:aLineNr.
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1316
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1317
  ^ (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
  1318
!
c973acbc021d only make selection visible after a resize, if it was visible before
ca
parents: 2265
diff changeset
  1319
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1320
size
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1321
    "returns the number of list entries
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1322
    "
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1323
    ^ self list size
1820
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1324
! !
9b17f0c15849 category change
Claus Gittinger <cg@exept.de>
parents: 1818
diff changeset
  1325
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1326
!ListModelView methodsFor:'recomputation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1327
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1328
preferredExtent
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1329
    "returns the preferred extent
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1330
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1331
    |x y|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1332
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1333
    preferredExtent isNil ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1334
	y := self heightOfContents.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1335
	x := self widthOfContents.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1336
	preferredExtent := x@y
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1337
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1338
  ^ preferredExtent
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1339
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1340
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1341
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1342
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1343
recomputeHeightOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1344
    "recompute all the y positions
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1345
    "
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1346
    |newList
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1347
     yAbs "{ Class: SmallInteger }" 
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1348
     size "{ Class: SmallInteger }"|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1349
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1350
    yAbs    := (textStartTop + margin).   "/ top inset of first line
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1351
    size    := self size.
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1352
    newList := OrderedCollection new:(size + 1).
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1353
    newList add:yAbs.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1354
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1355
    size ~~ 0 ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1356
        hasConstantHeight ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1357
            constantHeight isNil ifTrue:[ constantHeight := self heightOfAnyNonNilItem ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1358
        ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1359
        
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1360
        1 to:size do:[:anIndex|
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1361
            yAbs := yAbs + (constantHeight notNil 
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1362
                                ifTrue:[constantHeight] 
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1363
                                ifFalse:[self realHeightOfLineAt:anIndex]).
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1364
            newList add:yAbs
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1365
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1366
    ].
1643
cabafd70be77 checkin from browser
ps
parents: 1642
diff changeset
  1367
    startOfLinesY := newList.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1368
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1369
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1370
!ListModelView methodsFor:'scroller interface'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1371
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1372
getWidthOfContents
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1373
    ^ widthOfContents
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1374
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1375
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1376
heightOfAnyNonNilItem
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1377
    "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
  1378
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1379
    |item|
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1380
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1381
    item := list detect:[:i | i notNil] ifNone:nil.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1382
    item isNil ifTrue:[ ^ 16 "arbitrary" ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1383
    ^ self lineHeightFor:item.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1384
!
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1385
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1386
heightOfContents
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1387
    "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
  1388
2595
1ab5dc7d4796 create a default list; thus we have not to test for nil
ca
parents: 2569
diff changeset
  1389
    ^ self startOfLinesY last ? 0
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1390
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1391
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1392
heightOfLineAt:aLineNr
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1393
    "returns the height of a line at an index (including lineSpacing...)"
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1394
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1395
    hasConstantHeight ifTrue:[
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1396
        constantHeight isNil ifTrue:[ 
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1397
            constantHeight := self heightOfAnyNonNilItem.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1398
        ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1399
        ^ constantHeight
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1400
    ].
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1401
    ^ self realHeightOfLineAt:aLineNr
2261
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1402
!
dd8a6eb74790 add #hasConstantHeight for optimization
ca
parents: 2257
diff changeset
  1403
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1404
innerHeight
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1405
    "returns the inner height of the contents shown
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1406
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1407
    ^ height - margin - margin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1408
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1409
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1410
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1411
innerWidth
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1412
    "returns the inner width of the contents shown
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1413
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1414
    ^ width - margin - margin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1415
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1416
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1417
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1418
maxViewOriginY
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1419
    "returns the maximum possible y of the view origin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1420
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1421
    ^ (self heightOfContents - self innerHeight) max:0
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1422
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1423
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1424
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1425
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1426
realHeightOfLineAt:aLineNr
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1427
    "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
  1428
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1429
    |item|
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1430
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1431
    item := self at:aLineNr ifAbsent:nil.
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1432
    item notNil ifTrue:[
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1433
        ^ self lineHeightFor:item
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1434
    ].
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1435
    ^ font height "arbitrary"
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1436
!
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1437
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1438
setWidthOfContents: aWidth
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1439
    widthOfContents := aWidth.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1440
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1441
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1442
verticalScrollStep
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1443
    "return the amount to scroll when stepping up/down.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1444
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1445
    ^ 10
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1446
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1447
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1448
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1449
viewOrigin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1450
    "return the viewOrigin; thats the coordinate of the contents 
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1451
     which is shown topLeft in the view.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1452
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1453
    ^ viewOrigin
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1454
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1455
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1456
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1457
widthOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1458
    "return the width of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1459
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1460
    |range
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1461
     size  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1462
     start "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1463
     stop  "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1464
    |
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1465
    (widthOfContents notNil and:[computeWidthInRange isNil]) ifTrue:[
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1466
        ^ widthOfContents + textStartLeft
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1467
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1468
    range               := computeWidthInRange.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1469
    computeWidthInRange := nil.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1470
    preferredExtent     := nil.
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1471
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1472
    shown ifFalse:[ ^ 60 ].
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1473
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1474
    size := self size.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1475
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1476
    size == 0 ifTrue:[
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1477
        widthOfContents := 20.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1478
    ] ifFalse:[
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1479
        widthOfContents isNil ifTrue:[
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1480
            widthOfContents := self widthOfWidestLineBetween:1 and:size
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1481
        ] ifFalse:[
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1482
            start := range x.
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1483
            stop  := range y min:size.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1484
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1485
            start > stop ifFalse:[
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1486
                size := self widthOfWidestLineBetween:start and:stop.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1487
2384
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1488
                widthOfContents < size ifTrue:[
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1489
                    widthOfContents := size
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1490
                ]
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1491
            ]
44fbf84cfb22 validate widthOfContents if visible
ca
parents: 2367
diff changeset
  1492
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1493
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1494
    ^ widthOfContents + textStartLeft
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1495
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1496
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1497
xOriginOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1498
    "return the horizontal origin of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1499
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1500
    ^ viewOrigin x 
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1501
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1502
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1503
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1504
yOriginOfContents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1505
    "return the vertical origin of the contents in pixels
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1506
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1507
    ^ viewOrigin y
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1508
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1509
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1510
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1511
!ListModelView methodsFor:'scrolling'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1512
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1513
halfPageDown
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1514
    "scroll down half a page
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1515
    "
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
  1516
    self scrollDown:(height // 2).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1517
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1518
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1519
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1520
halfPageUp
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1521
    "scroll up half a page
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1522
    "
1827
54e8a0fc8a42 scrollWhenUpdating
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
  1523
    self scrollUp:(height // 2).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1524
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1525
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1526
2367
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1527
makeLineVisible:aLnNr
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1528
    "make the line visible
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1529
    "
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1530
    aLnNr notNil ifTrue:[
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1531
        self scrollToLine:aLnNr
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1532
    ].
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1533
!
69f8b4d73f5d add #makeLineVisible:
ca
parents: 2352
diff changeset
  1534
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1535
scrollTo:anOrigin redraw:doRedraw
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1536
    "change origin to have newOrigin be visible at the top-left.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1537
    "
1538
ef0eea7c074a check for windowGroup
Claus Gittinger <cg@exept.de>
parents: 1535
diff changeset
  1538
    |newOrg dltOrg winGrp
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1539
     innerWT    "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1540
     innerHG    "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1541
     h          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1542
     x          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1543
     x0         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1544
     x1         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1545
     y          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1546
     w          "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1547
     y0         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1548
     y1         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1549
     dX         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1550
     dY         "{ Class:SmallInteger }"
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1551
    |
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1552
1580
523119ab4e30 scrollTo:anOrigin redraw:doRedraw
ca
parents: 1566
diff changeset
  1553
    realized ifFalse:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1554
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1555
    ].
1580
523119ab4e30 scrollTo:anOrigin redraw:doRedraw
ca
parents: 1566
diff changeset
  1556
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1557
    innerWT := self innerWidth.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1558
    innerHG := self innerHeight.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1559
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1560
    h := viewOrigin y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1561
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1562
    (y := anOrigin y) > h ifTrue:[              "/ end of contents
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1563
        y > (dY := self maxViewOriginY) ifTrue:[
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1564
            y := dY max:h
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1565
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1566
    ] ifFalse:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1567
        y := y max:0.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1568
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1569
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1570
    (x := anOrigin x) > 0 ifTrue:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1571
        x := x min:(self widthOfContents - innerWT).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1572
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1573
    x      := x max:0.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1574
    newOrg := (x @ y).
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1575
    dltOrg := newOrg - viewOrigin.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1576
    dX     := dltOrg x.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1577
    dY     := dltOrg y.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1578
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1579
    (dX == 0 and:[dY == 0]) ifTrue:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1580
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1581
    ].
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1582
    dY := dY abs.
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1583
    dX := dX abs.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1584
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1585
    (   (dX ~~ 0 and:[dY ~~ 0])                         "/ scroll vertical & horizontal
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1586
     or:[(innerHG - dY < 20 or:[innerWT - dX < 20])]    "/ faster to invalidate screen
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1587
    ) ifTrue:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1588
        viewOrigin := newOrg.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1589
        self originChanged:dltOrg.
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1590
        self invalidate.
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1591
        ^ self
1534
8c4272e42539 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1532
diff changeset
  1592
    ].
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1593
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1594
    (winGrp := self windowGroup) notNil ifTrue:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1595
        winGrp processRealExposeEventsFor:self.
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1596
    ].
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1597
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1598
    self originWillChange.
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1599
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1600
    doRedraw ifFalse:[
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1601
        viewOrigin := newOrg.
2659
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1602
        self originChanged:dltOrg.
3af857eb52fb invalidate checks itself for shown-flag
Claus Gittinger <cg@exept.de>
parents: 2645
diff changeset
  1603
        ^ self 
1753
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1604
    ].
17769f8df493 #scrollTo:redraw: first check whether full invalidate otherwise processRealExposeEventsFor:
ca
parents: 1752
diff changeset
  1605
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1606
    self catchExpose.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1607
    viewOrigin := newOrg.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1608
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1609
    dY ~~ 0 ifTrue:[                            "/ SCROLL VERTICAL
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1610
        y0 := y1 := margin + dY.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1611
        h  := innerHG - dY.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1612
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1613
        dltOrg y < 0 ifTrue:[y0 := margin. y := y0]
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1614
                    ifFalse:[y1 := margin. y := y1 + h].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1615
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1616
        self copyFrom:self x:margin y:y0 toX:margin y:y1 width:innerWT height:h async:true.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1617
        self invalidateX:margin y:y width:innerWT height:(innerHG - h).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1618
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1619
    ] ifFalse:[                                 "/ SCROLL HORIZONTAL
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1620
        x0 := x1 := dX + margin.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1621
        w  := innerWT - dX.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1622
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1623
        dltOrg x < 0 ifTrue:[x0 := x := margin ]
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1624
                    ifFalse:[x1 := margin. x := w].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1625
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1626
        self copyFrom:self x:x0 y:margin toX:x1 y:margin width:w height:innerHG async:true.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1627
        self invalidateX:x y:margin width:(width - w) height:innerHG.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1628
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1629
    self originChanged:dltOrg.
1531
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1630
    self waitForExpose.
42dcb9760f0f checkin from browser
Stefan Vogel <sv@exept.de>
parents: 1508
diff changeset
  1631
2458
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1632
    winGrp notNil ifTrue:[
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1633
        winGrp processRealExposeEventsFor:self.
0411397ef0a2 readraw after scroll: process expose events.
Claus Gittinger <cg@exept.de>
parents: 2408
diff changeset
  1634
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1635
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1636
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1637
scrollToLine:aLineNumber
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1638
    "make line visible
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1639
    "
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1640
    |inHg "{ Class:SmallInteger }"
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1641
     yTop "{ Class:SmallInteger }"
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1642
     orgY "{ Class:SmallInteger }"
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1643
     yBot "{ Class:SmallInteger }"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1644
    |
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1645
    (shown and:[aLineNumber notNil and:[aLineNumber between:1 and:(self size)]]) ifFalse:[
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1646
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1647
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1648
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1649
    yTop := self yAbsoluteOfLine:aLineNumber.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1650
    inHg := self innerHeight.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1651
    orgY := viewOrigin y.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1652
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1653
    yTop > orgY ifTrue:[
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1654
        yBot := self yAbsoluteOfLine:(aLineNumber + 1).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1655
2408
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1656
        yBot <= (orgY + inHg) ifTrue:[
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1657
            ^ self
8b0d11537dc0 accessing list indirect
ca
parents: 2385
diff changeset
  1658
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1659
    ].
1744
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1660
    yTop := (yTop - (inHg // 2)) max:0.
2447f4a3dd7c computation of absoluteY for a line
ca
parents: 1743
diff changeset
  1661
    self scrollTo:(viewOrigin x @ yTop).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1662
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1663
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1664
!ListModelView methodsFor:'scrolling auto'!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1665
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1666
startAutoScroll:aSelectorOrBlock distance:aDistance
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1667
    "setup for auto-scroll (when button-press-moving below/above view);
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1668
     - timeDelta for scroll is computed from distance
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1669
    "
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1670
    |timeDelta scrollBlock|
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1671
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1672
    autoScroll ifFalse:[
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1673
        self stopAutoScroll.
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1674
        ^ self
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1675
    ].
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1676
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1677
    autoScrollBlock notNil ifTrue:[
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1678
        Processor removeTimedBlock:autoScrollBlock.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1679
    ] ifFalse:[
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1680
        self compressMotionEvents:false.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1681
    ].
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1682
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1683
    timeDelta := 0.5 / (aDistance abs).
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1684
2670
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1685
    scrollBlock := 
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1686
        [
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1687
            aSelectorOrBlock isSymbol ifTrue:[
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1688
                self perform:aSelectorOrBlock.
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1689
            ] ifFalse:[
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1690
                aSelectorOrBlock value
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1691
            ].
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1692
            autoScrollBlock notNil ifTrue:[
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1693
                Processor addTimedBlock:autoScrollBlock afterSeconds:timeDelta.
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1694
            ]
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1695
        ].
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1696
27dacfff1d6d autoScroll: let timedBlock push an event which performs the scroll
Claus Gittinger <cg@exept.de>
parents: 2659
diff changeset
  1697
    autoScrollBlock := [self sensor pushUserEvent:#value for:scrollBlock].
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1698
    Processor addTimedBlock:autoScrollBlock afterSeconds:timeDelta.
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1699
!
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1700
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1701
stopAutoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1702
    "stop any autoScroll
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1703
    "
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1704
    autoScrollBlock notNil ifTrue:[
2265
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1705
	Processor removeTimedBlock:autoScrollBlock.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1706
	autoScrollBlock := nil.
5304bdf0f8e2 *** empty log message ***
ca
parents: 2264
diff changeset
  1707
	self compressMotionEvents:true.
1748
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1708
    ].
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1709
! !
0a2213a15e06 support of auto scrolling
ca
parents: 1744
diff changeset
  1710
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1711
!ListModelView methodsFor:'selection'!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1712
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1713
hasSelection
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1714
    "on default false is returned
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1715
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1716
    ^ false
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1717
! !
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1718
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1719
!ListModelView::Renderer class methodsFor:'documentation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1720
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1721
documentation
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1722
"
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1723
    prepared for ListItemRenderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1724
    .... SelectionItemRenderer ...
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1725
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1726
    goal:
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1727
        allow the user to redefine the display operation and the dimesion queries
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1728
"
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1729
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1730
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1731
!ListModelView::Renderer class methodsFor:'instance creation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1732
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1733
forView:aView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1734
    |renderer|
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1735
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1736
    renderer := self basicNew initialize.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1737
    renderer forView:aView.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1738
    ^ renderer
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1739
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1740
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1741
!ListModelView::Renderer methodsFor:'change & update'!
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1742
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1743
listWillChange
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1744
    "called before the list changed, clear caches etc.
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1745
     here nothing is done
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1746
    "
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1747
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1748
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1749
withinUpdateFromListDo:aBlock
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1750
    "handle an update from the list
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1751
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1752
    aBlock value
2640
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1753
! !
2855d7e55d43 inform renderere if list changed
ca
parents: 2605
diff changeset
  1754
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1755
!ListModelView::Renderer methodsFor:'displaying'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1756
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1757
display:anItem atX:xLeft y:yTop lineHeight:h
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1758
    "display the item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1759
    "
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1760
    |x0 y0 label|
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1761
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1762
    x0 := xLeft.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1763
    y0 := yTop.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1764
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1765
    anItem isHierarchicalItem ifTrue:[
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1766
        anItem displayOn:view x:x0 y:y0 h:h
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1767
    ] ifFalse:[
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1768
        anItem isNil ifTrue:[^ self].
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1769
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1770
        y0    := y0 - ((self heightFor:anItem) + 1 - h // 2).
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1771
        label := anItem.
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1772
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1773
        label isImageOrForm ifFalse:[
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1774
            label isNumber ifTrue:[
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1775
                label := label printString
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1776
            ].
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1777
            y0 := y0 + view font ascent
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1778
        ].
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1779
        label displayOn:view x:x0 y:y0
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1780
    ].
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1781
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1782
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1783
postRedrawX:damageX y:yStartOrYDamage w:damageWidth from:startOrNil to:stopOrNil
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1784
    "called after redraw of the items in range from start to stop is done;
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1785
     if no items are damaged, start and stop is set to nil.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1786
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1787
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1788
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1789
validateDrawableItemsFrom:start to:stop
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1790
    "called before drawing items from start to stop; if the method returns false
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1791
     nothing will be drawn and a invalidate is pushed on the event queue.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1792
     On default true is returned.
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1793
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1794
    ^ true
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1795
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1796
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1797
!ListModelView::Renderer methodsFor:'instance creation'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1798
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1799
forView:aView
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1800
    view := aView.
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1801
    view shown ifTrue:[ self mapped ].
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1802
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1803
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1804
mapped
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1805
    "called if the view is mapped; can be redefined by subclass
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1806
    "
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1807
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1808
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1809
release
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1810
    "called if the view is gone; can be redefined by subclass
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1811
    "
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1812
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1813
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1814
!ListModelView::Renderer methodsFor:'queries-behavior'!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1815
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1816
autoScrollHorizontal
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1817
    "returns true if automatic scrolling horizontal
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1818
     is allowed (the default is true).
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1819
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1820
    ^ true
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1821
! !
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1822
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1823
!ListModelView::Renderer methodsFor:'queries-dimensions'!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1824
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1825
heightFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1826
    "returns the height of an item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1827
    "
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1828
    ^ anItem heightOn:view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1829
!
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1830
2643
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1831
maxItemWidthOrNil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1832
    "returns the maximum item width for drawing or nil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1833
     if unspecified (the default); used for cliping
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1834
    "
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1835
    ^ nil
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1836
!
8db56678dc19 prepared for table
ca
parents: 2640
diff changeset
  1837
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1838
widthFor:anItem
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1839
    "returns the width of an item on the view
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1840
    "
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1841
    ^ anItem widthOn:view
2644
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1842
!
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1843
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1844
widthOfWidestLineBetween:firstLine and:lastLine
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1845
    "returns the width of the longest line in pixels in a range; if the rendere
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1846
     cannot compute the width, nil is returned (the default).
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1847
    "
78ca3bd5eef1 prepared for table
ca
parents: 2643
diff changeset
  1848
    ^ nil
2352
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1849
! !
c4610dae596e prepared for ListItemRenderer
ca
parents: 2329
diff changeset
  1850
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1851
!ListModelView class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1852
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1853
version
2852
c5651fcf9770 change and update: MUST update everything if no
Claus Gittinger <cg@exept.de>
parents: 2745
diff changeset
  1854
    ^ '$Header: /cvs/stx/stx/libwidg2/ListModelView.st,v 1.97 2005-10-06 10:58:18 cg Exp $'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1855
! !
2244
c9a195d28e72 change #redrawLineAt: to #invalidateLineAt: (because is a invalidate)
ca
parents: 2188
diff changeset
  1856
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1857
ListModelView initialize!