Skip to content

Commit 51c3930

Browse files
committed
Fix drop indicator which didn't show
1 parent 688ddd8 commit 51c3930

2 files changed

Lines changed: 27 additions & 17 deletions

File tree

examples/pyside/treewidget_drag_drop_node.cgx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<treewidgetitem
22
:content="{0: node['name']}"
33
:data="(0, QtCore.Qt.ItemDataRole.UserRole, node['id'])"
4-
>
5-
<!-- :flags="(
4+
:flags="(
65
QtCore.Qt.ItemIsEnabled
76
| QtCore.Qt.ItemIsSelectable
87
| QtCore.Qt.ItemIsDragEnabled
98
| QtCore.Qt.ItemIsDropEnabled
10-
)" -->
9+
)"
10+
>
1111
<Node
1212
v-for="child in node['children']"
1313
:key="child['id']"

examples/pyside/treewidget_drag_drop_reparent.cgx

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
- Drag within the tree to reorder and reparent items
77
- Drop files from Finder/Explorer onto the tree to insert new nodes
88
-->
9-
<window title="TreeWidget drag/drop + external drops" :size="[800, 600]">
10-
<widget :layout="{'type': 'Box', 'direction': 'TopToBottom'}">
11-
<label
12-
text="Drag nodes to reorder/reparent. Drop files from your OS to insert them into the tree."
13-
/>
149

10+
<window
11+
:size="[800, 600]"
12+
title="TreeWidget drag/drop + external drops"
13+
>
14+
<widget :layout="{'type': 'Box', 'direction': 'TopToBottom'}">
15+
<label text="Drag nodes to reorder/reparent. Drop files from your OS to insert them into the tree." />
1516
<drag-drop-treewidget
16-
object-name="tree"
1717
:column-count="1"
1818
:header-labels="['Name']"
19+
object-name="tree"
1920
:selection-mode="QtWidgets.QAbstractItemView.SingleSelection"
2021
>
2122
<Node
@@ -24,7 +25,6 @@
2425
:node="node"
2526
/>
2627
</drag-drop-treewidget>
27-
2828
<label :text="status" />
2929
</widget>
3030
</window>
@@ -34,11 +34,10 @@ import os
3434
import uuid
3535

3636
import collagraph as cg
37+
from examples.pyside.treewidget_drag_drop_node import Node
3738
from observ import reactive
3839
from PySide6 import QtCore, QtWidgets
3940

40-
from examples.pyside.treewidget_drag_drop_node import Node
41-
4241

4342
class DragDropTreeWidget(QtWidgets.QTreeWidget):
4443
"""QTreeWidget that (1) accepts external file drops and (2) notifies on internal moves."""
@@ -56,13 +55,16 @@ class DragDropTreeWidget(QtWidgets.QTreeWidget):
5655
self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
5756

5857
def dragEnterEvent(self, event): # noqa: N802
59-
if event.source() is self or event.mimeData().hasUrls():
58+
# Don't short-circuit internal drags: QAbstractItemView updates the
59+
# drop indicator during its drag handlers.
60+
if event.source() is not self and event.mimeData().hasUrls():
6061
event.acceptProposedAction()
6162
return
6263
super().dragEnterEvent(event)
6364

6465
def dragMoveEvent(self, event): # noqa: N802
65-
if event.source() is self or event.mimeData().hasUrls():
66+
# Same here: delegate internal drags so the indicator is updated.
67+
if event.source() is not self and event.mimeData().hasUrls():
6668
event.acceptProposedAction()
6769
return
6870
super().dragMoveEvent(event)
@@ -122,7 +124,9 @@ class DragDropTreeWidget(QtWidgets.QTreeWidget):
122124
cg.PySideRenderer.register_element("drag-drop-treewidget", DragDropTreeWidget)
123125

124126

125-
def make_node(name: str, *, path: str | None = None, node_id: str | None = None, children=None):
127+
def make_node(
128+
name: str, *, path: str | None = None, node_id: str | None = None, children=None
129+
):
126130
return reactive(
127131
{
128132
"id": node_id or uuid.uuid4().hex,
@@ -141,10 +145,15 @@ class TreeWidgetDragDropReparent(cg.Component):
141145
"Project",
142146
children=[
143147
make_node("README.md"),
144-
make_node("src", children=[make_node("main.py"), make_node("utils.py")]),
148+
make_node(
149+
"src",
150+
children=[make_node("main.py"), make_node("utils.py")],
151+
),
145152
],
146153
),
147-
make_node("Assets", children=[make_node("logo.png"), make_node("styles.css")]),
154+
make_node(
155+
"Assets", children=[make_node("logo.png"), make_node("styles.css")]
156+
),
148157
]
149158
)
150159
self.state["status"] = "Ready"
@@ -221,3 +230,4 @@ class TreeWidgetDragDropReparent(cg.Component):
221230
parent = find(self.state["nodes"])
222231
return parent["children"] if parent else self.state["nodes"]
223232
</script>
233+

0 commit comments

Comments
 (0)