Page 1 of 1

Drag 'n' Drop support

PostPosted: Fri Apr 24, 2015 4:59 pm
by AntoninoP
Hello,
I am watching the drag'n'drop support in five win and have some notes:
* bDropOver receives the nRow and nCol relatives of sender control
* There is no callback for receiver during mouse move

In my application I am dropping in a list, and I want that the position in the list is based on mouse release position.
I want too draw a line where this new element will be placed.
Now it is not possible.

Regards,
Perry

Re: Drag 'n' Drop support

PostPosted: Wed Apr 29, 2015 10:34 am
by AntoninoP
Hello,
I modified fiveWin for a IMHO better support for drag'n'drop:

On window.prg
changed
Code: Select all  Expand view
  DATA   bCommNotify, bMenuSelect, bZip, bUnZip, bDropOver

in
Code: Select all  Expand view
  DATA   bCommNotify, bMenuSelect, bZip, bUnZip, bDropOver, bCanDrop, bDropOut


On control.prg
Added:
Code: Select all  Expand view
DATA   oWndOldOver            // DropOver destination window last mousemove

Changed
Code: Select all  Expand view
     SendMessage( WindowFromPoint( aPoint[ 2 ], aPoint[ 1 ] ),;
                   FM_DROPOVER, nKeyFlags, nMakeLong( nRow, nCol ) )

In
Code: Select all  Expand view
     SendMessage( WindowFromPoint( aPoint[ 2 ], aPoint[ 1 ] ),;
                   FM_DROPOVER, nKeyFlags, nMakeLong( aPoint[ 1 ], aPoint[ 2 ] ) )

in this way dropOver receives screen coordinate.
changed
Code: Select all  Expand view
  local nOldRow, nOldCol, hOver, oWndOver, aPoint

in
Code: Select all  Expand view
  local nOldRow, nOldCol, hOver, oWndOver, aPoint, lCanDrop

and
Code: Select all  Expand view
           hOver  = WindowFromPoint( aPoint[ 2 ], aPoint[ 1 ] )

            if hOver == ::hWnd
               SetCursor( ::oDragCursor:hCursor )
            else
               oWndOver = oWndFromHWnd( hOver )
               if oWndOver == nil .or. oWndOver:bDropOver == nil
                  CursorNO()
               else
                  SetCursor( ::oDragCursor:hCursor )
               endif
            endif

in
Code: Select all  Expand view
           hOver  = WindowFromPoint( aPoint[ 2 ], aPoint[ 1 ] )
            oWndOver = nil
            lCanDrop := .T.
            if hOver != ::hWnd
               oWndOver = oWndFromHWnd( hOver )
               if oWndOver == nil .or. ( oWndOver:bCanDrop == nil .and. oWndOver:bDropOver == nil )
                  lCanDrop := .F.
               else
                  if oWndOver:bCanDrop != nil
                     lCanDrop := Eval( oWndOver:bCanDrop, aPoint[1], aPoint[2], nKeyFlags )
                  endif
               endif
            endif
           
            if ::oWndOldOver!=nil .and. hOver != ::oWndOldOver:hWnd .and. ::oWndOldOver:bDropOut != nil
                  Eval( ::oWndOldOver:bDropOut, aPoint[1], aPoint[2], nKeyFlags )
            ENDIF
            ::oWndOldOver := oWndOver
           
            if lCanDrop
               SetCursor( ::oDragCursor:hCursor )
            else
               CursorNO()
            endif


In this way receiver has callbacks: bCanDrop on mouse move and decide if receive or not the callback and bDropOut when dropping going out.

Re: Drag 'n' Drop support

PostPosted: Wed Apr 29, 2015 1:30 pm
by Antonio Linares
Antonino,

Many thanks!

have you checked if your changes are backwards compatible ?

Re: Drag 'n' Drop support

PostPosted: Wed Apr 29, 2015 4:03 pm
by AntoninoP
Yes, I tried some samples by fivewin.
When i have time i will post an example with drag'n'drop with listview and insertionMark.

Re: Drag 'n' Drop support

PostPosted: Wed Apr 29, 2015 5:21 pm
by nageswaragunupudi
Problem is backward compatibility.
All earlier software need to be modified

Re: Drag 'n' Drop support

PostPosted: Thu Apr 30, 2015 7:20 am
by AntoninoP
Hello,
I removed all my modifications on FiveWin code, put a good drag'n'drop support is too complicated.
In my program I do it in mouse events. In this way I have all control I need,
Regards,
Antonino Perricone

Re: Drag 'n' Drop support

PostPosted: Thu Apr 30, 2015 7:43 pm
by Antonio Linares
Antonino,

Thanks anyhow :-)

Re: Drag 'n' Drop support

PostPosted: Tue Jul 07, 2015 11:18 am
by bpd2000
AntoninoP wrote:Yes, I tried some samples by fivewin.
When i have time i will post an example with drag'n'drop with listview and insertionMark.