Controll.st
author claus
Mon, 06 Feb 1995 01:38:04 +0100
changeset 89 ea2bf46eb669
parent 86 032006651226
child 92 7edb04821bef
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
48194c26a46c Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
     3
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
48194c26a46c Initial revision
claus
parents:
diff changeset
    12
48194c26a46c Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Controller
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    14
       instanceVariableNames:'model view'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
48194c26a46c Initial revision
claus
parents:
diff changeset
    17
       category:'Interface-Support'
48194c26a46c Initial revision
claus
parents:
diff changeset
    18
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    19
48194c26a46c Initial revision
claus
parents:
diff changeset
    20
Controller comment:'
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    21
COPYRIGHT (c) 1992 by Claus Gittinger
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    22
	      All Rights Reserved
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
    23
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    24
$Header: /cvs/stx/stx/libview/Attic/Controll.st,v 1.9 1995-02-06 00:35:35 claus Exp $
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    25
'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    26
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    27
!Controller class methodsFor:'documentation'!
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    28
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    29
copyright
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    30
"
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    31
 COPYRIGHT (c) 1992 by Claus Gittinger
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    32
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    33
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    34
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    35
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    37
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    38
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    39
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    40
"
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    41
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    42
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    43
version
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    44
"
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    45
$Header: /cvs/stx/stx/libview/Attic/Controll.st,v 1.9 1995-02-06 00:35:35 claus Exp $
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    46
"
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    47
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    48
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    49
documentation
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    50
"
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    51
    Controllers can be used to controll the user-interactions
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    52
    to a model which is shown in a view. For very simple views,
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    53
    (and due to the evolution of Smalltalk/X) many view-classes have
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    54
    the controller function integrated.
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    55
    To allow both controller and non-controller operation, events are
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    56
    sent directly to the view, if its controller instance variable
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    57
    is nil. Otherwise, the controller gets the event.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    58
    For now (vsn 2.10.4) there are only a few view classes using controllers;
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    59
    however, over time, more will be converted, since separating the controller
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    60
    offers much more flexibility (although view initialization becomes a bit more complex).
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    61
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    62
    Instance variables:
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    63
	view        aView               the view I controll
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    64
	model       aModel              the model which is to be worked on
46
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    65
"
7b331e9012fd *** empty log message ***
claus
parents: 12
diff changeset
    66
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    67
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    68
!Controller class methodsFor:'instance creation'!
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    69
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    70
new
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    71
    ^ self basicNew initialize
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    72
! !
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
    73
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    74
!Controller methodsFor:'initialize / release'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    75
48194c26a46c Initial revision
claus
parents:
diff changeset
    76
initialize
48194c26a46c Initial revision
claus
parents:
diff changeset
    77
    "initialize the controller; subclasses should redefine
48194c26a46c Initial revision
claus
parents:
diff changeset
    78
     this and include a super initialize for proper initialization."
48194c26a46c Initial revision
claus
parents:
diff changeset
    79
48194c26a46c Initial revision
claus
parents:
diff changeset
    80
    ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
    81
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    82
48194c26a46c Initial revision
claus
parents:
diff changeset
    83
release
48194c26a46c Initial revision
claus
parents:
diff changeset
    84
    view controller:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
    85
    view := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
    86
    model := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
    87
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
    88
48194c26a46c Initial revision
claus
parents:
diff changeset
    89
!Controller methodsFor:'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    90
48194c26a46c Initial revision
claus
parents:
diff changeset
    91
view:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
    92
    "set my view"
48194c26a46c Initial revision
claus
parents:
diff changeset
    93
48194c26a46c Initial revision
claus
parents:
diff changeset
    94
    view notNil ifTrue:[
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    95
	model notNil ifTrue:[
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    96
	    model removeDependent:view
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
    97
	]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    98
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
    99
    view := aView.
48194c26a46c Initial revision
claus
parents:
diff changeset
   100
    model notNil ifTrue:[
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   101
	model addDependent:view
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   102
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   103
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   104
48194c26a46c Initial revision
claus
parents:
diff changeset
   105
view
48194c26a46c Initial revision
claus
parents:
diff changeset
   106
    "return my view"
48194c26a46c Initial revision
claus
parents:
diff changeset
   107
48194c26a46c Initial revision
claus
parents:
diff changeset
   108
    ^ view
48194c26a46c Initial revision
claus
parents:
diff changeset
   109
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
48194c26a46c Initial revision
claus
parents:
diff changeset
   111
model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
   112
    "set my model"
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
48194c26a46c Initial revision
claus
parents:
diff changeset
   114
    model notNil ifTrue:[
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   115
	model removeDependent:view
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   116
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
    model := aModel.
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
    model notNil ifTrue:[model addDependent:view]
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
model
48194c26a46c Initial revision
claus
parents:
diff changeset
   122
    "return my model"
48194c26a46c Initial revision
claus
parents:
diff changeset
   123
48194c26a46c Initial revision
claus
parents:
diff changeset
   124
    ^ view model
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   125
! !
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   126
86
032006651226 *** empty log message ***
claus
parents: 80
diff changeset
   127
!Controller methodsFor:'event handling'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   128
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   129
redButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   130
    "actually, this should be called 'leftButtonActivity'.
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   131
     But for ST-80 compatibility ...."
12
9f0995fac1fa *** empty log message ***
claus
parents: 9
diff changeset
   132
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   133
    ^ self
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   134
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   135
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   136
yellowButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   137
    "actually, this should be called 'middleButtonActivity'.
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   138
     But for ST-80 compatibility ...."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   139
89
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   140
    |sym menu actionSelector|
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   141
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   142
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   143
     try ST-80 style menus first:
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   144
     if there is a model, and a menuSymbol is defined,
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   145
     ask model for the menu and launch that if non-nil.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   146
    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   147
    (model notNil 
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   148
    and:[(sym := view menuSymbol) notNil
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   149
    and:[sym isSymbol]]) ifTrue:[
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   150
	"
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   151
	 ask model for the menu
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   152
	"
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   153
	menu := model perform:sym.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   154
	menu notNil ifTrue:[
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   155
	    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   156
	     got one, launch the menu. It is supposed
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   157
	     to return an actionSelector.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   158
	    "
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   159
	    actionSelector := menu startUp.
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   160
	    (actionSelector notNil
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   161
	    and:[actionSelector isSymbol]) ifTrue:[
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   162
		model perform:actionSelector
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   163
	    ]
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   164
	].
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   165
	^ self
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   166
    ].
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   167
    view middleButtonMenu notNil ifTrue:[
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   168
	view middleButtonMenu showAtPointer
ea2bf46eb669 *** empty log message ***
claus
parents: 86
diff changeset
   169
    ]
12
9f0995fac1fa *** empty log message ***
claus
parents: 9
diff changeset
   170
!
9f0995fac1fa *** empty log message ***
claus
parents: 9
diff changeset
   171
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   172
blueButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   173
    "actually, this should be called 'rightButtonActivity'.
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   174
     But for ST-80 compatibility ...."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   175
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   176
    ^ self
9
f6be32b2a007 last version before processes
claus
parents: 3
diff changeset
   177
! !
f6be32b2a007 last version before processes
claus
parents: 3
diff changeset
   178
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   179
!Controller methodsFor:'low level events'!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   180
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   181
buttonPress:button x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   182
    "translate buttonPress events into similar ST-80 type
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   183
     event messages. These could be redefined in subclasses"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   184
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   185
    ((button == 1) or:[button == #select]) ifTrue:[
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   186
	self redButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   187
    ].
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   188
    ((button == 2) or:[button == #menu]) ifTrue:[
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   189
	self yellowButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   190
    ].
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   191
    (button == 3) ifTrue:[
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   192
	self blueButtonActivity
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   193
    ]
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   194
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   195
80
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   196
buttonRelease:button x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   197
    ^ self
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   198
!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   199
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   200
buttonMotion:buttonMask x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   201
    ^ self
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   202
!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   203
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   204
pointerEnter:state x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   205
    ^ self
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   206
!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   207
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   208
pointerLeave:state
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   209
    ^ self
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   210
!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   211
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   212
keyPress:key x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   213
    ^ self
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   214
!
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   215
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   216
keyRelease:key x:x y:y
eb8373679a9f *** empty log message ***
claus
parents: 54
diff changeset
   217
    ^ self
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   218
! !