[Top][All Lists]
[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)