0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| | # Python
import unohelper
from com.sun.star.awt import XMouseMotionListener
class MouseMotionListener(unohelper.Base, XMouseMotionListener):
def __init__(self, act):
self.act = act
self.node = node
def disposing(self, ev):
self.act = None
self.node = None
def mouseDragged(self, ev):
try:
# check near is a child of the same parent
tree = ev.Source
node = tree.getSelection()
near = tree.getClosestNodeForLocation(ev.X, ev.Y)
if self.node != near:
r = tree.getNodeRect(near)
self.act.dragged(tree, r)
self.node = near
except Exception, e:
print(e)
def mouseMoved(self, ev):
pass
class TreeTest(object):
DIALOG = "vnd.sun.star.script:Standard.Dialog16?location=application"
def __init__(self, ctx):
self.ctx = ctx
def create(self, name, args=None):
if args:
return self.ctx.getServiceManager().createInstanceWithArgumentsAndContext(
name, args, self.ctx)
else:
return self.ctx.getServiceManager().createInstanceWithContext(
name, self.ctx)
def execute(self):
dlg = self.create("com.sun.star.awt.DialogProvider").\
createDialog(self.DIALOG)
dc = dlg.getControl
tree = dc("tree")
tree.addMouseMotionListener(MouseMotionListener(self))
data_model = self.create("com.sun.star.awt.tree.MutableTreeDataModel")
tree.getModel().DataModel = data_model
tree.getModel().SelectionType = 1
root = data_model.createNode("Root", False)
data_model.setRoot(root)
for i in range(6):
root.appendChild(
data_model.createNode("Node %d" % (i + 1), False))
#self.create("mytools.Mri", (dlg,))
dlg.execute()
dlg.dispose()
def dragged(self, tree, r):
x = r.X
y = r.Y
if ev.X < (r.Y + r.Height/2):
y += r.Height
g = tree.getGraphics()
if not g:
g = tree.getPeer().createGraphics()
tree.setGraphics(g)
tree.getPeer().invalidate(8)
g.push()
g.setLineColor(0)
g.drawLine(x - 10, y, x + 15, y)
g.pop()
def show_tree(*args):
try:
ctx = XSCRIPTCONTEXT.getComponentContext()
TreeTest(ctx).execute()
except Exception, e:
print(e)
import traceback
traceback.print_exc()
|