[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ff-cvs] fenfire/org/fenfire demo/mm.py fenmm/MMGeometry...
From: |
Asko Soukka |
Subject: |
[ff-cvs] fenfire/org/fenfire demo/mm.py fenmm/MMGeometry... |
Date: |
Mon, 25 Aug 2003 16:11:40 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Branch:
Changes by: Asko Soukka <address@hidden> 03/08/25 16:11:40
Modified files:
org/fenfire/demo: mm.py
org/fenfire/fenmm: MMGeometry.java
org/fenfire/view/lava: mindMapView2D.py
Log message:
separated components into floating buffer
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/demo/mm.py.diff?tr1=1.37&tr2=1.38&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenmm/MMGeometry.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/lava/mindMapView2D.py.diff?tr1=1.40&tr2=1.41&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/demo/mm.py
diff -u fenfire/org/fenfire/demo/mm.py:1.37 fenfire/org/fenfire/demo/mm.py:1.38
--- fenfire/org/fenfire/demo/mm.py:1.37 Mon Aug 25 10:20:03 2003
+++ fenfire/org/fenfire/demo/mm.py Mon Aug 25 16:11:39 2003
@@ -30,6 +30,7 @@
from org.fenfire.vocab.lava import *
from org.fenfire.swamp import Nodes
from org.fenfire.fenmm import MMGeometry
+from org.fenfire.util.lava import Traversals
from org.nongnu.libvob.util import PUIClipboard
import org.nongnu.alph as alph
import org.nongnu.storm as storm
@@ -127,10 +128,10 @@
structLink = ff.structure.StructLink.create(fen.graph)
class Context(ff.view.buoy.AbstractMainNode2D.Context):
- def __init__(self, fen, w, home, multiplexer, style):
+ def __init__(self, fen, w, components, multiplexer, style):
self.fen = fen
self.w = w
- self.home = home
+ self.components = components
self.multiplexer = multiplexer
self.style = style
@@ -197,6 +198,9 @@
self.fen.graph.rm_111(with, STRUCTLINK.linkedTo, obj)
totRemoved += 1
except: pass
+ if totRemoved and structLink.isLinked(obj) \
+ and not Traversals.isConnected(obj, STRUCTLINK.linkedTo, with,
fen.graph):
+ self.components.append(obj)
return totRemoved
def mainNodeToBeRender(self, vs,into, main): pass
@@ -227,7 +231,9 @@
node = vs.getKeyAt(0, x,y, None)
#p('LBM click:', node)
- if node == None: return
+ if node == None:
+ self.context.c.setAccursed(None);
+ return
rmb = self.context.rmb_switch[0]
main = self.context.main
@@ -252,7 +258,14 @@
if node == self.context.main.getPlane(): # from border to linked
cursor.setOffset((x-into[0])/scale/nodeScale,
(y-into[1])/scale/nodeScale)
elif structLink.isLinked(node): # from linked or border to another
linked
- cursor.setOffset((x-into[0])/scale/nodeScale,
(y-into[1])/scale/nodeScale)
+ representative = self.context.floatingHash.get(node)
+ if representative != None:
+ self.context.components.remove(representative)
+ self.context.components.append(main.getPlane())
+ cursor.setOffset((x-into[0])/nodeScale,
(y-into[1])/nodeScale)
+ else:
+ cursor.setOffset((x-into[0])/scale/nodeScale,
(y-into[1])/scale/nodeScale)
+
focus = main.getFocus()
main.setNewPlane(node, focus.getPanX(), focus.getPanY(),
focus.getZoom())
else: # from border to border
@@ -262,6 +275,9 @@
if node == main.getPlane(): pass
elif self.context.rmLinkTo(node, main.getPlane()) == 0:
self.fen.graph.add(main.getPlane(), STRUCTLINK.linkedTo, node)
+ representative = self.context.floatingHash.get(node)
+ if representative != None:
+ self.context.components.remove(representative)
class ZoomPan(vob.input.RelativeAxisListener, Action,
vob.mouse.MousePressListener):
@@ -287,13 +303,19 @@
class MMScene:
def __init__(self):
self.alphContent = ff.util.AlphContent(fen)
+ components = []
if do_load_graph:
- self.home = fen.graph.findN_X1A_Iter(STRUCTLINK.linkedTo).next()
+ nodes = fen.graph.findN_X1A_Iter(STRUCTLINK.linkedTo)
+ comps = Traversals.findComponents(nodes, STRUCTLINK.linkedTo,
fen.graph)
+ centered = comps[1]
+ for component in comps[0].toArray():
+ components.append(component)
+ components.remove(centered)
else:
- self.home = ff.util.RDFUtil.N(fen.graph, MINDSTRUCT.Data)
- self.alphContent.insertText(self.home, 0, 'Home', 1)
+ centered = ff.util.RDFUtil.N(fen.graph, MINDSTRUCT.Data)
+ self.alphContent.insertText(centered, 0, 'Home', 1)
- self.context = Context(fen, w, self.home, multiplexer, style)
+ self.context = Context(fen, w, components, multiplexer, style)
self.mindMouse = vob.mouse.MouseMultiplexer()
self.mindMouse.setListener(3, 0, 'Right mouse button switching.',
RMB(fen, self.context))
@@ -304,7 +326,8 @@
PanMover(fen, self.context))
self.view = ff.view.lava.mindMapView2D.MindMapView2D(fen, self.context)
- 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,
+ self.view,
self.mindMouse)
self.context.main = self.main
dimensions = w.getSize()
self.view.filletLength = dimensions.width * 1./4.
@@ -369,7 +392,7 @@
# draw cursor
if accursed:
nodeview = ff.view.TextNodeView(fen.txtfunc, style)
- if structLink.isLinked(accursed) or self.context.home == accursed:
+ if structLink.isLinked(accursed) or self.context.main.getPlane()
== accursed:
if hasattr(self.view, "zoomPanCS"):
self.context.c.render(vs, cs, self.view.zoomPanCS,
nodeview.f(fen.graph, accursed))
else: self.context.c.render(vs, cs, nodeview.f(fen.graph,
accursed))
Index: fenfire/org/fenfire/fenmm/MMGeometry.java
diff -u fenfire/org/fenfire/fenmm/MMGeometry.java:1.2
fenfire/org/fenfire/fenmm/MMGeometry.java:1.3
--- fenfire/org/fenfire/fenmm/MMGeometry.java:1.2 Mon Aug 25 04:40:27 2003
+++ fenfire/org/fenfire/fenmm/MMGeometry.java Mon Aug 25 16:11:40 2003
@@ -4,8 +4,8 @@
import org.fenfire.swamp.ConstGraph;
import org.fenfire.vocab.STRUCTLINK;
-import org.fenfire.util.Pair;
import org.nongnu.libvob.VobScene;
+import org.fenfire.util.Pair;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
@@ -57,9 +57,9 @@
double s = filletWidth * getScale(depth);
- int cs = vs.orthoBoxCS(into, new Pair("MMPlace", node), depth,
- (float)(x - s/2f), (float)(y - s/2f),
- 1, 1, (float)s, (float)s);
+ int cs = vs.orthoBoxCS(into, new Pair("MMNode", node), depth,
+ (float)(x - s/2f), (float)(y - s/2f),
+ 1, 1, (float)s, (float)s);
return new MMPlace(cs, x, y);
}
@@ -92,16 +92,16 @@
net.put(node, pl, 0);
List links = getLinkedNodes(g, node);
- if (links.size() < 1) net.link(node, node); // XXX probably not the
right way
+ if (links.size() < 1) net.link(node, null);
else {
curStartAngle = getStartAngle(path);
- // curRotationAngle = (2f*Math.PI) / links.size();
+ curRotationAngle = (2f*Math.PI) / links.size();
for (int i=2; i<maxDepth+1; i++)
buildDepth(vs, cs, net, node, null, links, 0, 0,
curStartAngle + initRotation,
curRotationAngle, 1, i);
}
- // curCenter = node;
+ curCenter = node;
return net;
}
Index: fenfire/org/fenfire/view/lava/mindMapView2D.py
diff -u fenfire/org/fenfire/view/lava/mindMapView2D.py:1.40
fenfire/org/fenfire/view/lava/mindMapView2D.py:1.41
--- fenfire/org/fenfire/view/lava/mindMapView2D.py:1.40 Mon Aug 25 10:20:03 2003
+++ fenfire/org/fenfire/view/lava/mindMapView2D.py Mon Aug 25 16:11:40 2003
@@ -35,8 +35,8 @@
dbg = 0
class MindMapMainNode2D(ff.view.buoy.MainNode2D):
- def __init__(self, fen, context, view2d, controller):
- ff.view.buoy.MainNode2D.__init__(self, context.home, view2d,
controller);
+ def __init__(self, fen, centered, context, view2d, controller):
+ ff.view.buoy.MainNode2D.__init__(self, centered, view2d, controller);
self.fen = fen
self.context = context
self.structLink = ff.structure.StructLink.create(self.fen.graph)
@@ -54,9 +54,17 @@
accursed = ff.swamp.CachedPureNodeFunction(100, self.fen.graph,
accursed_text_bg)
self.multiplexer = ff.swamp.MultiplexerNodeFunction(normal, accursed)
+
+ self.floatingView = MindMapView2D(fen, context)
+ self.floatingView.filletLength = 40
+ self.floatingView.filletWidth = 10
+ self.floatingView.initRotation = 0
+ self.floatingView.depth = 2
+ self.floatingView.geometry.init(40, 10, 0, 2)
def renderMain(self, vs, into):
ff.view.buoy.MainNode2D.renderMain(self, vs, into)
+ self.context.floatingHash = java.util.HashMap()
accursed = self.context.c.getAccursed()
# adding accursed to multiplexer
@@ -67,27 +75,45 @@
# then draw unused mind data into floating buffer.
buffer = []
- home = self.context.home
iter = self.fen.graph.findN_X11_Iter(RDF.type, MINDSTRUCT.Data)
while (iter.hasNext()):
obj = iter.next()
if self.structLink.isLinked(obj): continue
- if obj == home: continue
+ if obj == self.getPlane(): continue
buffer.append(obj)
+ buffer.extend(self.context.components)
floating = self.floatingBuffer(vs, buffer)
i = floating.keySet().iterator()
+
while i.hasNext():
node = i.next()
- self.place(vs, node, floating.get(node))
-
+ if self.structLink.isLinked(node):
+ self.floatingView.matchingParent = into
+ self.floatingView.net = floating.get(node)
+ self.floatingView.drawMindMap(vs)
+ j = self.floatingView.net.iterator(node)
+ self.context.floatingHash.put(node, node)
+ while (j.hasNext()): self.context.floatingHash.put(j.next(),
node)
+ else:
+ self.place(vs, node, floating.get(node))
+
def floatingBuffer(self, vs, buffer):
map = java.util.HashMap()
if len(buffer) == 0: return map
d = 360.0/len(buffer)
for i in range(len(buffer)):
- map.put(buffer[i], self.singleCS(vs, buffer[i],
Math.toRadians(i*d)))
+ if self.structLink.isLinked(buffer[i]):
+ path = java.util.ArrayList(1)
+ path.add(buffer[i])
+ cs = self.singleCS(vs, buffer[i], Math.toRadians(i*d))
+ cs = vs.coords.translate(cs, 0,0, 100)
+ vs.matcher.add(cs, "Floating_"+buffer[i])
+ map.put(buffer[i], self.floatingView.geometry.buildMindNet(vs,
cs, path))
+ else:
+ map.put(buffer[i], self.singleCS(vs, buffer[i],
Math.toRadians(i*d)))
+
return map
def singleCS(self, vs, node, angle):
@@ -191,10 +217,10 @@
if pl2 == None: continue
c.append(pl2.cs)
if dbg: p('info:', pl2.cs, pl2.x, pl2.y)
-
+
if dbg: p('Fillet coordinates:', c)
def pc(conns, cs):
- if self.context.c.getAccursed() == node:
+ if self.context.main.getPlane() == node:
vs.put(vob.putil.misc.getDListNocoords("""Color 1. 0.
0."""))
vs.put(conns, cs+c)
@@ -206,7 +232,7 @@
vs.matcher.add(self.matchingParent, cs, node)
self.putNodeContent(vs, node, cs)
- def putNodeContent(self, vs, node, cs):
+ def putNodeContent(self, vs, node, into):
# scaling after depth
depth = self.net.getDepth(node)
scale = ff.fenmm.MMGeometry.getScale(depth)
@@ -214,9 +240,23 @@
p = self.multiplexer.f(self.fen.graph, node)
- x = (self.filletWidth*scale)/2 - (p.getWidth()*textScale)/2.0
- y = (self.filletWidth*scale)/2 - (p.getHeight()*textScale)/2.0
+ x = (self.filletWidth*scale)/2. - (p.getWidth()*textScale)/2.
+ y = (self.filletWidth*scale)/2. - (p.getHeight()*textScale)/2.
- cs = vs.orthoBoxCS(cs,node,0, x,y, textScale, textScale, p.getWidth(),
p.getHeight())
+ cs = vs.orthoBoxCS(into, node,0, x,y, textScale, textScale,
p.getWidth(), p.getHeight())
p.place(vs, cs)
+
+ ## XXX This could work, but setting TextCursor after selecting, would
be difficult
+ # set the active coordinate system coverage
+ #if x > 0:
+ # x = 0
+ # w = self.filletWidth*scale
+ #else: w = p.getWidth()*textScale
+ #if y > 0:
+ # y = 0
+ # h = self.filletWidth*scale
+ #else: h = p.getHeight()*textScale
+ #
+ #cs = vs.orthoBoxCS(into,node,0, x,y, textScale, textScale, w, h)
+
vs.coords.activate(cs)