gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] fenfire/org/fenfire demo/mm.py view/lava/mindMa...


From: Asko Soukka
Subject: [Gzz-commits] fenfire/org/fenfire demo/mm.py view/lava/mindMa...
Date: Wed, 13 Aug 2003 18:58:29 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Asko Soukka <address@hidden>    03/08/13 18:58:29

Modified files:
        org/fenfire/demo: mm.py 
        org/fenfire/view/lava: mindMapView2D.py 

Log message:
        quite functional cursor

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/demo/mm.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/lava/mindMapView2D.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/demo/mm.py
diff -u fenfire/org/fenfire/demo/mm.py:1.4 fenfire/org/fenfire/demo/mm.py:1.5
--- fenfire/org/fenfire/demo/mm.py:1.4  Wed Aug 13 06:57:41 2003
+++ fenfire/org/fenfire/demo/mm.py      Wed Aug 13 18:58:29 2003
@@ -23,8 +23,8 @@
 
 dbg = 0
 
-
-
+w.setCursor("wait")
+vob.putil.demo.usingNormalBindings = 1
 
 # Now, before reading the xu stuff, render something 
 # to try to prevent NV driver
@@ -32,7 +32,7 @@
 # Might be that it only reserves screen memory when starting to render
 # and if we reserve it all for textures, ... splat ...
 vs = w.createVobScene()
-vs.put(background((.4, .2, .1)))
+vs.put(background((.5, .5, .5)))
 w.renderStill(vs, 0)
 
     
@@ -67,10 +67,8 @@
 noteHome = Nodes.get(ppAct.newNote(paperHome, 0, 0, 'HOME'))
 ppAct.assocNotes(noteHome, 1, noteA1)
 
-
-nodeview = ff.view.TextNodeView(fen.txtfunc,
-                                
vob.GraphicsAPI.getInstance().getTextStyle("sans", 0, 24),
-                                1)
+textstyle = vob.GraphicsAPI.getInstance().getTextStyle("sans", 0, 24)
+nodeview = ff.view.TextNodeView(fen.txtfunc, textstyle, 1)
 nodeview.setHasNoContext()
 mindView = ff.view.lava.mindMapView2D.MindMapView2D(fen, nodeview)
 
@@ -82,15 +80,26 @@
         self.main = None    # MainNode2D
         self.fastMouseChg = 0  # callback from abstractmainnode2d when called 
mouse
         self._accursed = None
+        self.bgcolor = (.36, .74, 1.0)
         self.offset = 0
+        self.scale = 1
+
     def nextRmb(self):
         rmb = self.rmb_switch
         rmb.append(rmb.pop(0)) 
         rmb = rmb[0]
-        if rmb == 'go': w.setCursor('default')
-        elif rmb == 'link': w.setCursor('hand')
-        elif rmb == 'unlink': w.setCursor('crosshair')
+        if rmb == 'go': self.bgcolor = (.36, .74, 1.0); w.setCursor('default')
+        elif rmb == 'link': self.bgcolor = (.4, .8, .4); w.setCursor('hand')
+        elif rmb == 'unlink': self.bgcolor = (1.0, .5, .5); 
w.setCursor('crosshair')
         else: raise 'no good cursor!?'
+
+    def drawCursor(self, vs, node, cs):
+        xy = jarray.zeros(2, 'f')
+        nodeview.getXY(fen.graph, context.getAccursed(), context.offset, xy)
+        cs = vs.orthoCS(cs, "CURSOR", 0, xy[0]*self.scale, xy[1]*self.scale,
+                        0, -textstyle.getHeight(self.scale))
+        vs.put(vob.vobs.LineVob(0,0,0,1, java.awt.Color.white), cs)
+
     def insertText(self, text):
         if self._accursed == None:
             self.setAccursed(ff.util.RDFUtil.N(fen.graph, MINDSTRUCT.Data))
@@ -115,6 +124,13 @@
                 else: self.setAccursed(node)
             if dbg: p('offs:', self.offset, l)
 
+    def isLinked(self, obj):
+        iter = fen.graph.findN_11X_Iter(obj, STRUCTLINK.linkedTo)
+        if iter.hasNext(): return 1
+        iter = fen.graph.findN_X11_Iter(STRUCTLINK.linkedTo, obj)
+        if iter.hasNext(): return 1
+        return 0
+    
     def setAccursed(self, node):
         self._accursed = node
         if self._accursed != None:
@@ -162,11 +178,30 @@
 
         rmb = context.rmb_switch[0]
         if rmb == 'go':
+            self.context.setAccursed(node)
+
+            # set cursor, transitions between zoomed and normal should be 
accounted
+            cs = vs.getCSAt(0, x,y, None)
+            into = jarray.zeros(3, 'f')
+            vs.coords.transformPoints3(cs, [0,0,0], into)
+
             if node == self.context.main.getPlane():
-                pass
+                self.context.scale = self.context.main.getFocus().getZoom()
+                self.context.offset = nodeview.getPos(fen.graph, 
context.getAccursed(),
+                                                  
(x-into[0])/self.context.scale,
+                                                  
(y-into[1])/self.context.scale)
             elif ff.util.RDFUtil.isLinked(fen.graph, node):
+                self.context.offset = nodeview.getPos(fen.graph, 
context.getAccursed(),
+                                                  
(x-into[0])/self.context.scale,
+                                                  
(y-into[1])/self.context.scale)
+                self.context.scale = 1
                 self.context.main.setNewPlane(node, 0,0,1)
-            self.context.setAccursed(node)
+            else:
+                self.context.scale = 1
+                self.context.offset = nodeview.getPos(fen.graph, 
context.getAccursed(),
+                                                  
(x-into[0])/self.context.scale,
+                                                  
(y-into[1])/self.context.scale)
+
         elif rmb == 'link':
             if node == self.context.main.getPlane():
                 pass
@@ -190,6 +225,9 @@
         self.context.main.changeZoom(x)
         self.context.main.chgFast(self.context.oldVS, -1)
         self.context.fastMouseChg = 1
+        if self.context.getAccursed() and \
+               ff.util.RDFUtil.isLinked(fen.graph, self.context.getAccursed()):
+            self.context.scale = self.context.main.getFocus().getZoom()
 
 class PanMover(Action, vob.mouse.RelativeAdapter, 
vob.mouse.MousePressListener):
     def pressed(self, x,y):
@@ -219,10 +257,12 @@
         self.main.init(fen, nodeview)
         context.main = self.main
         self.main.context = context
-        
+        mindView.context = context
+        w.setCursor('default')
+
     def scene(self, vs):
         context.oldVS = vs
-        vs.put(background((.36, .74, 1.0)))
+        vs.put(background(context.bgcolor))
         cs = vs.orthoBoxCS(0, "foo",0, 50,50, 1,1, 750,650)
         self.main.renderMain(vs, cs)
 
@@ -242,25 +282,73 @@
                 context.deleteText()
         elif key == "Ctrl-S":
             p("going to save");
-
             m = ff.swamp.Graphs.toModel(fen.graph);
             m.write(java.io.FileWriter(FILE));
         elif key == "Ctrl-Q":
             p("going to save");
-
             m = ff.swamp.Graphs.toModel(fen.graph);
             m.write(java.io.FileWriter(FILE));
-
             java.lang.System.exit(43)
         elif key == "Ctrl-R":
             vob.putil.demo.loadScenes()
         elif key == "Return":
             context.insertText("\n")
+            text = alphContent.getText(fen.graph, context.getAccursed())
+            # small hack to show the new line on NodeView, without content it 
would be shrank
+            if len(text) == context.offset:
+                context.insertText(" ")
+                context.offset -= 1
+        elif key == 'Up':
+            xy = jarray.zeros(2, 'f')
+            nodeview.getXY(fen.graph, context.getAccursed(),
+                               context.offset, xy)
+            xy[1] -= textstyle.getHeight(context.scale) * 1.5
+            context.offset = nodeview.getPos(fen.graph, context.getAccursed(), 
xy[0], xy[1])
+       elif key == 'Down':
+            xy = jarray.zeros(2, 'f')
+            nodeview.getXY(fen.graph, context.getAccursed(),
+                               context.offset, xy)
+            xy[1] += textstyle.getHeight(context.scale) * 0.5
+            context.offset = nodeview.getPos(fen.graph, context.getAccursed(), 
xy[0], xy[1])
+       elif key == 'Left':
+            if context.offset > 0: context.offset -= 1
+        elif key == 'Right':
+            text = alphContent.getText(fen.graph, context.getAccursed())
+            if context.offset < len(text):
+                context.offset += 1
+        if key == "Ctrl-HomE":
+            context.offset = 0
+        if key == "Ctrl-EnD":
+            text = alphContent.getText(fen.graph, context.getAccursed())
+            context.offset = len(text)
+        if key == "Home" or key == "Ctrl-A":
+            xy = jarray.zeros(2, 'f')
+            nodeview.getXY(fen.graph, context.getAccursed(),
+                               context.offset, xy)
+            xy[0] = 0
+            # we must return a half of the line height back to stay on the 
same line
+            xy[1] -= textstyle.getHeight(context.scale) * 0.5 # XXX scaling!
+            context.offset = nodeview.getPos(fen.graph, context.getAccursed(), 
xy[0], xy[1])            
+        if key == "End" or key == "Ctrl-E":
+            # the end of line is reached by going to home of the line below
+            # and returning a single character back if not the end of text was 
reached
+            xy = jarray.zeros(2, 'f')
+            nodeview.getXY(fen.graph, context.getAccursed(),
+                               context.offset, xy)
+            xy[0] = 0
+            xy[1] += textstyle.getHeight(context.scale) * 0.5 # XXX scaling!
+            context.offset = nodeview.getPos(fen.graph, context.getAccursed(), 
xy[0], xy[1])
+            text = alphContent.getText(fen.graph, context.getAccursed())
+            if context.offset < len(text): context.offset -= 1
         elif len(key) == 1:
             context.insertText(key)
-        
 
+        if dbg:
+            text = alphContent.getText(fen.graph, context.getAccursed())
+            print text[0:context.offset], '[cursor]'
+        
         vob.AbstractUpdateManager.chg()
 
 
 currentScene = VeryStupidBuoyManager()
+vob.putil.demo.usingNormalBindings = 0
Index: fenfire/org/fenfire/view/lava/mindMapView2D.py
diff -u fenfire/org/fenfire/view/lava/mindMapView2D.py:1.8 
fenfire/org/fenfire/view/lava/mindMapView2D.py:1.9
--- fenfire/org/fenfire/view/lava/mindMapView2D.py:1.8  Wed Aug 13 06:57:41 2003
+++ fenfire/org/fenfire/view/lava/mindMapView2D.py      Wed Aug 13 18:58:29 2003
@@ -22,11 +22,11 @@
 paper = vob.gl.SpecialPapers.selectionPaper(None);
 whiteground = vob.gl.GLRen.createFixedPaperQuad(paper, 0, 0, 1, 1, 0, 10, 10, 
10);
 
-
 class MindMapMainNode2D(ff.view.buoy.MainNode2D):
     def __init__(self, plane, view2d, focus, controller):
        ff.view.buoy.MainNode2D.__init__(self, plane, view2d, controller);
-
+        self.context = None
+        
     def init(self, fen, nodeview):
         self.fen, self.viewfunc = fen, nodeview
         
@@ -69,13 +69,17 @@
     def place(self, node, vs, cs):
         p = self.viewfunc.f(self.fen.graph, node)
 
-        cs_background = vs.orthoCS(cs,'WHITE_GROUND',0, 0,0, p.getWidth(), 
p.getHeight())
+        cs_background = vs.orthoCS(cs,'WHITE_GROUND',0, 0, 0, p.getWidth(), 
p.getHeight())
         vs.put(whiteground, cs_background)
         
-        cs = vs.orthoBoxCS(cs,node,0, 0,0, 1,1, p.getWidth(), p.getHeight())
+        cs = vs.orthoBoxCS(cs,node,0, 0, 0, 1,1, p.getWidth(), p.getHeight())
         p.place(vs, cs)
         vs.coords.activate(cs)
 
+        # draw cursor
+        if self.context and self.context.getAccursed() == node:
+            self.context.drawCursor(vs, node, cs)
+
 class MindNet:
     """ Keeps up nodes in hashmap of 'linked to' nodes in hashmap.
         Point-to-point list of connections.    """
@@ -102,7 +106,8 @@
         self.alphContent = ff.util.AlphContent(fen)
         self.box = None
         self.nodef = nodef
-
+        self.context = None
+        
         ### fillet set up
         self.angle = 1
         self.thick = 1
@@ -208,7 +213,6 @@
             vs.matcher.add(self.matchingParent, cs, node)
             self.putNodeContent(vs, node, cs)
 
-
     def getLinks(self, fen, node):
         """ Get all links available with node."""
         links = []
@@ -268,7 +272,7 @@
         x,y = xy[0], xy[1]
 
         s = self.getNodeSize(deepnes)
-        print 'size', s
+        if (dbg): print 'size', s
         cs = vs.orthoBoxCS(into,'foo'+str(key),0, x-s/2.0,y-s/2.0, 1,1, s,s)
         if dbg:
             p('come:',x0,y0, angle, dirAngle)
@@ -300,6 +304,11 @@
         p.place(vs, cs)
         vs.coords.activate(cs)
 
-
+        # draw cursor
+        if self.context and self.context.getAccursed() == node:
+            into = jarray.zeros(3, 'f')
+            vs.coords.transformPoints3(cs, [0,0,0], into)
+            cs = vs.orthoCS(0, 0, -100, into[0], into[1], 1, 1)
+            self.context.drawCursor(vs, node, cs)
 
 




reply via email to

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