341
|
1 |
Object subclass:#DragAndDropManager
|
|
2 |
instanceVariableNames:'dragView motionAction releaseAction initialPoint previousPoint
|
|
3 |
rememberedDelegate'
|
|
4 |
classVariableNames:''
|
|
5 |
poolDictionaries:''
|
|
6 |
category:'Interface-Support'
|
|
7 |
!
|
|
8 |
|
|
9 |
View subclass:#DragAndDropTestClass
|
|
10 |
instanceVariableNames:''
|
|
11 |
classVariableNames:''
|
|
12 |
poolDictionaries:''
|
|
13 |
privateIn:DragAndDropManager
|
|
14 |
!
|
|
15 |
|
|
16 |
!DragAndDropManager class methodsFor:'documentation'!
|
|
17 |
|
|
18 |
history
|
|
19 |
|
|
20 |
"Created: 26.10.1996 / 15:02:00 / cg"
|
|
21 |
"Modified: 26.10.1996 / 15:21:42 / cg"
|
|
22 |
! !
|
|
23 |
|
|
24 |
!DragAndDropManager privateMethodsFor:'dragging - lines'!
|
|
25 |
|
|
26 |
doLineDragX:x y:y
|
|
27 |
previousPoint notNil ifTrue:[
|
|
28 |
self invertLineFrom:initialPoint to:previousPoint
|
|
29 |
].
|
|
30 |
previousPoint := x @ y.
|
|
31 |
self invertLineFrom:initialPoint to:previousPoint
|
|
32 |
|
|
33 |
"Modified: 26.10.1996 / 15:16:59 / cg"
|
|
34 |
!
|
|
35 |
|
|
36 |
endLineDragX:x y:y
|
|
37 |
previousPoint notNil ifTrue:[
|
|
38 |
self invertLineFrom:initialPoint to:previousPoint
|
|
39 |
].
|
|
40 |
previousPoint := nil.
|
|
41 |
self uncatchEvents
|
|
42 |
|
|
43 |
"Created: 26.10.1996 / 15:17:20 / cg"
|
|
44 |
"Modified: 26.10.1996 / 15:22:41 / cg"
|
|
45 |
!
|
|
46 |
|
|
47 |
invertLineFrom:ip1 to:ip2
|
|
48 |
|t offs p1 p2 rootView|
|
|
49 |
|
|
50 |
rootView := dragView device rootView.
|
|
51 |
|
|
52 |
p1 := ip1.
|
|
53 |
p2 := ip2.
|
|
54 |
|
|
55 |
"
|
|
56 |
get device coordinates
|
|
57 |
"
|
|
58 |
(t := dragView transformation) notNil ifTrue:[
|
|
59 |
p1 := t applyTo:p1.
|
|
60 |
p2 := t applyTo:p2.
|
|
61 |
].
|
|
62 |
|
|
63 |
"
|
|
64 |
translate to screen
|
|
65 |
"
|
|
66 |
offs := dragView device
|
|
67 |
translatePoint:0@0
|
|
68 |
from:(dragView id) to:(rootView id).
|
|
69 |
p1 := p1 + offs.
|
|
70 |
p2 := p2 + offs.
|
|
71 |
|
|
72 |
rootView clippedByChildren:false.
|
|
73 |
rootView xoring:[
|
|
74 |
rootView lineWidth:0.
|
|
75 |
rootView displayLineFrom:p1 to:p2.
|
|
76 |
rootView flush
|
|
77 |
].
|
|
78 |
|
|
79 |
"Created: 26.10.1996 / 15:15:26 / cg"
|
|
80 |
"Modified: 26.10.1996 / 15:27:09 / cg"
|
|
81 |
! !
|
|
82 |
|
|
83 |
!DragAndDropManager methodsFor:'dragging - lines'!
|
|
84 |
|
|
85 |
setupForLineDragFrom:aView at:p
|
|
86 |
self catchEventsFrom:aView.
|
|
87 |
motionAction := #doLineDragX:y:.
|
|
88 |
releaseAction := #endLineDragX:y:.
|
|
89 |
initialPoint := p.
|
|
90 |
previousPoint := nil
|
|
91 |
|
|
92 |
"Modified: 26.10.1996 / 15:09:26 / cg"
|
|
93 |
"Created: 26.10.1996 / 15:16:13 / cg"
|
|
94 |
! !
|
|
95 |
|
|
96 |
!DragAndDropManager methodsFor:'event catching'!
|
|
97 |
|
|
98 |
buttonMotion:button x:x y:y view:aView
|
|
99 |
self perform:motionAction with:x with:y
|
|
100 |
|
|
101 |
"Created: 26.10.1996 / 15:09:00 / cg"
|
|
102 |
!
|
|
103 |
|
|
104 |
buttonRelease:button x:x y:y view:aView
|
|
105 |
self perform:releaseAction with:x with:y
|
|
106 |
|
|
107 |
"Created: 26.10.1996 / 15:09:14 / cg"
|
|
108 |
!
|
|
109 |
|
|
110 |
handlesButtonMotion:button inView:aView
|
|
111 |
"query from event processor: am I interested in button-events ?
|
|
112 |
yes I am (to activate the clicked-on field)."
|
|
113 |
|
|
114 |
^ aView == dragView
|
|
115 |
|
|
116 |
"Created: 26.10.1996 / 15:05:36 / cg"
|
|
117 |
!
|
|
118 |
|
|
119 |
handlesButtonRelease:button inView:aView
|
|
120 |
"query from event processor: am I interested in button-events ?
|
|
121 |
yes I am (to activate the clicked-on field)."
|
|
122 |
|
|
123 |
^ aView == dragView
|
|
124 |
|
|
125 |
"Created: 26.10.1996 / 15:05:48 / cg"
|
|
126 |
! !
|
|
127 |
|
|
128 |
!DragAndDropManager methodsFor:'private'!
|
|
129 |
|
|
130 |
catchEventsFrom:aView
|
|
131 |
dragView := aView.
|
|
132 |
rememberedDelegate := aView delegate.
|
|
133 |
aView delegate:self
|
|
134 |
|
|
135 |
"Created: 26.10.1996 / 15:03:12 / cg"
|
|
136 |
"Modified: 26.10.1996 / 15:21:57 / cg"
|
|
137 |
!
|
|
138 |
|
|
139 |
uncatchEvents
|
|
140 |
dragView delegate:rememberedDelegate.
|
|
141 |
dragView := nil.
|
|
142 |
|
|
143 |
"Created: 26.10.1996 / 15:22:29 / cg"
|
|
144 |
! !
|
|
145 |
|
|
146 |
!DragAndDropManager::DragAndDropTestClass methodsFor:'events'!
|
|
147 |
|
|
148 |
buttonPress:button x:x y:y
|
|
149 |
DragAndDropManager new
|
|
150 |
setupForLineDragFrom:self at:(x@y)
|
|
151 |
|
|
152 |
"
|
|
153 |
self new open
|
|
154 |
"
|
|
155 |
! !
|
|
156 |
|
|
157 |
!DragAndDropManager class methodsFor:'documentation'!
|
|
158 |
|
|
159 |
version
|
|
160 |
^ '$Header: /cvs/stx/stx/libview2/DragAndDropManager.st,v 1.1 1996-10-26 14:40:21 cg Exp $'
|
|
161 |
! !
|