30 |
from org.fenfire.vocab.lava import * |
from org.fenfire.vocab.lava import * |
31 |
from org.fenfire.swamp import Nodes |
from org.fenfire.swamp import Nodes |
32 |
from org.fenfire.fenmm import MMGeometry |
from org.fenfire.fenmm import MMGeometry |
33 |
|
from org.fenfire.util.lava import Traversals |
34 |
from org.nongnu.libvob.util import PUIClipboard |
from org.nongnu.libvob.util import PUIClipboard |
35 |
import org.nongnu.alph as alph |
import org.nongnu.alph as alph |
36 |
import org.nongnu.storm as storm |
import org.nongnu.storm as storm |
128 |
structLink = ff.structure.StructLink.create(fen.graph) |
structLink = ff.structure.StructLink.create(fen.graph) |
129 |
|
|
130 |
class Context(ff.view.buoy.AbstractMainNode2D.Context): |
class Context(ff.view.buoy.AbstractMainNode2D.Context): |
131 |
def __init__(self, fen, w, home, multiplexer, style): |
def __init__(self, fen, w, components, multiplexer, style): |
132 |
self.fen = fen |
self.fen = fen |
133 |
self.w = w |
self.w = w |
134 |
self.home = home |
self.components = components |
135 |
self.multiplexer = multiplexer |
self.multiplexer = multiplexer |
136 |
self.style = style |
self.style = style |
137 |
|
|
198 |
self.fen.graph.rm_111(with, STRUCTLINK.linkedTo, obj) |
self.fen.graph.rm_111(with, STRUCTLINK.linkedTo, obj) |
199 |
totRemoved += 1 |
totRemoved += 1 |
200 |
except: pass |
except: pass |
201 |
|
if totRemoved and structLink.isLinked(obj) \ |
202 |
|
and not Traversals.isConnected(obj, STRUCTLINK.linkedTo, with, fen.graph): |
203 |
|
self.components.append(obj) |
204 |
return totRemoved |
return totRemoved |
205 |
|
|
206 |
def mainNodeToBeRender(self, vs,into, main): pass |
def mainNodeToBeRender(self, vs,into, main): pass |
231 |
node = vs.getKeyAt(0, x,y, None) |
node = vs.getKeyAt(0, x,y, None) |
232 |
#p('LBM click:', node) |
#p('LBM click:', node) |
233 |
|
|
234 |
if node == None: return |
if node == None: |
235 |
|
self.context.c.setAccursed(None); |
236 |
|
return |
237 |
|
|
238 |
rmb = self.context.rmb_switch[0] |
rmb = self.context.rmb_switch[0] |
239 |
main = self.context.main |
main = self.context.main |
258 |
if node == self.context.main.getPlane(): # from border to linked |
if node == self.context.main.getPlane(): # from border to linked |
259 |
cursor.setOffset((x-into[0])/scale/nodeScale, (y-into[1])/scale/nodeScale) |
cursor.setOffset((x-into[0])/scale/nodeScale, (y-into[1])/scale/nodeScale) |
260 |
elif structLink.isLinked(node): # from linked or border to another linked |
elif structLink.isLinked(node): # from linked or border to another linked |
261 |
cursor.setOffset((x-into[0])/scale/nodeScale, (y-into[1])/scale/nodeScale) |
representative = self.context.floatingHash.get(node) |
262 |
|
if representative != None: |
263 |
|
self.context.components.remove(representative) |
264 |
|
self.context.components.append(main.getPlane()) |
265 |
|
cursor.setOffset((x-into[0])/nodeScale, (y-into[1])/nodeScale) |
266 |
|
else: |
267 |
|
cursor.setOffset((x-into[0])/scale/nodeScale, (y-into[1])/scale/nodeScale) |
268 |
|
|
269 |
focus = main.getFocus() |
focus = main.getFocus() |
270 |
main.setNewPlane(node, focus.getPanX(), focus.getPanY(), focus.getZoom()) |
main.setNewPlane(node, focus.getPanX(), focus.getPanY(), focus.getZoom()) |
271 |
else: # from border to border |
else: # from border to border |
275 |
if node == main.getPlane(): pass |
if node == main.getPlane(): pass |
276 |
elif self.context.rmLinkTo(node, main.getPlane()) == 0: |
elif self.context.rmLinkTo(node, main.getPlane()) == 0: |
277 |
self.fen.graph.add(main.getPlane(), STRUCTLINK.linkedTo, node) |
self.fen.graph.add(main.getPlane(), STRUCTLINK.linkedTo, node) |
278 |
|
representative = self.context.floatingHash.get(node) |
279 |
|
if representative != None: |
280 |
|
self.context.components.remove(representative) |
281 |
|
|
282 |
|
|
283 |
class ZoomPan(vob.input.RelativeAxisListener, Action, vob.mouse.MousePressListener): |
class ZoomPan(vob.input.RelativeAxisListener, Action, vob.mouse.MousePressListener): |
303 |
class MMScene: |
class MMScene: |
304 |
def __init__(self): |
def __init__(self): |
305 |
self.alphContent = ff.util.AlphContent(fen) |
self.alphContent = ff.util.AlphContent(fen) |
306 |
|
components = [] |
307 |
if do_load_graph: |
if do_load_graph: |
308 |
self.home = fen.graph.findN_X1A_Iter(STRUCTLINK.linkedTo).next() |
nodes = fen.graph.findN_X1A_Iter(STRUCTLINK.linkedTo) |
309 |
|
comps = Traversals.findComponents(nodes, STRUCTLINK.linkedTo, fen.graph) |
310 |
|
centered = comps[1] |
311 |
|
for component in comps[0].toArray(): |
312 |
|
components.append(component) |
313 |
|
components.remove(centered) |
314 |
else: |
else: |
315 |
self.home = ff.util.RDFUtil.N(fen.graph, MINDSTRUCT.Data) |
centered = ff.util.RDFUtil.N(fen.graph, MINDSTRUCT.Data) |
316 |
self.alphContent.insertText(self.home, 0, 'Home', 1) |
self.alphContent.insertText(centered, 0, 'Home', 1) |
317 |
|
|
318 |
self.context = Context(fen, w, self.home, multiplexer, style) |
self.context = Context(fen, w, components, multiplexer, style) |
319 |
|
|
320 |
self.mindMouse = vob.mouse.MouseMultiplexer() |
self.mindMouse = vob.mouse.MouseMultiplexer() |
321 |
self.mindMouse.setListener(3, 0, 'Right mouse button switching.', RMB(fen, self.context)) |
self.mindMouse.setListener(3, 0, 'Right mouse button switching.', RMB(fen, self.context)) |
326 |
PanMover(fen, self.context)) |
PanMover(fen, self.context)) |
327 |
|
|
328 |
self.view = ff.view.lava.mindMapView2D.MindMapView2D(fen, self.context) |
self.view = ff.view.lava.mindMapView2D.MindMapView2D(fen, self.context) |
329 |
self.main = ff.view.lava.mindMapView2D.MindMapMainNode2D(fen, self.context, self.view, self.mindMouse) |
self.main = ff.view.lava.mindMapView2D.MindMapMainNode2D(fen, centered, self.context, |
330 |
|
self.view, self.mindMouse) |
331 |
self.context.main = self.main |
self.context.main = self.main |
332 |
dimensions = w.getSize() |
dimensions = w.getSize() |
333 |
self.view.filletLength = dimensions.width * 1./4. |
self.view.filletLength = dimensions.width * 1./4. |
392 |
# draw cursor |
# draw cursor |
393 |
if accursed: |
if accursed: |
394 |
nodeview = ff.view.TextNodeView(fen.txtfunc, style) |
nodeview = ff.view.TextNodeView(fen.txtfunc, style) |
395 |
if structLink.isLinked(accursed) or self.context.home == accursed: |
if structLink.isLinked(accursed) or self.context.main.getPlane() == accursed: |
396 |
if hasattr(self.view, "zoomPanCS"): |
if hasattr(self.view, "zoomPanCS"): |
397 |
self.context.c.render(vs, cs, self.view.zoomPanCS, nodeview.f(fen.graph, accursed)) |
self.context.c.render(vs, cs, self.view.zoomPanCS, nodeview.f(fen.graph, accursed)) |
398 |
else: self.context.c.render(vs, cs, nodeview.f(fen.graph, accursed)) |
else: self.context.c.render(vs, cs, nodeview.f(fen.graph, accursed)) |