TreeView Widget Drag and Drop Support

HENRY LOWE hlowe at me.com
Wed Mar 31 18:32:39 EDT 2021


Thanks Brian. I am handling the ‘on DragDrop’ message in the widget’s script but on completing the drop there is no way to determine which row in the TreeView widget the data was dropped into. Ideally when in DragDrop mode the widget would automatically hilite the row that the mouse is currently over (standard drag and drop behavior) so that when the user finally releases the mouse button the row that was the drop target would be available in 'the hilitedElement’ property of the widget. Currently I am having to try to determine which row was dropped on using the mouseLoc to calculate which row I am in.

On the second issue, I tried using hiliteChanged message but could not get it to work. Do you have an example script to do this?

Henry

> On Mar 30, 2021, at 5:06 PM, Sean Cole (Pi) via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> Hi Henry,
> 
> I often take the widgets, like TreeView, and add in other message
> responders like this. It's real easy to do?
> 
> Just make a copy of the widget folder from the LC Tools Folder
> (Livecode.app/Contents/Tools/Extensions/com.livecode.widget.treeview) and
> into your own Livecode extensions folder (mine is in ~/Documents/My
> LiveCode/Extensions/ or my dropbox folder somewhere). Rename the folder
> from com.livecode. to com.mine. or something. Then open treeview.lcb in
> BBEdit or TextEdit, etc, from the copy folder. Line 88, change widget
> com.livecode.widget.treeview to use the new folder name you gave.
> 
> Next, search for 'onMouseUp'. you should find:
> 
> public handler onMouseLeave() returns nothing
> put 0 into mHoverRow
> redraw all
> end handler
> 
> Before that in the code, add in your other handlers (OnDragDrop, etc) using
> the same syntax. No need to use the put or redraw messages of course. Look
> in the dictionary, lcb section, to check the handler names to use.
> 
> Then, open the manifest.xml from the same folder. Line 2, again
> change <name>com.livecode.widget.treeview</name> to use the new folder name
> and Line 3 to something a little more unique. Then again search for
> onmouseup. You will see:
> 
> <handler name="OnMouseUp" parameters="" return="nothing"/>
> 
> Again, follow the syntax adding in the lines for the handler.
> 
> Look through the other files in the folder and change if you wish but it is
> not essential.
> 
> Now in LC, open the extension builder and use the 'open existing..' button
> to navigate to the folder you created. Then, from the bottom, the install
> button will build it into the toolbar.
> 
> Now you have a customised version. Make sure you add your replacement
> widget in the standaloneSettings>Inclusions before building your
> standalones.
> 
> All the best
> 
> Sean
> 
> On Wed, 31 Mar 2021 at 00:26, HENRY LOWE via use-livecode <
> use-livecode at lists.runrev.com> wrote:
> 
>> I am using the LC TreeView widget to implement a sidebar containing a
>> hierarchical menu in a MacOS app. The widget seems well suited for this
>> purpose and I have successfully created a facsimile of the standard sidebar
>> that is used increasingly in both MacOS and iPadOS apps. However, I need to
>> drag rows from a data grid table to a TreeView widget row in the sidebar
>> but the current implementation of the TreeView widget does not report the
>> TreeView widget row (element) where the drop occurred. A TreeView widget
>> message, such as 'ActionDragDrop pPath’ where pPath is the path to the
>> element that was ‘dropped on’ would be incredibly helpful. I have
>> implemented a workaround method off drag and drop to the widget but it
>> occasionally breaks.
>> 
>> Looking at the LiveCode Builder documentation, widgets can support the
>> following messages related to drag and drop functionality:
>> 
>> OnDragDrop, On DragEnter, OnDragFinish, OnDragLeave, On DragMove, On
>> DragStart.
>> 
>> These messages are not currently supported in the TreeView widget LCB
>> source. Adding them would make this incredibly useful widget even more
>> powerful.
>> 
>> Another issue that I encountered when using the TreeView widget to
>> implement a sidebar hierarchical menu was that clicking on a row in the
>> TreeView widget toggles the row’s hilite state  - click on an item and it
>> hilites, click on it again and it unhilites. While this may be standard
>> behavior for a list, in a menu clicking on a hilited row should not change
>> the row’s hilite state. It should remain hilited. Only clicking on another
>> row (menu item) should unhilite a row and then hilite the selected row. It
>> would be great to have a ’togglehilite’ TreeView property. If true the
>> TreeView would toggle a row’s hilite state as it does now, while if false
>> it would not.
>> 
>> Any thoughts?
>> 
>> Henry
>> 
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list