[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp...
From: |
Tuomas J. Lukka |
Subject: |
[ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp... |
Date: |
Sat, 23 Aug 2003 13:13:33 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Branch:
Changes by: Tuomas J. Lukka <address@hidden> 03/08/23 13:13:33
Modified files:
org/fenfire/bin: fenpdf10.py
org/fenfire/fenpdf: fenpdf.py
org/fenfire/fenpdf/actions: keyboard.py mouse.py
org/fenfire/fenpdf/appearance: views.py
org/fenfire/fenpdf/events: mousemenu.py
org/fenfire/view/buoy: AbstractMainNode2D.java
Log message:
Arch: patch-53
Take away redundant error message
patch-54
Rename uistate to animationstate: let's try not to let too much
orthogonal stuff clump together. UIstate will contain things like whether a
menu is shown, what node was clicked to get the menu etc.
patch-55
Menu refactoring
patch-56
Refactor linking action away from menu code
patch-57
Refactor unlink buoy action to actions
patch-58
Move node deletion to actions
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/bin/fenpdf10.py.diff?tr1=1.70&tr2=1.71&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdf.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/keyboard.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/mouse.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/appearance/views.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java.diff?tr1=1.46&tr2=1.47&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/bin/fenpdf10.py
diff -u fenfire/org/fenfire/bin/fenpdf10.py:1.70
fenfire/org/fenfire/bin/fenpdf10.py:1.71
--- fenfire/org/fenfire/bin/fenpdf10.py:1.70 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/bin/fenpdf10.py Sat Aug 23 13:13:33 2003
@@ -223,6 +223,7 @@
fenPDF.views = views
context.states.cursor = ff.fenpdf.fenpdfcontext.Cursor(fen,
views.getMultiplexerNodeContentFunction())
+fenPDF.uistate.cursor = context.states.cursor
eventHandler.context = context
@@ -232,6 +233,7 @@
fenPDF.actions.mouse = ff.fenpdf.actions.mouse.MouseActions(fenPDF,context)
fenPDF.actions.key = ff.fenpdf.actions.keyboard.KeyActions(context)
+fenPDF.actions.menu = ff.fenpdf.actions.menu.MenuActions(fenPDF)
fenPDF.events.mouse.fenPDF = fenPDF
Index: fenfire/org/fenfire/fenpdf/actions/keyboard.py
diff -u fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.6
fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.7
--- fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.6 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/actions/keyboard.py Sat Aug 23 13:13:33 2003
@@ -19,7 +19,7 @@
# Note that the default is that the old vobscene is reused.
# If an action needs regeneration, it has to explicitly call for
-# that by fenPDF.uistate.regenerateVs()
+# that by fenPDF.animation.regenerateVs()
class KeyActions:
def __init__(self, context):
@@ -39,7 +39,7 @@
self.fenPDF.structure.alphContent.insertText(acc, offs, char, 1)
cur.setCursorOffset(offs + 1)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def insertCharOrCreate(self, main, char):
@@ -63,7 +63,7 @@
self.insertChar(main, char)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def moveInsertionCursor(self, main, n):
"""Move the text insertion cursor by n.
@@ -83,7 +83,7 @@
cur.setCursorOffset(offs)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def backspace(self, main):
cur = self.context.states.cursor
@@ -111,7 +111,7 @@
self.fenPDF.structure.canvas2d.removeNode(node)
cur.setAccursed(None)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
# XXX Not implemented
@@ -131,11 +131,11 @@
# here from fenpdf10.py, and needs fixing XXX
self.context.states.buoymanager.singles[1].mainNode =
ff.view.buoy.MainNode2D(planeHome, irregu, ctrl)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def save(self):
self.context.save()
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def exit(self):
# Harsh
@@ -149,7 +149,7 @@
self.fenPDF.views.getDoubleGeometer().setSingle(
not self.fenPDF.views.getDoubleGeometer().getSingle())
vob.AbstractUpdateManager.chg()
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def importPDF(self):
@@ -161,14 +161,14 @@
p('sc: ',scrollBlock,'id: ', scrollBlock.getID())
if scrollBlock != None:
self.moveTo(None, scrollBlock)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def newCanvas(self):
canvas = Nodes.N()
self.fenPDF.structure.canvas2d.makeIntoCanvas(canvas)
self.fenPDF.structure.treeTime.addLatest(self.fenPDF.fen.graph, canvas)
self.moveTo(None, canvas)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
def moveTo(self, main, newFocus):
"""Move the focus to a new place.
@@ -179,7 +179,7 @@
index = 0
self.fenPDF.views.setFocus(index, newFocus)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
Index: fenfire/org/fenfire/fenpdf/actions/mouse.py
diff -u fenfire/org/fenfire/fenpdf/actions/mouse.py:1.5
fenfire/org/fenfire/fenpdf/actions/mouse.py:1.6
--- fenfire/org/fenfire/fenpdf/actions/mouse.py:1.5 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/actions/mouse.py Sat Aug 23 13:13:33 2003
@@ -41,7 +41,7 @@
def getMainNode():
return context.states.buoymanager.getLastMain()
def getOldVS():
- return fenPDF.uistate.lastVs
+ return fenPDF.animation.lastVs
# Inside the action, we have the following symbols usable:
# fenPDF - the main FenPDF object
@@ -51,7 +51,7 @@
# Note that the default is that the old vobscene is reused.
# If an action needs regeneration, it has to explicitly call for
-# that by fenPDF.uistate.regenerateVs()
+# that by fenPDF.animation.regenerateVs()
######## Actions to control pan of main nodes etc.
@@ -77,7 +77,7 @@
obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
context.states.cursor.setAccursed(obj)
getMainNode().moveToPoint(int(x),int(y), getOldVS())
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
class ZoomPan(vob.input.RelativeAxisListener):
@@ -94,7 +94,7 @@
def clicked(self, x, y):
obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
context.states.cursor.setAccursed(obj)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
class MouseMenu(vob.mouse.MouseClickListener):
def clicked(self, x, y):
@@ -103,8 +103,11 @@
context.states.objectOnPlane = obj
context.mousemenu.link = 1
else: context.mousemenu.link = 0
+
+ fenPDF.uistate.menu.originateFromMainNode(getMainNode(), obj)
+
context.mousemenu.showList(x,y,'mainmenu')
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
vob.AbstractUpdateManager.setNoAnimation()
####### Actions to control nodes on main node plane
@@ -192,8 +195,9 @@
def clicked(self, x, y):
buoymanager = context.states.buoymanager
p('hit',buoymanager.buoyHit)
+ fenPDF.uistate.menu.originateFromBuoy(buoymanager.buoyHit)
context.mousemenu.showList(x,y, 'buoymenu')
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
vob.AbstractUpdateManager.setNoAnimation()
class BuoyFollowClick(vob.mouse.MouseClickListener):
@@ -201,7 +205,7 @@
buoymanager = context.states.buoymanager
p('hit',buoymanager.buoyHit, buoymanager.buoyHit.single)
buoymanager.buoyHit.single.followLink(buoymanager.buoyHit.link)
- fenPDF.uistate.regenerateVS()
+ fenPDF.animation.regenerateVS()
# Return a map of symbols
res = { }
Index: fenfire/org/fenfire/fenpdf/appearance/views.py
diff -u fenfire/org/fenfire/fenpdf/appearance/views.py:1.8
fenfire/org/fenfire/fenpdf/appearance/views.py:1.9
--- fenfire/org/fenfire/fenpdf/appearance/views.py:1.8 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/appearance/views.py Sat Aug 23 13:13:33 2003
@@ -126,19 +126,20 @@
BuoyManager may decide
"""
- if (not self.fenPDF.uistate.animate) or (
- self.fenPDF.uistate.reuseVs):
+ if (not self.fenPDF.animation.animate) or (
+ self.fenPDF.animation.reuseVs):
vob.AbstractUpdateManager.setNoAnimation()
- if self.fenPDF.uistate.reuseVs:
- return self.fenPDF.uistate.lastVs
+ if self.fenPDF.animation.reuseVs:
+ return self.fenPDF.animation.lastVs
self.buoyManager.scene(vs)
+
self.fenPDF.events.buttons.render(vs, 0)
self.fenPDF.events.mousemenu.render(vs)
- self.fenPDF.uistate.generatedNewScene(vs)
+ self.fenPDF.animation.generatedNewScene(vs)
return vs
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.2
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.3
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.2 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py Sat Aug 23 13:13:33 2003
@@ -1,5 +1,7 @@
# (c) Tuomas J. Lukka and Matti Katila
+from __future__ import nested_scopes
+
import vob
from org.fenfire.swamp import Nodes
from org import fenfire as ff
@@ -13,42 +15,10 @@
def __init__(self, fenPDF, states):
self.states = states
self.fenPDF = fenPDF
- def run(self):
+ def __call__(self):
pass
-
- class LinkL(Action):
- def run(self):
- obj = self.states.objectOnPlane
- pp = self.states.ppActions
- pp.assocNotes(obj, -1, self.states.cursor.getAccursed())
- self.fenPDF.uistate.regenerateVS()
- class LinkR(Action):
- def run(self):
- obj = self.states.objectOnPlane
- pp = self.states.ppActions
- pp.assocNotes(obj, 1, self.states.cursor.getAccursed())
- self.fenPDF.uistate.regenerateVS()
- class UnlinkBuoy(Action):
- def run(self):
- link = self.states.buoymanager.buoyHit.link
- #(otherNode, linkId, otherAnchor, into)
- p('link',link)
- p('Detaching
linkid',link[1],'otheranchor',link[2],'othernode',link[0])
- linkId = link[1]
- if isinstance(linkId,
- ff.view.buoy.TransclusionConnector.LinkId):
- # Transclusion link: delete the node
- self.states.ppActions.deleteNote(
- Nodes.toString(linkId.node))
- else:
- pp = self.states.ppActions
- a,b = link[1].first, link[1].second
- pp.detachNotes(a, 1, b)
- pp.detachNotes(a, -1, b)
- self.fenPDF.uistate.regenerateVS()
-
class KillPlane(Action):
- def run(self):
+ def __call__(self):
main = self.states.buoymanager.getLastMain()
if isinstance(main, ff.view.buoy.MainNode2D):
self.states.ppActions.deletePaper(main.getPlane())
@@ -62,21 +32,15 @@
p('foo fish eye')
else:
p('plaah, unknow main view2d')
- self.fenPDF.uistate.regenerateVS()
class GoHome(Action):
- def run(self):
+ def __call__(self):
pass
#self.s.buoymanager.singles[1].mainNode =
ff.view.buoy.MainNode2D(planeHome, irregu, ctrl)
- class DeleteNode(Action):
- def run(self):
- obj = self.states.objectOnPlane
- self.states.ppActions.deleteNote(obj)
- self.fenPDF.uistate.regenerateVS()
class Transclude(Action):
- def run(self):
+ def __call__(self):
pdfMainNode = self.states.selection.getMainNode()
area = self.states.selection.getXYWH()
obj = pdfMainNode.getView2D().getSelectedObject(
@@ -95,7 +59,6 @@
node = Nodes.get(self.states.ppActions.newNote(plane,
focus.getPanX(), focus.getPanY(), ""))
self.states.fen.txt.set(node, obj)
- self.fenPDF.uistate.regenerateVS()
@@ -114,16 +77,20 @@
self.selectListVob.add('Transclude selection (PDF to canvas only)',
self.Transclude(self.fenPDF, self.states))
if self.link:
- self.selectListVob.add('Link node to left',
self.LinkL(self.fenPDF, self.states))
- self.selectListVob.add('Link node to rigth',
self.LinkR(self.fenPDF, self.states))
+ self.selectListVob.add('Link node to left',
+ lambda: self.fenPDF.actions.menu.structLinkNodes(-1))
+ self.selectListVob.add('Link node to right',
+ lambda: self.fenPDF.actions.menu.structLinkNodes(1))
self.selectListVob.add('Go to home', 'home')
self.selectListVob.add('Destroy this canvas',
self.KillPlane(self.fenPDF, self.states))
if self.link:
- self.selectListVob.add('Delete this node',
self.DeleteNode(self.fenPDF, self.states))
+ self.selectListVob.add('Delete this node',
+ lambda: self.fenPDF.actions.menu.deleteNode())
def makeBuoyList(self):
self.selectListVob = vob.vobs.SelectListVob(self.style)
- self.selectListVob.add('Unlink buoy', self.UnlinkBuoy(self.fenPDF,
self.states))
+ self.selectListVob.add('Unlink buoy',
+ lambda: self.fenPDF.actions.menu.unlinkBuoy())
self.selectListVob.add('Go to home', 'home')
def render(self, vs):
@@ -154,21 +121,22 @@
def mouse(self, ev):
if self.isHide: return 0
- vs = self.fenPDF.uistate.lastVs
+ vs = self.fenPDF.animation.lastVs
cs = vs.matcher.getCS(0, 'MOUSE_MENU')
p('cs:', cs)
key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None)
if key != None:
- p('context menu hit!')
- self.selectListVob.colorize(key, java.awt.Color.red)
- key = key.object
- if isinstance(key, self.Action):
+ try:
+ p('context menu hit!')
+ self.selectListVob.colorize(key, java.awt.Color.red)
+ key = key.object
self.states.oldVS = vs
- key.run()
+ key()
self.states.oldVS = None
- else: p('mouse menu key is: ', key)
- self.hideList()
+ self.hideList()
+ finally: # If there's an error, we still need a new scene
+ self.fenPDF.animation.regenerateVS()
return 1
return 0
Index: fenfire/org/fenfire/fenpdf/fenpdf.py
diff -u fenfire/org/fenfire/fenpdf/fenpdf.py:1.8
fenfire/org/fenfire/fenpdf/fenpdf.py:1.9
--- fenfire/org/fenfire/fenpdf/fenpdf.py:1.8 Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/fenpdf.py Sat Aug 23 13:13:33 2003
@@ -9,7 +9,7 @@
class _Empty:
pass
-class UIState:
+class AnimationState:
"""
The following fields are public:
@@ -40,6 +40,50 @@
self.lastVs = vs
self.animate = 1
+class UIState_Menu:
+ """
+
+ The fields are accessible and are allowed
+ to be read, but they
+ should only be written to using the
+ UIState_Menu object methods.
+
+ shown -- If a menu is currently shown.
+
+ originatingNode -- the node (may be None)
+ on which the context menu
+ was clicked open
+
+ originatingMainNode -- the main view on which
+ the context menu was clicked
+ open. If originatingNode is
+ non-null, this should be too.
+
+ originatingBuoy -- the buoy on which the context
+ menu was clicked open.
+ XXX data format?
+
+ """
+
+ def __init__(self):
+ self.shown = 0
+ self.originatingMainNode = None
+ self.originatingNode = None
+ self.originatingBuoy = None
+ def originateFromBuoy(self, buoy):
+ self.originatingBuoy = buoy
+ self.originatingNode = None
+ self.originatingMainNode = None
+ self.shown = 1
+ def originateFromMainNode(self, mainNode, node):
+ self.originatingBuoy = None
+ self.originatingNode = node
+ self.originatingMainNode = mainNode
+ self.shown = 1
+ def clear(self):
+ self.__init__()
+
+
class FenPDF:
"""This class represents a complete fenpdf "application".
@@ -59,6 +103,7 @@
mouse -- an object like org.fenfire.fenpdf.actions.mouse.MouseActions
key --
+ menu --
structure -- an object with no methods, just fields:
@@ -69,10 +114,24 @@
window -- the GraphicsAPI.window object
- uistate -- an UIState object
- The internal members are prefixed by underscore.
- """
+ animation -- an AnimationState object
+
+ uistate -- just fields:
+ This object stores **ALL** state about the
+ user interface interactions, except
+ the focuses of the main nodes, which are
+ inside views.
+
+ Any selections, cursors, &c are here.
+
+ cursor -- the accursed node or plane
+ menu -- State of the ui context menu.
+
+
+ Any internal members are prefixed by underscore and should
+ not be used by anyone else.
+ """
def __init__(self, fen, treeTime):
self.fen = fen
@@ -80,7 +139,10 @@
self.events = _Empty()
self.actions = _Empty()
self.structure = _Empty()
- self.uistate = UIState()
+ self.animation = AnimationState()
+ self.uistate = _Empty()
+ self.uistate.menu = UIState_Menu()
+
self.structure.structLink = ff.structure.StructLink.create(fen.graph)
self.structure.alphContent = ff.util.AlphContent(fen)
Index: fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.46
fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.47
--- fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.46 Wed Aug 20
12:34:33 2003
+++ fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java Sat Aug 23
13:13:33 2003
@@ -254,6 +254,7 @@
view = view.getChildView2D();
// currently only for canvas2d canvases
+ // XXX Refactor: should be in View2D
if (view instanceof CanvasView2D) {
Object obj = ((CanvasView2D)view)
@@ -262,10 +263,7 @@
box2paper, null);
if (dbg) p("Object is: "+ (obj != null ? obj.toString() : obj));
return obj;
- } else {
- p("not a canvas view?");
- new Throwable().printStackTrace();
- }
+ }
return null;
}
}
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., (continued)
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Matti Katila, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/22
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/23
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/24
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/24
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp...,
Tuomas J. Lukka <=
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/25
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/26