HierarchicalDropTargetController.st
author Claus Gittinger <cg@exept.de>
Fri, 15 Jun 2018 10:54:35 +0200
changeset 5816 7876c07931a7
parent 5813 bbfae6ced887
permissions -rw-r--r--
#DOCUMENTATION by cg class: ComboListView class comment/format in: #documentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5813
bbfae6ced887 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5142
diff changeset
     1
"{ Encoding: utf8 }"
bbfae6ced887 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5142
diff changeset
     2
3756
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     3
"
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     4
 COPYRIGHT (c) 2008 by eXept Software AG
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     5
              All Rights Reserved
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     6
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     7
 This software is furnished under a license and may be used
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     8
 only in accordance with the terms of that license and with the
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    10
 be provided or otherwise made available to, or used by, any
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    11
 other person.  No title to or ownership of the software is
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    12
 hereby transferred.
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    13
"
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    14
"{ Package: 'stx:libwidg2' }"
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    15
4835
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
    16
"{ NameSpace: Smalltalk }"
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
    17
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    18
Object subclass:#HierarchicalDropTargetController
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    19
	instanceVariableNames:'expandBlock highlightMode receiver dropOverLine dropSelector
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    20
		canDropSelector canExpandSelector'
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    21
	classVariableNames:''
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    22
	poolDictionaries:''
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    23
	category:'Interface-DragAndDrop'
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    24
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    25
3756
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    26
!HierarchicalDropTargetController class methodsFor:'documentation'!
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    27
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    28
copyright
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    29
"
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    30
 COPYRIGHT (c) 2008 by eXept Software AG
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    31
              All Rights Reserved
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    32
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    33
 This software is furnished under a license and may be used
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    34
 only in accordance with the terms of that license and with the
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    36
 be provided or otherwise made available to, or used by, any
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    37
 other person.  No title to or ownership of the software is
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    38
 hereby transferred.
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    39
"
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
    40
! !
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    41
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    42
!HierarchicalDropTargetController class methodsFor:'instance creation'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    43
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    44
receiver:aReceiver argument:anArgument dropSelector:aDropSelector canDropSelector:aCanDropSelector
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    45
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    46
    ^ self 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    47
        receiver:aReceiver 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    48
        argument:anArgument 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    49
        dropSelector:aDropSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    50
        canDropSelector:aCanDropSelector 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    51
        canExpandSelector:nil
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    52
!
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    53
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    54
receiver:aReceiver argument:anArgument dropSelector:aDropSelector canDropSelector:aCanDropSelector canExpandSelector: aCanExpandSelector
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    55
    |target|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    56
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    57
    target := self new.
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    58
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    59
    ^ target
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    60
        receiver:aReceiver 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    61
        argument:anArgument 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    62
        dropSelector:aDropSelector 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    63
        canDropSelector:aCanDropSelector 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    64
        canExpandSelector:aCanExpandSelector
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    65
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    66
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    67
receiver:aReceiver dropSelector:aDropSelector canDropSelector:aCanDropSelector
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    68
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    69
    ^ self
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    70
        receiver:aReceiver 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    71
        argument:nil 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    72
        dropSelector:aDropSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    73
        canDropSelector:aCanDropSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    74
        canExpandSelector:nil
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    75
!
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    76
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    77
receiver:aReceiver dropSelector:aDropSelector canDropSelector:aCanDropSelector canExpandSelector:aCanExpandSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    78
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    79
    ^ self
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    80
        receiver:aReceiver 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    81
        argument:nil 
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    82
        dropSelector:aDropSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    83
        canDropSelector:aCanDropSelector
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
    84
        canExpandSelector:aCanExpandSelector
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    85
! !
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    86
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    87
!HierarchicalDropTargetController class methodsFor:'constants'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    88
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    89
delayMilliSecondsBeforeExpand
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    90
    ^ 1000
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    91
! !
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    92
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    93
!HierarchicalDropTargetController methodsFor:'drop actions'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    94
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    95
canDrop:aDropContext
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    96
    "return true, if the DropContext can be dropped into the list of items"
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    97
c80f59a3a422 initial checkin
ab
parents:
diff changeset
    98
    dropOverLine isNil ifTrue:[ ^ false ].      "/ never setup by dropEnter:
3434
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
    99
    canDropSelector isNil ifTrue:[ ^ false ].
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   100
3434
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   101
    ^ receiver 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   102
        perform:canDropSelector 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   103
        withOptionalArgument:aDropContext and:dropOverLine
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   104
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   105
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   106
drop:aDropContext
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   107
    "drop the dropContext into the hierachical list of items
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   108
    "
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   109
    |lnNr|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   110
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   111
    (self canDrop:aDropContext) ifFalse:[
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   112
        self dropLeave:aDropContext.
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   113
        ^ false.
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   114
    ].
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   115
    lnNr := dropOverLine.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   116
    lnNr isNil ifTrue:[^ false ].      "/ never setup by dropEnter:
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   117
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   118
    self dropLeave:aDropContext.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   119
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   120
    dropSelector isNil ifTrue:[ ^ false ].
3434
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   121
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   122
    ^ receiver 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   123
        perform:dropSelector 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   124
        withOptionalArgument:aDropContext and:lnNr
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   125
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   126
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   127
dropEnter:aDropContext
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   128
    "a drop operation enters my widget; set the highlightMode in the target widget"
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   129
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   130
    |widget|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   131
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   132
    dropOverLine := 0.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   133
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   134
    widget := aDropContext targetWidget.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   135
    highlightMode := widget highlightMode.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   136
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   137
    highlightMode notNil ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   138
        aDropContext saveDraw:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   139
            widget highlightMode: #dropMode.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   140
            widget windowGroup processExposeEvents.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   141
        ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   142
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   143
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   144
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   145
dropLeave:aDropContext
3868
8e73b46c547c comment/format in: #dropLeave:
Claus Gittinger <cg@exept.de>
parents: 3756
diff changeset
   146
    "restore drop indications drawn..."
8e73b46c547c comment/format in: #dropLeave:
Claus Gittinger <cg@exept.de>
parents: 3756
diff changeset
   147
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   148
    self changeDropLineTo:nil in:aDropContext.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   149
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   150
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   151
dropOver:aDropContext
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   152
    |target lineNr|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   153
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   154
    dropOverLine isNil ifTrue:[^ self ].       "/ never setup by dropEnter:
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   155
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   156
    target := aDropContext targetWidget.
5813
bbfae6ced887 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5142
diff changeset
   157
    lineNr := target yVisibleToLineNr:(aDropContext targetPointInDeviceCoordinates y).
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   158
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   159
    lineNr isNil ifTrue:[ lineNr := 0. ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   160
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   161
    lineNr > target size ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   162
        lineNr := 0.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   163
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   164
    self changeDropLineTo:lineNr in:aDropContext.
5813
bbfae6ced887 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5142
diff changeset
   165
bbfae6ced887 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5142
diff changeset
   166
    "Modified: / 15-06-2018 / 02:25:37 / Claus Gittinger"
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   167
! !
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   168
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   169
!HierarchicalDropTargetController methodsFor:'instance creation'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   170
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   171
receiver:aReceiver argument:anArgument dropSelector:aDropSelector canDropSelector:aCanDropSelector canExpandSelector:aCanExpandSelector
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   172
    |target|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   173
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   174
    receiver        := aReceiver.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   175
    dropSelector    := aDropSelector.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   176
    canDropSelector := aCanDropSelector.
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   177
    canExpandSelector := aCanExpandSelector.
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   178
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   179
    target := DropTarget
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   180
        receiver:self
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   181
        argument:anArgument
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   182
        dropSelector:#drop:
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   183
        canDropSelector:#canDrop:.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   184
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   185
    target enterSelector:#dropEnter:.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   186
    target leaveSelector:#dropLeave:.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   187
    target overSelector:#dropOver:.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   188
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   189
    ^ target
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   190
! !
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   191
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   192
!HierarchicalDropTargetController methodsFor:'private'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   193
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   194
changeDropLineTo:aLineOrNil in:aDropContext
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   195
    |x0 y0 y1 view item bgColor fgColor processEvents|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   196
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   197
    aLineOrNil == dropOverLine ifTrue:[ ^ self ]. "/ nothing changed
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   198
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   199
    view := aDropContext targetWidget.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   200
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   201
    expandBlock notNil ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   202
        Processor removeTimedBlock:expandBlock.
5142
aff1f7d34b8a #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 4879
diff changeset
   203
        expandBlock := nil.
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   204
    ].
4879
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   205
    processEvents := aLineOrNil isNil.
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   206
    aDropContext contentsWillChange.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   207
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   208
    (aLineOrNil isNil and:[highlightMode notNil]) ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   209
        "/ resore the selection mode
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   210
        view highlightMode: highlightMode.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   211
        highlightMode := nil.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   212
        processEvents := true.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   213
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   214
    (dropOverLine notNil and:[dropOverLine ~~ 0]) ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   215
        "/ invalidate old line
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   216
        view invalidateLineAt:dropOverLine.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   217
        processEvents := true.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   218
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   219
    processEvents ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   220
        view windowGroup processExposeEvents.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   221
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   222
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   223
    dropOverLine := aLineOrNil.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   224
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   225
    (dropOverLine isNil or:[dropOverLine == 0]) ifTrue:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   226
        ^ self
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   227
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   228
    item := view at:dropOverLine ifAbsent:nil.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   229
    item isNil ifTrue:[ ^ self ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   230
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   231
    y0 := view yVisibleOfLine:dropOverLine.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   232
    y1 := view yVisibleOfLine:(dropOverLine + 1).
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   233
    x0 := view xVisibleOfTextAtLevel:item level.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   234
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   235
    bgColor := view hilightBackgroundColor.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   236
    fgColor := view hilightForegroundColor.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   237
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   238
    view paint: bgColor.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   239
    view fillRectangle:(Rectangle left:(x0 - 2) top:y0 width:(item widthOn:view) + 4 height:(y1 - y0)).
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   240
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   241
    view paint:fgColor on:bgColor.
4835
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
   242
    item displayOn:view x:x0 y:y0 h:(y1 - y0) isHighlightedAsSelected:false.
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   243
4879
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   244
    view device isX11Platform ifTrue:[
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   245
        "work around X11 draw problems"
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   246
        Delay waitForMilliseconds:20.
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   247
    ].
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   248
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   249
    item isExpanded ifTrue:[ ^ self ].
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   250
    item canExpand ifFalse:[ ^ self ].
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   251
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   252
    canExpandSelector notNil ifTrue:[
3434
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   253
        (receiver 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   254
            perform:canExpandSelector 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   255
            withOptionalArgument:aDropContext and:dropOverLine) 
c5cb440dc848 code cleanup
Claus Gittinger <cg@exept.de>
parents: 3379
diff changeset
   256
        ifFalse:[
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   257
            ^ self
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   258
        ].
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   259
    ].
5142
aff1f7d34b8a #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 4879
diff changeset
   260
    expandBlock := [self expandForDrop:aDropContext at:aLineOrNil].
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   261
    Processor 
5142
aff1f7d34b8a #OTHER by stefan
Stefan Vogel <sv@exept.de>
parents: 4879
diff changeset
   262
        addTimedBlock:expandBlock
3379
060bb2feff4b Support new drag and drop behaviour
ab
parents: 3371
diff changeset
   263
        afterMilliseconds:(self class delayMilliSecondsBeforeExpand).
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   264
!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   265
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   266
expandForDrop:aDropContext at:aLnNr
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   267
    |item view|
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   268
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   269
    expandBlock := nil.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   270
    aLnNr == dropOverLine ifFalse:[ ^ self].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   271
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   272
    view := aDropContext targetWidget.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   273
    item := view at:aLnNr ifAbsent:nil.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   274
    item isNil ifTrue:[^ self].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   275
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   276
    aDropContext saveDraw:[
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   277
        item expand.
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   278
        view windowGroup processExposeEvents.
4879
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   279
        view device isX11Platform ifTrue:[
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   280
            "work around X11 draw problems"
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   281
            Delay waitForMilliseconds:20.
Stefan Vogel <sv@exept.de>
parents: 4835
diff changeset
   282
        ].
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   283
    ].
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   284
! !
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   285
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   286
!HierarchicalDropTargetController class methodsFor:'documentation'!
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   287
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   288
version
4835
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
   289
    ^ '$Header$'
3756
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
   290
!
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
   291
c0660afa7da3 added: #copyright
Claus Gittinger <cg@exept.de>
parents: 3434
diff changeset
   292
version_CVS
4835
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
   293
    ^ '$Header$'
3371
c80f59a3a422 initial checkin
ab
parents:
diff changeset
   294
! !
4835
10986fc8bd78 class: HierarchicalDropTargetController
Stefan Vogel <sv@exept.de>
parents: 3868
diff changeset
   295