fenfire-commits
[Top][All Lists]
Advanced

[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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]