ViewScroller.st
author Stefan Vogel <sv@exept.de>
Tue, 24 Feb 2009 19:29:34 +0100
changeset 3641 e466ec0abd6e
parent 3544 2ec9f306cc7b
child 3925 bbcb5ef3a451
permissions -rw-r--r--
No longer scroll the focus view for mouseWheel events. This is compatible with the other mouse events, that interact with the window where the mouse pointer is (you have the mouse already at hand, haven't you?). You can now mousewheel-scroll a non-focused SelectionInListView without the risk of changing the current selection. This is compatible with the beaviour of other applications (e.g. firefox)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     1
"
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     3
	      All Rights Reserved
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     4
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     5
 This software is furnished under a license and may be used
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     6
 only in accordance with the terms of that license and with the
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     8
 be provided or otherwise made available to, or used by, any
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
     9
 other person.  No title to or ownership of the software is
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    10
 hereby transferred.
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    11
"
2001
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
    12
"{ Package: 'stx:libwidg2' }"
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
    13
49
claus
parents: 42
diff changeset
    14
SimpleView subclass:#ViewScroller
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    15
	instanceVariableNames:'frame scrolledView keepViewsChannel model verticalScrollStep
3249
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
    16
		horizontalScrollStep resizeScrolledViewVertical
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
    17
		resizeScrolledViewHorizontal'
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
    18
	classVariableNames:''
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
    19
	poolDictionaries:''
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
    20
	category:'Views-Basic'
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    21
!
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    22
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
    23
!ViewScroller class methodsFor:'documentation'!
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    24
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    25
copyright
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    26
"
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    27
 COPYRIGHT (c) 1994 by Claus Gittinger
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    28
	      All Rights Reserved
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    29
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    30
 This software is furnished under a license and may be used
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    31
 only in accordance with the terms of that license and with the
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    33
 be provided or otherwise made available to, or used by, any
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    34
 other person.  No title to or ownership of the software is
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    35
 hereby transferred.
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    36
"
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    37
!
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    38
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    39
documentation 
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    40
"
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    41
    This wrapper view allows scrolling of views (in contrast to scrolling
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    42
    of contents which can be done by any view).
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
    43
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    44
    Normally, scrolling is done by putting a view into a ScrollableView (which
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    45
    simply wraps the scrollbars around) and have the scrollbars send scrollUp:/
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    46
    scrollDown: etc. send to the scrolledView.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    47
    The default implementation of scrolling (in View) modifies the transformation,
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    48
    and does a bit-copy of the contents with redraw of the exposed area.
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    49
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    50
    However, there are situations, where you want to scroll a view itself.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    51
    For example, if you need many buttons in a panel, which do not fit.
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    52
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    53
    This class provides the basic mechanism to implement this.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    54
    It is a wrapper, which implements scrolling by modifying the origin of its
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    55
    single subview when asked to scroll. Thus, it can be put into a ScrollableView
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    56
    like any other, but will move its subview when asked to scroll instead.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    57
    (i.e. reimplement all scroll messages by manipulating its subviews origin
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    58
     instead of its contents' transformation offset)
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    59
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    60
    The subview should have a constant extent, which will be taken for the
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    61
    scrollbar position/height computation.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    62
    Since the subview is represented directly by the underlying window systems view
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    63
    implementation, there may be a limit on the maximum size of that view. For
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    64
    example, in X, dimensions may not be larger than 32767 pixels.
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    65
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    66
    [Instance variables:]
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    67
        model                <ValueHolder>      the model which keeps the current scrolledView.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    68
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    69
        keepViewsChannel     <ValueHolder>      boolean holder; if the value is false (the default),
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    70
                                                the previous scrolled view is destroyed, whenever a
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    71
                                                new scrolled view is set. If true, it is unmapped and
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    72
                                                kept.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    73
                                                Set this flag, if the application changes the scrolled
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    74
                                                view but wants them to be kept for fast switching.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    75
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    76
        horizontalScrollStep <SmallInteger>     amount to scroll when stepping left/right in pixels
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    77
        verticalScrollStep   <SmallInteger>     amount to scroll when stepping up/down    in pixels
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    78
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    79
        frame                <SimpleView>       the one and only container of the visible scrolledView
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    80
                                                and all invisible scrolledViews if existant.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    81
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    82
        scrolledView         <SimpleView | nil> the current scrolled view or nil
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
    83
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    84
    [see also:]
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    85
        ScrollableView HVScrollableView
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    86
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    87
    [author:]
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
    88
        Claus Gittinger
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    89
"
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    90
!
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
    91
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    92
examples
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    93
"
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    94
  scroll a panel of buttons:
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
    95
                                                                [exBegin]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    96
    |top frame vscroller v panel|
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    97
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    98
    top := StandardSystemView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
    99
    top extent:100@400.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   100
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   101
    frame := ScrollableView for:ViewScroller in:top.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   102
    frame origin:0.0 @ 0.0 corner:1.0 @ 1.0.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   103
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   104
    vscroller := frame scrolledView.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   105
    panel := VerticalPanelView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   106
    panel horizontalLayout:#fit.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   107
    1 to:100 do:[:i |
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   108
        Button label:(i printString) in:panel
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   109
    ].
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   110
    vscroller scrolledView:panel.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   111
    top open.
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   112
                                                                [exEnd]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   113
425
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   114
  same, defining what a scroll step is:
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   115
                                                                [exBegin]
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   116
    |top frame vscroller v panel|
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   117
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   118
    top := StandardSystemView new.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   119
    top extent:100@400.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   120
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   121
    frame := ScrollableView for:ViewScroller in:top.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   122
    frame origin:0.0 @ 0.0 corner:1.0 @ 1.0.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   123
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   124
    vscroller := frame scrolledView.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   125
    vscroller verticalScrollStep:20.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   126
    panel := VerticalPanelView new.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   127
    panel horizontalLayout:#fit.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   128
    1 to:100 do:[:i |
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   129
        Button label:(i printString) in:panel
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   130
    ].
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   131
    vscroller scrolledView:panel.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   132
    top open.
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   133
                                                                [exEnd]
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   134
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   135
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   136
  same, horizontally. Also change layout in panel for nicer look
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   137
  and make panel adjust its height:
36
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
   138
  (since the buttons are defined to fill vertically, the vertical
160b8f0dfd7d *** empty log message ***
claus
parents: 29
diff changeset
   139
   scrollbar is useless here - its here as example; not for its function)
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   140
                                                                [exBegin]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   141
    |top frame vscroller v panel|
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   142
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   143
    top := StandardSystemView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   144
    top extent:300@100.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   145
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   146
    frame := HVScrollableView for:ViewScroller in:top.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   147
    frame origin:0.0 @ 0.0 corner:1.0 @ 1.0.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   148
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   149
    vscroller := frame scrolledView.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   150
    panel := HorizontalPanelView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   151
    panel verticalLayout:#fit.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   152
    panel horizontalLayout:#fit.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   153
    1 to:100 do:[:i |
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   154
        Button label:(i printString) in:panel
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   155
    ].
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   156
    vscroller scrolledView:panel.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   157
    panel height:1.0.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   158
    top open.
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   159
                                                                [exEnd]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   160
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   161
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   162
  scroll a panel of buttons and other views:
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   163
  (not good looking, but a demo that it can be done ...)
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   164
                                                                [exBegin]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   165
    |top frame vscroller v panel textView1 textView2|
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   166
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   167
    top := StandardSystemView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   168
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   169
    frame := HVScrollableView for:ViewScroller in:top.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   170
    frame origin:0.0 @ 0.0 corner:1.0 @ 1.0.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   171
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   172
    vscroller := frame scrolledView.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   173
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   174
    panel := VerticalPanelView new.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   175
    panel horizontalLayout:#leftSpace.
3544
2ec9f306cc7b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3513
diff changeset
   176
    panel extent:1.0@1.0.
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   177
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   178
    textView1 := ScrollableView for:EditTextView in:panel.
3544
2ec9f306cc7b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3513
diff changeset
   179
    textView1 extent:1.0 @ 300.
2ec9f306cc7b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3513
diff changeset
   180
    textView1 scrolledView contents:('keyboard.rc' asFilename readStream contents).
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   181
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   182
    textView2 := ScrollableView for:EditTextView in:panel.
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   183
    textView2 extent:500 @ 300.
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   184
    textView2 scrolledView contents:('Make.proto' asFilename readStream contents).
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   185
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   186
    1 to:100 do:[:i |
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   187
        Button label:(i printString) in:panel
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   188
    ].
3544
2ec9f306cc7b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3513
diff changeset
   189
    vscroller resizeScrolledViewHorizontal:true.
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   190
    vscroller scrolledView:panel.
3544
2ec9f306cc7b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3513
diff changeset
   191
    
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   192
    top open.
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   193
                                                                [exEnd]
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   194
"
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   195
! !
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   196
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   197
!ViewScroller methodsFor:'accessing'!
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   198
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   199
destroyAllClientViews
2957
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   200
    "destroy all client views"
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   201
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   202
    frame destroySubViews.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   203
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   204
    scrolledView notNil ifTrue:[
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   205
        scrolledView removeDependent:self.
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   206
        scrolledView := nil.        
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   207
        self sizeChanged:nil.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   208
    ].
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   209
    model value:nil.
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   210
!
425
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   211
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   212
keepViews
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   213
    "returns the value of the boolean channel: keepViewsChannel.
2957
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   214
        for more information see: #keepViewsChannel"
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   215
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   216
    ^ keepViewsChannel value ? false
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   217
!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   218
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   219
keepViews:aBool
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   220
    "set the value of the boolean channel: keepViewsChannel.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   221
        for more information see: #keepViewsChannel:
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   222
    "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   223
    keepViewsChannel value:aBool
2001
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   224
!
425
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   225
3249
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   226
resizeScrolledViewHorizontal
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   227
    ^ resizeScrolledViewHorizontal
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   228
!
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   229
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   230
resizeScrolledViewHorizontal:something
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   231
    resizeScrolledViewHorizontal := something.
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   232
!
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   233
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   234
resizeScrolledViewVertical
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   235
    ^ resizeScrolledViewVertical
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   236
!
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   237
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   238
resizeScrolledViewVertical:something
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   239
    resizeScrolledViewVertical := something.
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   240
!
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   241
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   242
scrolledView
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   243
    "return the view which is scrolled"
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   244
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   245
    ^ scrolledView 
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   246
!
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   247
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   248
scrolledView:aView
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   249
    "set a new scolled view; dependent on the #keepViewsChannel
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   250
     the old scolled view will be destroyed or unmapped."
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   251
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   252
    |extent|
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   253
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   254
    scrolledView ~~ aView ifTrue:[
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   255
        scrolledView notNil ifTrue:[
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   256
            scrolledView removeDependent:self.
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   257
            self keepViews ifTrue:[ scrolledView beInvisible ]
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   258
                          ifFalse:[ scrolledView destroy ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   259
        ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   260
        scrolledView := aView.
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   261
        scrolledView notNil ifTrue:[
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   262
            scrolledView addDependent:self.
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   263
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   264
            "test whether new scrolled view not nil and
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   265
             not already added to my subViews.
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   266
            "
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   267
            (scrolledView superView ~~ frame) ifTrue:[
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   268
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   269
                scrolledView borderWidth:0; level:0.
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   270
                extent := scrolledView preferredExtent.
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   271
                frame addSubView:scrolledView.
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   272
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   273
                "/ test whether the new view is a scrollWrapper.
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   274
                "/ in this case scrolling can be done by this view
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   275
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   276
                scrolledView isScrollWrapper ifTrue:[
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   277
                    scrolledView isHorizontalScrollable ifTrue:[ extent x:1.0 ].     
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   278
                    scrolledView isVerticalScrollable   ifTrue:[ extent y:1.0 ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   279
                ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   280
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   281
                resizeScrolledViewHorizontal ifTrue:[ extent x:1.0 ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   282
                resizeScrolledViewVertical   ifTrue:[ extent y:1.0 ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   283
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   284
                scrolledView extent:extent.
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   285
            ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   286
        ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   287
        realized ifTrue:[
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   288
            scrolledView ifNotNil:[scrolledView beVisible].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   289
            self sizeChanged:nil.
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   290
        ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   291
        self sensor addEventListener:self.
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   292
    ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   293
    model value:scrolledView.
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   294
!
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   295
2124
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   296
scrolledViews
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   297
    "Returns the collection of all scrolled views including the current scrolled view
2957
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   298
     and all unmapped scrolled views."
21b7fc774154 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2738
diff changeset
   299
2124
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   300
    |subviews|
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   301
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   302
    frame ifNotNil:[
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   303
        subviews := frame subViews.
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   304
        subviews ifNotNil:[ ^ subviews ]
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   305
    ].
1d5a2cb70d09 *** empty log message ***
ca
parents: 2120
diff changeset
   306
    ^ #()
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   307
! !
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   308
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   309
!ViewScroller methodsFor:'accessing-channels'!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   310
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   311
keepViewsChannel
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   312
    "boolean holder; if the value is false (the default), the previous scrolled view is
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   313
     destroyed, whenever a new scrolled view is set.  if true, it is unmapped and kept.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   314
     Set this flag, if the application changes the scrolled view but wants
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   315
     them to be kept for fast switching.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   316
    "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   317
    ^ keepViewsChannel
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   318
!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   319
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   320
keepViewsChannel:aHolder
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   321
    "boolean holder; if the value is false (the default), the previous scrolled view is
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   322
     destroyed, whenever a new scrolled view is set.  if true, it is unmapped and kept.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   323
     Set this flag, if the application changes the scrolled view but wants
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   324
     them to be kept for fast switching.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   325
    "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   326
    |oldValue|
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   327
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   328
    oldValue := keepViewsChannel value.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   329
    keepViewsChannel removeDependent:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   330
3165
0d595ec9b8b8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2957
diff changeset
   331
    (keepViewsChannel := aHolder) isNil ifTrue:[
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   332
        keepViewsChannel := oldValue asValue.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   333
    ].
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   334
    keepViewsChannel addDependent:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   335
    self update:nil with:nil from:keepViewsChannel.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   336
!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   337
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   338
model
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   339
    "value holder, which keeps the current scrolledView or nil
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   340
    "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   341
    ^ model
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   342
!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   343
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   344
model:aHolder
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   345
    "value holder, which keeps the current scrolledView or nil
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   346
    "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   347
    model removeDependent:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   348
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   349
    aHolder isNil ifTrue:[ model := nil asValue ]
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   350
                 ifFalse:[ model := aHolder     ].
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   351
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   352
    model addDependent:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   353
    self update:nil with:nil from:model.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   354
! !
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   355
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   356
!ViewScroller methodsFor:'accessing-look'!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   357
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   358
horizontalScrollStep:something
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   359
    "set the value of the instance variable 'horizontalScrollStep' (automatically generated)"
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   360
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   361
    horizontalScrollStep := something.
425
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   362
!
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   363
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   364
verticalScrollStep:something
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   365
    "set the value of the instance variable 'verticalScrollStep' (automatically generated)"
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   366
2001
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   367
    verticalScrollStep := something.
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   368
! !
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   369
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   370
!ViewScroller methodsFor:'change & update'!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   371
3261
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   372
resizeScrolledView
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   373
    "forces a recomputation of the scrolled views size"
3261
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   374
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   375
    |oldExtent newExtent xIsRelative yIsRelative|
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   376
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   377
    scrolledView isNil ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   378
        ^ self
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   379
    ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   380
    oldExtent   := scrolledView extent copy.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   381
    newExtent   := scrolledView preferredExtent copy.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   382
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   383
    xIsRelative := resizeScrolledViewHorizontal.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   384
    yIsRelative := resizeScrolledViewVertical.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   385
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   386
    scrolledView isScrollWrapper ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   387
        scrolledView isHorizontalScrollable ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   388
            xIsRelative := true.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   389
        ].     
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   390
        scrolledView isVerticalScrollable ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   391
            yIsRelative := true.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   392
        ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   393
    ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   394
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   395
    resizeScrolledViewHorizontal ifTrue:[ newExtent x:1.0 ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   396
    resizeScrolledViewVertical   ifTrue:[ newExtent y:1.0 ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   397
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   398
    xIsRelative ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   399
        newExtent x:1.0.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   400
        oldExtent x:1.0.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   401
    ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   402
    yIsRelative ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   403
        newExtent y:1.0.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   404
        oldExtent y:1.0.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   405
    ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   406
    oldExtent ~= newExtent ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   407
        scrolledView extent:newExtent.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   408
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   409
        realized ifTrue:[
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   410
            self sizeChanged:nil.
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   411
        ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   412
    ].
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   413
!
7f60ff4c779b resizeScrolledView - canbe called to force a recomputation of the scrolled view
ca
parents: 3249
diff changeset
   414
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   415
update:something with:aParameter from:changedObject
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   416
    changedObject == scrolledView ifTrue:[
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   417
        something == #sizeOfView ifTrue:[
3493
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   418
            self repositionScrolledView.
3481
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   419
            self changed:#sizeOfContents.        "update possible scrollers"
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   420
        ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   421
        ^ self
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   422
    ].
3b75a4fd635a forward contentsChange messages
Claus Gittinger <cg@exept.de>
parents: 3443
diff changeset
   423
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   424
    changedObject == model ifTrue:[
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   425
        self scrolledView:(model value).
2478
654d6ffde1f8 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
   426
        ^ self
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   427
    ].
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   428
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   429
    changedObject == keepViewsChannel ifTrue:[
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   430
        self keepViews ifFalse:[ |views|
3355
7cc9b5a40524 Clean up documentation & variable names
Stefan Vogel <sv@exept.de>
parents: 3339
diff changeset
   431
            "destroy all client views other than the actual scrolled view
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   432
            "
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   433
            views := frame subViews.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   434
            views size ~~ 0 ifTrue:[
2478
654d6ffde1f8 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2156
diff changeset
   435
                views copy do:[:v | v ~~ scrolledView ifTrue:[ v destroy ] ].
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   436
            ]
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   437
        ].
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   438
        ^ self
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   439
    ].
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   440
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   441
    super update:something with:aParameter from:changedObject
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   442
! !
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   443
3513
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   444
!ViewScroller methodsFor:'delegation'!
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   445
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   446
viewBackground:aColor
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   447
    super viewBackground:aColor.
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   448
    frame notNil ifTrue:[
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   449
        frame viewBackground:aColor
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   450
    ].
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   451
! !
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   452
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   453
!ViewScroller methodsFor:'event handling'!
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   454
3498
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   455
processEvent:anEvent    
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   456
    "return true, if the event was eaten"
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   457
3641
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   458
    |appl evView viewToScroll|
3339
c4518b7f65f3 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 3329
diff changeset
   459
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   460
    anEvent isMouseWheelEvent ifTrue:[
3641
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   461
        scrolledView isNil ifTrue:[
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   462
            ^ false
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   463
        ].
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   464
3339
c4518b7f65f3 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 3329
diff changeset
   465
        appl := self application.
c4518b7f65f3 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 3329
diff changeset
   466
        appl notNil ifTrue:[    "/ might happen that my application is nil
3409
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   467
            evView := anEvent view.
3641
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   468
            viewToScroll := anEvent targetView.
3498
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   469
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   470
            "/ because I am catching all scroll events (which is a kludge),
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   471
            "/ walk up the hierarchy and see if there is no other scrolled view involved.
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   472
            "/ if not, handle the scroll.
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   473
            "/ BETTER SOLUTION:
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   474
            "/  unhandled mouseWheel events should be forwarded to the container
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   475
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   476
            [ viewToScroll ~~ scrolledView
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   477
              and:[ viewToScroll ~~ self 
3641
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   478
              and:[ viewToScroll notNil
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   479
              and:[ (viewToScroll isScrollWrapper not
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   480
                    or:[ viewToScroll isVerticalScrollable not ]) 
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   481
              and:[ (viewToScroll handlesMouseWheelMotion:anEvent inView:evView) not ]]]]
3498
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   482
            ] whileTrue:[
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   483
                viewToScroll := viewToScroll container.
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   484
            ].
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   485
            viewToScroll isNil ifTrue:[
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   486
                ^ false
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   487
            ].
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   488
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   489
            viewToScroll == scrolledView ifTrue:[
3409
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   490
                appl
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   491
                    enqueueMessage:#mouseWheelMotion:x:y:amount:deltaTime:
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   492
                    for:self
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   493
                    arguments:(anEvent arguments).
3410
61c070aca385 changed #processEvent:
Claus Gittinger <cg@exept.de>
parents: 3409
diff changeset
   494
                ^ true
3409
d201a5225491 fixed scroll connection
Claus Gittinger <cg@exept.de>
parents: 3355
diff changeset
   495
            ].
3339
c4518b7f65f3 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 3329
diff changeset
   496
        ].
3329
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   497
    ].
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   498
    ^ false
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   499
!
52882e077d23 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3326
diff changeset
   500
3493
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   501
repositionScrolledView
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   502
    "Reposition the scrolledView, if required"
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   503
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   504
    |newOrigin|
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   505
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   506
    "
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   507
     if we are beyond the end, scroll up a bit
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   508
    "
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   509
    ((self viewOrigin y + self height) > self heightOfContents) ifTrue:[
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   510
        newOrigin := self heightOfContents - self height.
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   511
        newOrigin < 0 ifTrue:[
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   512
            newOrigin := 0
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   513
        ].
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   514
        self scrollVerticalTo: newOrigin.
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   515
    ].
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   516
    "
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   517
     if we are right of the end, scroll left a bit
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   518
    "
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   519
    ((self viewOrigin x + self width) > self widthOfContents) ifTrue:[
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   520
        newOrigin := self widthOfContents - self width.
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   521
        newOrigin < 0 ifTrue:[
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   522
            newOrigin := 0
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   523
        ].
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   524
        self scrollHorizontalTo: newOrigin.
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   525
    ].
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   526
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   527
    "Modified: 24.5.1996 / 17:48:44 / cg"
3493
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   528
!
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   529
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   530
sizeChanged:how
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   531
    "my size changed. Reposition the scrolledView, if required"
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   532
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   533
    super sizeChanged:how.
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   534
    self changed:#sizeOfContents.        "update possible scrollers"
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   535
4e0d00920e24 changed #setChildPositions
Claus Gittinger <cg@exept.de>
parents: 3492
diff changeset
   536
    self repositionScrolledView.
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   537
! !
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   538
3175
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   539
!ViewScroller methodsFor:'focus handling'!
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   540
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   541
canTab
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   542
    ^ false
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   543
! !
d82c95049597 changed #canTab
ca
parents: 3165
diff changeset
   544
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   545
!ViewScroller methodsFor:'initialization & release'!
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   546
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   547
initialize
2738
0058a8de3a0e Comment
Stefan Vogel <sv@exept.de>
parents: 2478
diff changeset
   548
    "initialize all models of the view"
0058a8de3a0e Comment
Stefan Vogel <sv@exept.de>
parents: 2478
diff changeset
   549
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   550
    super initialize.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   551
3249
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   552
    resizeScrolledViewVertical := false.
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   553
    resizeScrolledViewHorizontal := false.
224b457c40fd support resizeScrolledViewVertical and resizeScrolledViewHorizontal
ca
parents: 3175
diff changeset
   554
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   555
    frame := SimpleView origin:0.0@0.0 corner:1.0@1.0 in:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   556
    frame borderWidth:0; level:0.
3513
f74407d012e0 propagate viewBackground to the frame view
Stefan Vogel <sv@exept.de>
parents: 3508
diff changeset
   557
    frame viewBackground:self viewBackground.
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   558
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   559
    keepViewsChannel := false asValue.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   560
    keepViewsChannel addDependent:self.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   561
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   562
    model := nil asValue.
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   563
    model addDependent:self.
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   564
!
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   565
3326
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   566
realize
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   567
    super realize.
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   568
    self sensor addEventListener:self.
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   569
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   570
!
250f9f98b407 handle mouse-wheel
Claus Gittinger <cg@exept.de>
parents: 3261
diff changeset
   571
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   572
release
2738
0058a8de3a0e Comment
Stefan Vogel <sv@exept.de>
parents: 2478
diff changeset
   573
    "release all dependencies"
0058a8de3a0e Comment
Stefan Vogel <sv@exept.de>
parents: 2478
diff changeset
   574
2156
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   575
    keepViewsChannel removeDependent:self.
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   576
    model            removeDependent:self.
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   577
e16dc409ecf2 destroy - release
Claus Gittinger <cg@exept.de>
parents: 2124
diff changeset
   578
    super release.
2120
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   579
! !
3e3c3cc99589 allow changing of scrolledView and keepViews - flag
ca
parents: 2001
diff changeset
   580
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   581
!ViewScroller methodsFor:'queries-contents'!
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   582
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   583
heightOfContents
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   584
    "return my contents' height; this is the scrolledViews height"
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   585
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   586
    scrolledView isNil ifTrue:[^ super heightOfContents].
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   587
    ^ scrolledView height
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   588
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   589
    "Modified: 24.5.1996 / 17:34:48 / cg"
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   590
!
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   591
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   592
viewOrigin
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   593
    "the viewOrigin (for scrollBars) is based upon the scrolledViews origin"
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   594
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   595
    scrolledView isNil ifTrue:[^ 0@0].
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   596
    ^ scrolledView origin negated
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   597
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   598
    "Modified: 24.5.1996 / 17:48:13 / cg"
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   599
!
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   600
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   601
widthOfContents
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   602
    "return my contents' width; this is the scrolledViews width"
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   603
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   604
    scrolledView isNil ifTrue:[^ super widthOfContents].
186
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   605
    ^ scrolledView width
fe6a036f9cef Add documentation.
Stefan Vogel <sv@exept.de>
parents: 120
diff changeset
   606
187
36e76da4bb4e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 186
diff changeset
   607
    "Modified: 24.5.1996 / 17:34:56 / cg"
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   608
! !
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   609
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   610
!ViewScroller methodsFor:'scrolling'!
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   611
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   612
horizontalScrollStep
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   613
    "return the amount by which to step-scroll horizontally"
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   614
425
be88918a571b much better scrollStep amounts.
ca
parents: 424
diff changeset
   615
    ^ horizontalScrollStep ? (self width // 2)
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   616
!
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   617
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   618
scrollTo:aPoint
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   619
    "change origin of scrolledView to scroll to aPoint"
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   620
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   621
    |wCont hCont "{ Class:SmallInteger }"
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   622
     iw ih       "{ Class:SmallInteger }"
2001
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   623
     viewOrigin orgX orgY newX newY dX dY|
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   624
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   625
    scrolledView isNil ifTrue:[^ self].
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   626
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   627
    viewOrigin := scrolledView origin.
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   628
    orgX := viewOrigin x negated.
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   629
    orgY := viewOrigin y negated.
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   630
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   631
    newX := aPoint x.
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   632
    newY := aPoint y.
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   633
    wCont := self widthOfContents.
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   634
    hCont := self heightOfContents.
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   635
    iw := self innerWidth.
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   636
    ih := self innerHeight.
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   637
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   638
    ((newX + iw) > wCont) ifTrue:[
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   639
        newX := wCont - iw
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   640
    ].
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   641
    (newX < 0) ifTrue:[
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   642
        newX := 0
29
b1663ac8f532 Initial revision
claus
parents:
diff changeset
   643
    ].
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   644
    ((newY + ih) > hCont) ifTrue:[
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   645
        newY := hCont - ih
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   646
    ].
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   647
    (newY < 0) ifTrue:[
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   648
        newY := 0
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   649
    ].
2001
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   650
    dX := newX-orgX.
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   651
    dY := newY-orgY.
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   652
    ((dX ~= 0) or:[dY ~= 0]) ifTrue:[
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   653
        self originWillChange.
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   654
        scrolledView origin:(newX negated @ newY negated).
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   655
        self originChanged:(dX negated @ dY negated).
4fba7c3b5f53 dont scroll if scroll delta is 0
Claus Gittinger <cg@exept.de>
parents: 1466
diff changeset
   656
    ]
42
3f8d31db2b1c *** empty log message ***
claus
parents: 36
diff changeset
   657
236
20dba8483ad7 Make #scrollTo: the basic scrolling method.
Stefan Vogel <sv@exept.de>
parents: 187
diff changeset
   658
    "Modified: 21.8.1996 / 09:17:49 / stefan"
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   659
!
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   660
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   661
verticalScrollStep
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   662
    "return the amount by which to step-scroll vertically"
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   663
3498
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   664
    verticalScrollStep notNil ifTrue:[ ^ verticalScrollStep].
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   665
    ^ (device verticalPixelPerMillimeter * 20) asInteger
51d4abb4b298 mouseWheel handling fixed
Claus Gittinger <cg@exept.de>
parents: 3493
diff changeset
   666
"/    ^ (self height // 3)
42
3f8d31db2b1c *** empty log message ***
claus
parents: 36
diff changeset
   667
! !
3f8d31db2b1c *** empty log message ***
claus
parents: 36
diff changeset
   668
424
c66e66d82e02 care for nil scrolledView;
ca
parents: 236
diff changeset
   669
!ViewScroller class methodsFor:'documentation'!
120
daf50b3a54ff version method at the end
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   670
daf50b3a54ff version method at the end
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   671
version
3641
e466ec0abd6e No longer scroll the focus view for mouseWheel events.
Stefan Vogel <sv@exept.de>
parents: 3544
diff changeset
   672
    ^ '$Header: /cvs/stx/stx/libwidg2/ViewScroller.st,v 1.40 2009-02-24 18:29:34 stefan Exp $'
120
daf50b3a54ff version method at the end
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   673
! !