DragAndDropManager.st
author ca
Tue, 11 Feb 1997 20:09:24 +0100
changeset 411 8b8b0128d129
parent 401 85a4dee5b006
child 513 8334721d93bb
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
Object subclass:#DragAndDropManager
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
	instanceVariableNames:'dragView motionAction releaseAction initialPoint previousPoint
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
     3
		rememberedDelegate dragBlock lineMode dropAction opaque saveUnder
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
     4
		dragSize dragOffset dropObjects saveCursor lastView'
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Interface-Support'
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    10
View subclass:#DemoView
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    11
	instanceVariableNames:''
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    12
	classVariableNames:''
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    13
	poolDictionaries:''
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    14
	privateIn:DragAndDropManager
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    15
!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    16
343
3a611a1f882d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 342
diff changeset
    17
View subclass:#DemoView2
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    18
	instanceVariableNames:''
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    19
	classVariableNames:''
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    20
	poolDictionaries:''
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    21
	privateIn:DragAndDropManager
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    22
!
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
    23
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
    24
View subclass:#DemoView3
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	instanceVariableNames:''
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	classVariableNames:''
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	poolDictionaries:''
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	privateIn:DragAndDropManager
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!DragAndDropManager class methodsFor:'documentation'!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    33
documentation
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    34
"
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    35
    this class provides low-level drag & drop mechanisms.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    36
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    37
    [author:]
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    38
        Claus Gittinger
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    39
"
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    40
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    41
!
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
    42
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
history
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    "Created: 26.10.1996 / 15:02:00 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    "Modified: 26.10.1996 / 15:21:42 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
! !
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    49
!DragAndDropManager class methodsFor:'simple start'!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    50
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    51
startDrag:anObjectOrCollection from:aView
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    52
    "start a drop at the current pointer position"
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    53
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    54
    (self new) startDrag:anObjectOrCollection from:aView offset:0@0
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    55
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    56
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    57
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    58
     |o v|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    59
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    60
     v := (Button label:'press me').
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    61
     v pressAction:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    62
                |o|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    63
                o := DropObject newFile:('.').
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    64
                DragAndDropManager startDrag:o from:v.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    65
                v turnOff
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    66
              ].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    67
     v openAt:100@100
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    68
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    69
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    70
!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    71
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    72
startDrag:anObjectOrCollection from:aView offset:offset
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    73
    "start a drop at the current pointer position"
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    74
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    75
    (self new) startDrag:anObjectOrCollection from:aView offset:offset
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    76
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    77
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    78
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    79
     |o v|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    80
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    81
     v := (Button label:'press me').
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    82
     v pressAction:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    83
                |o|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    84
                o := DropObject newFile:('.').
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    85
                DragAndDropManager startDrag:o from:v offset:10@10.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    86
                v turnOff
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    87
              ].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    88
     v openAt:100@100
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    89
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    90
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    91
! !
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    92
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
    93
!DragAndDropManager methodsFor:'accessing'!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
    94
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    95
dropObjects
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    96
    ^ dropObjects
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    97
!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    98
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
    99
dropObjects:anObjectOrCollection
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   100
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   101
    anObjectOrCollection isCollection ifTrue:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   102
        dropObjects := anObjectOrCollection
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   103
    ] ifFalse:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   104
        dropObjects := Array with:anObjectOrCollection
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   105
    ].
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   106
! !
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   107
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   108
!DragAndDropManager methodsFor:'dragging - generic'!
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   109
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   110
doGenericDragX:x y:y
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   111
    |view|
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   112
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   113
    previousPoint notNil ifTrue:[
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   114
        opaque ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   115
            self restoreGenericAt:previousPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   116
        ] ifFalse:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   117
            self invertGenericAt:previousPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   118
        ]
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   119
    ].
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   120
    previousPoint := x @ y.
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   121
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   122
    view := self destinationViewAt:previousPoint.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   123
    view ~~ lastView ifTrue:[
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   124
        view isNil ifTrue:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   125
            "/ alien view
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   126
            dragView cursor:(Cursor questionMark) now:true
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   127
        ] ifFalse:[
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   128
            "/ ST/X view
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   129
            (view canDrop:dropObjects) ifTrue:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   130
                dragView cursor:(Cursor thumbsUp) now:true.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   131
            ] ifFalse:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   132
                dragView cursor:(Cursor thumbsDown) now:true
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   133
            ]
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   134
        ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   135
        lastView := view
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   136
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   137
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   138
    opaque ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   139
        self drawGenericAt:previousPoint.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   140
    ] ifFalse:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   141
        self invertGenericAt:previousPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   142
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   143
!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   144
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   145
drawGenericAt:ip
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   146
    |t offs p rootView|
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   147
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   148
    rootView := dragView device rootView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   149
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   150
    p := ip.
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   151
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   152
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   153
     get device coordinates
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   154
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   155
    (t := dragView transformation) notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   156
        p := t applyTo:p.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   157
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   158
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   159
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   160
     translate to screen
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   161
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   162
    offs := dragView device 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   163
                translatePoint:0@0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   164
                from:(dragView id) to:(rootView id).
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   165
    p := p + offs.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   166
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   167
    rootView clippedByChildren:false.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   168
    saveUnder isNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   169
        saveUnder := Form width:dragSize x height:dragSize y depth:rootView device depth on:dragView device.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   170
        saveUnder clippedByChildren:false.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   171
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   172
    saveUnder 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   173
        copyFrom:rootView 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   174
        x:p x - dragOffset x 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   175
        y:p y - dragOffset y
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   176
        toX:0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   177
        y:0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   178
        width:dragSize x 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   179
        height:dragSize y.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   180
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   181
    rootView lineWidth:0. 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   182
    dragBlock value:p value:rootView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   183
    rootView flush
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   184
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   185
!
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   186
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   187
endGenericDragX:x y:y
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   188
    previousPoint notNil ifTrue:[
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   189
        opaque ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   190
            self restoreGenericAt:previousPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   191
        ] ifFalse:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   192
            self invertGenericAt:previousPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   193
        ]
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   194
    ].
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   195
    previousPoint := nil.
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   196
    self uncatchEvents.
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   197
    self endDragAt:x @ y
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   198
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   199
    "Created: 26.10.1996 / 15:17:20 / cg"
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   200
    "Modified: 26.10.1996 / 15:22:41 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   201
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   202
!
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   203
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   204
invertGenericAt:ip
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   205
    |t offs p rootView|
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   206
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   207
    rootView := dragView device rootView.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   208
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   209
    p := ip.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   210
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   211
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   212
     get device coordinates
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   213
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   214
    (t := dragView transformation) notNil ifTrue:[
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   215
        p := t applyTo:p.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   216
    ].
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   217
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   218
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   219
     translate to screen
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   220
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   221
    offs := dragView device 
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   222
                translatePoint:0@0 
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   223
                from:(dragView id) to:(rootView id).
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   224
    p := p + offs.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   225
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   226
    rootView clippedByChildren:false.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   227
    rootView xoring:[
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   228
        rootView lineWidth:0. 
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   229
        dragBlock value:p value:rootView.
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   230
        rootView flush
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   231
    ].
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   232
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   233
    "Created: 26.10.1996 / 15:15:26 / cg"
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   234
    "Modified: 26.10.1996 / 15:27:09 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   235
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   236
!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   237
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   238
restoreGenericAt:ip
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   239
    |t offs p rootView|
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   240
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   241
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   242
    rootView := dragView device rootView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   243
    p := ip.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   244
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   245
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   246
     get device coordinates
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   247
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   248
    (t := dragView transformation) notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   249
        p := t applyTo:p.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   250
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   251
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   252
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   253
     translate to screen
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   254
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   255
    offs := dragView device 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   256
                translatePoint:0@0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   257
                from:(dragView id) to:(rootView id).
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   258
    p := p + offs.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   259
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   260
    rootView clippedByChildren:false.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   261
    rootView 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   262
        copyFrom:saveUnder 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   263
        x:0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   264
        y:0 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   265
        toX:p x - dragOffset x
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   266
        y:p y - dragOffset y
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   267
        width:dragSize x 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   268
        height:dragSize y.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   269
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   270
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   271
!
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   272
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   273
startGenericDrag:aTwoArgDragBlock in:aView at:p atEnd:aFourArgEndBlock
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   274
    "start a generic (caller-provided drag);
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   275
     the dragBlock, aTwoArgDragBlock will be called with two args
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   276
     aPoint and a drawingGC, to perform the drawing at some dragPoint.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   277
     The drag starts in aView at point p.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   278
     When finished, the endAction is called with four args:
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   279
     the targetView, the targetViews windowID (useful, if its an alien view),
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   280
     the dropPoint in root-coordinates and the dropPoint within the targetView"
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   281
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   282
    self catchEventsFrom:aView.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   283
    motionAction := #doGenericDragX:y:.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   284
    releaseAction := #endGenericDragX:y:.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   285
    initialPoint := p.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   286
    previousPoint := nil.
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   287
    dragBlock := aTwoArgDragBlock.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   288
    dropAction := aFourArgEndBlock.
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   289
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   290
    "Modified: 26.10.1996 / 15:09:26 / cg"
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   291
    "Created: 26.10.1996 / 15:16:13 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   292
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   293
!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   294
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   295
startOpaqueDrag:aTwoArgDragBlock offset:offs extent:ext in:aView at:p atEnd:aFourArgEndBlock
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   296
    "start a generic opaque (caller-provided drag);
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   297
     opaque drag means, that the drawing cannot be undone by two inverting
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   298
     draws, but instead, the area under the dragged object must be saved
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   299
     and restored. The areas size to be saved/restored is passed in ext.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   300
     the dragBlock, aTwoArgDragBlock will be called with two args
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   301
     aPoint and a drawingGC, to perform the drawing at some dragPoint.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   302
     The drag starts in aView at point p.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   303
     When finished, the endAction is called with four args:
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   304
     the targetView, the targetViews windowID (useful, if its an alien view),
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   305
     the dropPoint in root-coordinates and the dropPoint within the targetView"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   306
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   307
    self catchEventsFrom:aView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   308
    motionAction := #doGenericDragX:y:.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   309
    releaseAction := #endGenericDragX:y:.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   310
    initialPoint := p.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   311
    previousPoint := nil.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   312
    dragBlock := aTwoArgDragBlock.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   313
    dropAction := aFourArgEndBlock.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   314
    opaque := true.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   315
    dragSize := ext.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   316
    dragOffset := offs.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   317
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   318
    "Modified: 26.10.1996 / 15:09:26 / cg"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   319
    "Created: 26.10.1996 / 15:16:13 / cg"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   320
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   321
! !
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   322
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   323
!DragAndDropManager methodsFor:'dragging - lines'!
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
doLineDragX:x y:y
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    previousPoint notNil ifTrue:[
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
        self invertLineFrom:initialPoint to:previousPoint
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    ].
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
    previousPoint := x @ y.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    self invertLineFrom:initialPoint to:previousPoint
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    "Modified: 26.10.1996 / 15:16:59 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   333
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   334
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
endLineDragX:x y:y
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
    previousPoint notNil ifTrue:[
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
        self invertLineFrom:initialPoint to:previousPoint
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
    ].
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
    previousPoint := nil.
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   342
    self uncatchEvents.
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   343
    self endDragAt:x @ y
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
    "Created: 26.10.1996 / 15:17:20 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    "Modified: 26.10.1996 / 15:22:41 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   347
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
invertLineFrom:ip1 to:ip2
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   351
    |t offs p1 p2 rootView a|
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    rootView := dragView device rootView.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
    p1 := ip1.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    p2 := ip2.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
     get device coordinates
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    (t := dragView transformation) notNil ifTrue:[
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
        p1 := t applyTo:p1.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
        p2 := t applyTo:p2.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    ].
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
     translate to screen
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    offs := dragView device 
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
                translatePoint:0@0 
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
                from:(dragView id) to:(rootView id).
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    p1 := p1 + offs.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
    p2 := p2 + offs.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
    rootView clippedByChildren:false.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
    rootView xoring:[
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
        rootView lineWidth:0. 
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   378
        lineMode == #arrow ifTrue:[
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   379
            a := Arrow from:p1 to:p2.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   380
            a arrowHeadLength:(rootView device horizontalPixelPerMillimeter * 4) rounded.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   381
            a displayFilledOn:rootView.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   382
        ] ifFalse:[
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   383
            rootView displayLineFrom:p1 to:p2.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   384
        ].
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
        rootView flush
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
    ].
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    "Created: 26.10.1996 / 15:15:26 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
    "Modified: 26.10.1996 / 15:27:09 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   390
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   391
!
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   393
startArrowDragIn:aView at:p atEnd:aBlock
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   394
    "start a line-drag of an arrow-line.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   395
     The drag starts in aView at point p.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   396
     When finished, the endAction is called with four args:
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   397
     the targetView, the targetViews windowID (useful, if its an alien view),
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   398
     the dropPoint in root-coordinates and the dropPoint within the targetView"
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   399
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   400
    self catchEventsFrom:aView.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   401
    motionAction := #doLineDragX:y:.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   402
    releaseAction := #endLineDragX:y:.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   403
    initialPoint := p.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   404
    previousPoint := nil.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   405
    dragBlock := nil.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   406
    lineMode := #arrow.
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   407
    dropAction := aBlock.
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   408
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   409
    "Modified: 26.10.1996 / 15:09:26 / cg"
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   410
    "Created: 26.10.1996 / 15:16:13 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   411
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   412
!
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   414
startLineDragIn:aView at:p atEnd:aFourArgEndBlock
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   415
    "start a line-drag of a normal line.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   416
     The drag starts in aView at point p.
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   417
     When finished, the endAction is called with four args:
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   418
     the targetView, the targetViews windowID (useful, if its an alien view),
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   419
     the dropPoint in root-coordinates and the dropPoint within the targetView"
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   420
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
    self catchEventsFrom:aView.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    motionAction := #doLineDragX:y:.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
    releaseAction := #endLineDragX:y:.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
    initialPoint := p.
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   425
    previousPoint := nil.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   426
    dragBlock := nil.
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   427
    lineMode := nil.
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   428
    dropAction := aFourArgEndBlock.
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    "Modified: 26.10.1996 / 15:09:26 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    "Created: 26.10.1996 / 15:16:13 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   432
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
! !
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   435
!DragAndDropManager methodsFor:'drawing'!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   436
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   437
showDragging:items in:aView at:p
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   438
    |offs|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   439
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   440
    items size > 1 ifTrue:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   441
        offs := 0.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   442
        items do:[:item |
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   443
            item displayOn:aView at:p + (0@offs).
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   444
            offs := offs + (item heightOn:self)
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   445
        ]
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   446
    ] ifFalse:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   447
        items first displayOn:aView at:p.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   448
    ]
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   449
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   450
    "Created: 14.11.1996 / 15:31:31 / cg"
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   451
    "Modified: 14.11.1996 / 16:32:00 / cg"
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   452
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   453
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   454
! !
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   455
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   456
!DragAndDropManager methodsFor:'easy drag & drop'!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   457
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   458
startDrag:anObjectOrCollection from:aView offset:offset
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   459
    "start a drop at the current pointer position"
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   460
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   461
    |pos displayObjects device width height|
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   462
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   463
    self dropObjects:anObjectOrCollection.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   464
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   465
    device := aView device.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   466
    pos := device translatePoint:(device pointerPosition)
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   467
                            from:(device rootView id) 
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   468
                              to:(aView id).
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   469
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   470
    displayObjects := dropObjects collect:[:each | each displayObject on:device].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   471
    height := displayObjects inject:0 into:[:sum :each | sum + (each heightOn:aView)].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   472
    width  := displayObjects inject:0 into:[:max :each | max max:(each widthOn:aView)].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   473
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   474
    self startOpaqueDrag:[:aPoint :aView|self showDragging:displayObjects in:aView at:(aPoint - offset)]
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   475
                  offset:offset
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   476
                  extent:(width @ height)
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   477
                      in:aView
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   478
                      at:pos
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   479
                   atEnd:nil.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   480
! !
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   481
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
!DragAndDropManager methodsFor:'event catching'!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
buttonMotion:button x:x y:y view:aView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
    self perform:motionAction with:x with:y
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
    "Created: 26.10.1996 / 15:09:00 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   488
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   489
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
buttonRelease:button x:x y:y view:aView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
    self perform:releaseAction with:x with:y
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
    "Created: 26.10.1996 / 15:09:14 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   496
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   497
!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   498
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   499
drop:something in:targetView at:aPoint from:sourceView ifOk:okAction ifFail:failAction
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   500
    "try to drop some object in a targetView;
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   501
     if the targetView takes it, okAction is evaluated ;
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   502
     if not, failAction is evaluated"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   503
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   504
    (targetView canDrop:something) ifFalse:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   505
        failAction value.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   506
        ^ false
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   507
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   508
    targetView drop:something at:aPoint from:sourceView 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   509
               with:[:o | okAction. ^ true]
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   510
               ifFail:[:o | failAction. ^ false].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   511
    ^ false
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   512
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   513
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   514
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   515
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   516
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
handlesButtonMotion:button inView:aView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    "query from event processor: am I interested in button-events ?
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
     yes I am (to activate the clicked-on field)."
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
    ^ aView == dragView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
    "Created: 26.10.1996 / 15:05:36 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   526
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
handlesButtonRelease:button inView:aView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
    "query from event processor: am I interested in button-events ?
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
     yes I am (to activate the clicked-on field)."
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    ^ aView == dragView
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
    "Created: 26.10.1996 / 15:05:48 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   536
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
! !
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
!DragAndDropManager methodsFor:'private'!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
catchEventsFrom:aView
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   542
    dragView   := aView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   543
    saveCursor := dragView cursor.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   544
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
    rememberedDelegate := aView delegate.
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   546
    aView delegate:self.
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
    "Created: 26.10.1996 / 15:03:12 / cg"
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
    "Modified: 26.10.1996 / 15:21:57 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   550
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   551
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   552
!
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   553
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   554
destinationViewAt:ip
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   555
    |rootPoint t viewId offs destinationId lastViewId destinationView
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   556
     rootView destinationPoint device|
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   557
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   558
    device    := dragView device.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   559
    rootView  := device rootView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   560
    rootPoint := ip.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   561
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   562
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   563
     get device coordinates
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   564
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   565
    (t := dragView transformation) notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   566
        rootPoint := t applyTo:ip.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   567
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   568
    viewId := rootView id.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   569
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   570
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   571
     translate to screen
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   572
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   573
    offs := device translatePoint:0@0 from:(dragView id) to:viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   574
    rootPoint := rootPoint + offs.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   575
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   576
    "search view the drop is in"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   577
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   578
    [viewId notNil] whileTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   579
        destinationId := device viewIdFromPoint:rootPoint in:viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   580
        lastViewId := viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   581
        viewId := destinationId
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   582
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   583
    ^ device viewFromId:lastViewId
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   586
endDragAt:ip
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   587
    |rootPoint t viewId offs destinationId lastViewId destinationView
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   588
     rootView destinationPoint device|
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   589
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   590
    dragView cursor:saveCursor now:true.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   591
    device := dragView device.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   592
    rootView := device rootView.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   593
    rootPoint := ip.
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   594
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   595
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   596
     get device coordinates
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   597
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   598
    (t := dragView transformation) notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   599
        rootPoint := t applyTo:ip.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   600
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   601
    viewId := rootView id.
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   602
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   603
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   604
     translate to screen
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   605
    "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   606
    offs := device translatePoint:0@0 from:(dragView id) to:viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   607
    rootPoint := rootPoint + offs.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   608
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   609
    "search view the drop is in"
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   610
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   611
    [viewId notNil] whileTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   612
        destinationId := device viewIdFromPoint:rootPoint in:viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   613
        lastViewId := viewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   614
        viewId := destinationId
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   615
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   616
    destinationView := device viewFromId:lastViewId.
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   617
    destinationId := lastViewId.
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   618
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   619
    "into another one"
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   620
    destinationView notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   621
        destinationPoint := device translatePoint:rootPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   622
                                             from:(rootView id) 
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   623
                                               to:(destinationView id).
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   624
        destinationView transformation notNil ifTrue:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   625
            destinationPoint := destinationView transformation applyInverseTo:destinationPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   626
        ]
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   627
    ] ifFalse:[
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   628
        "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   629
         not one of my views
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   630
        "
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   631
    ].
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   632
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   633
    dropAction isNil ifTrue:[
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   634
        "/ XXX add external clipboard mechanism via display
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   635
        (destinationView notNil and:[destinationView canDrop:dropObjects]) ifTrue:[
401
85a4dee5b006 drop:to: -> drop:at:
ca
parents: 397
diff changeset
   636
            destinationView drop:dropObjects at:destinationPoint
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   637
        ].
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   638
        ^ self
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   639
    ].
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   640
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   641
    dropAction value:destinationView
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   642
               value:destinationId
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   643
               value:rootPoint
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   644
               value:destinationPoint
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   645
!
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   646
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
uncatchEvents
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
    dragView delegate:rememberedDelegate.
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
    "Created: 26.10.1996 / 15:22:29 / cg"
394
0539d7b29aa7 *** empty log message ***
ca
parents: 348
diff changeset
   651
411
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   652
    "
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   653
     DragAndDropManager allInstancesDo:[:m |
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   654
        m uncatchEvents
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   655
     ]
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   656
    "
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
! !
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
397
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   659
!DragAndDropManager::DemoView methodsFor:'events'!
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   660
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   661
buttonPress:button x:x y:y
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   662
    DragAndDropManager new
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   663
        startLineDragIn:self at:(x@y) 
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   664
        atEnd:[:view
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   665
               :viewID
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   666
               :rootPoint
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   667
               :viewPoint | 
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   668
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   669
               Transcript show:'dropped at ';
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   670
                          show:viewPoint;
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   671
                          show:' in '.
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   672
               view notNil ifTrue:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   673
                   Transcript showCR:view
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   674
               ] ifFalse:[
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   675
                   Transcript show:'alien view ';
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   676
                              showCR:viewID address
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   677
               ] 
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   678
        ].
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   679
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   680
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   681
     self new open
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   682
    "
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   683
! !
7ad4e53d8f49 *** empty log message ***
ca
parents: 394
diff changeset
   684
343
3a611a1f882d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 342
diff changeset
   685
!DragAndDropManager::DemoView2 methodsFor:'events'!
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   686
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   687
buttonPress:button x:x y:y
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   688
    DragAndDropManager new
348
74f1fda9deb0 more args & comments
Claus Gittinger <cg@exept.de>
parents: 346
diff changeset
   689
        startGenericDrag:[:p :v | v displayString:'hello' at:p]
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   690
        in:self 
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   691
        at:(x@y) 
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   692
        atEnd:[:view
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   693
               :viewID
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   694
               :rootPoint
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   695
               :viewPoint | ]
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   696
342
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   697
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   698
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   699
     self new open
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   700
    "
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   701
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   702
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   703
! !
7563cbf04502 added genericDrag & arrowDrag
Claus Gittinger <cg@exept.de>
parents: 341
diff changeset
   704
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   705
!DragAndDropManager::DemoView3 methodsFor:'events'!
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
buttonPress:button x:x y:y
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
    DragAndDropManager new
345
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   709
        startArrowDragIn:self 
626e8241dc76 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 343
diff changeset
   710
        at:(x@y)
346
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   711
        atEnd:[:view
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   712
               :viewID
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   713
               :rootPoint
1612c23d9c5d pass all dropInfo to an end-action
Claus Gittinger <cg@exept.de>
parents: 345
diff changeset
   714
               :viewPoint | ]
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
     self new open
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
    "
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
! !
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
!DragAndDropManager class methodsFor:'documentation'!
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
version
411
8b8b0128d129 *** empty log message ***
ca
parents: 401
diff changeset
   724
    ^ '$Header: /cvs/stx/stx/libview2/DragAndDropManager.st,v 1.10 1997-02-11 19:09:24 ca Exp $'
341
5afe98e6185b intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
! !