43 |
def change(self, x, y): |
def change(self, x, y): |
44 |
if dbg: p('move pan fast') |
if dbg: p('move pan fast') |
45 |
f = self.obj.getFocus() |
f = self.obj.getFocus() |
|
if dbg: p('zoom:',f.zoom) |
|
46 |
fX, fY = f.getPanX(), f.getPanY() |
fX, fY = f.getPanX(), f.getPanY() |
47 |
f.setPan( fX-x/f.zoom, fY-y/f.zoom) |
f.setPan( fX-x/f.zoom, fY-y/f.zoom) |
48 |
self.obj.chgFast(self.oldVS) |
self.obj.chgFast(self.oldVS) |
49 |
|
|
50 |
self.context.states.p() |
if dbg: self.context.states.p() |
51 |
if self.context.states.hasCtrl(): |
if self.context.states.hasCtrl(): |
52 |
xy0 = self.context.states.getPressPans() |
xy = self.context.states.getPressPans() |
53 |
self.select.setArea(xy[0], xy[1], f.getPanX(), f.getPanY()) |
self.obj.setSelection(xy[0], xy[1], f.getPanX(), f.getPanY()) |
54 |
else: self.select.setArea(0,0,0,0) |
else: self.obj.setSelection(0,0,0,0) |
55 |
|
|
56 |
|
|
57 |
|
|
58 |
class MovePanSlow(ff.util.ControlBinding.AbstractController): |
class MovePanSlow(ff.util.ControlBinding.AbstractController): |
59 |
def isChangeable(self): return 0 |
def isChangeable(self): return 0 |
85 |
class SelectNodeOnPlane(AbstractContextController): |
class SelectNodeOnPlane(AbstractContextController): |
86 |
def isChangeable(self): return 0 |
def isChangeable(self): return 0 |
87 |
def controlPoint(self, x, y, scale): |
def controlPoint(self, x, y, scale): |
88 |
self.context.setAccursed(self.obj.second) |
self.context.setAccursed(self.obj[1]) |
89 |
|
|
90 |
class MoveNodeOnPlane(AbstractContextController): |
class MoveNodeOnPlane(AbstractContextController): |
91 |
def isChangeable(self): return 1 |
def isChangeable(self): return 1 |
113 |
self.last = main |
self.last = main |
114 |
self.graph = graph |
self.graph = graph |
115 |
self.pp = pp |
self.pp = pp |
116 |
|
|
117 |
def handleEvent(self, main, ev, vs): |
def handleEvent(self, main, ev, vs): |
118 |
|
|
119 |
if ev.getID() == ev.MOUSE_DRAGGED: |
if ev.getID() == ev.MOUSE_DRAGGED: |
120 |
if dbg: p('drag') |
if dbg: p('drag') |
121 |
return self.last.handleEvent(main, ev, vs) |
return self.last.handleEvent(self.args, ev, vs) |
122 |
elif ev.getID() == ev.MOUSE_PRESSED: |
elif ev.getID() == ev.MOUSE_PRESSED: |
123 |
f = main.getFocus() |
xy = main.getXYHitOnPlane(vs, ev.getX(), ev.getY()) |
124 |
self.context.states.setPressPans(f.getPanX(),f.getPanY()) |
self.context.states.setPressPans(xy[0], xy[1]) |
125 |
|
|
126 |
if dbg: p('event', ev) |
if dbg: p('event', ev) |
127 |
obj = main.getNodeOnPlane(vs, ev.getX(), ev.getY()) |
obj = main.getNodeOnPlane(vs, ev.getX(), ev.getY()) |
128 |
if dbg: p(obj) |
if dbg: p(obj) |
129 |
if ev.getID() == ev.MOUSE_CLICKED: |
if ev.getID() == ev.MOUSE_CLICKED: |
130 |
if obj != None and self.p.hasBinding(ev): |
if obj != None and self.p.hasBinding(ev): |
131 |
|
p('object on plane click') |
132 |
self.last = self.p |
self.last = self.p |
133 |
return self.p.handleEvent(ff.util.Pair(main, obj), ev, vs) |
self.args = [main, obj, self.graph, self.pp] |
134 |
|
return self.p.handleEvent(self.args, ev, vs) |
135 |
|
|
136 |
|
# Drag if something under mouse pointer is accursed! |
137 |
if obj != None and self.p.hasBinding(ev) and self.context.isAccursed(obj): |
if obj != None and self.p.hasBinding(ev) and self.context.isAccursed(obj): |
138 |
self.last = self.p |
self.last = self.p |
139 |
return self.p.handleEvent([main, obj, self.graph, self.pp], ev, vs) |
self.args = [main, obj, self.graph, self.pp] |
140 |
else: |
else: |
141 |
|
p('something else') |
142 |
self.last = self.m |
self.last = self.m |
143 |
return self.m.handleEvent(main, ev, vs) |
self.args = main |
144 |
|
return self.last.handleEvent(self.args, ev, vs) |
145 |
def removePressState(self): |
def removePressState(self): |
146 |
for c in self.all: |
for c in self.all: |
147 |
c.removePressState() |
c.removePressState() |