[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: |
Thu, 21 Aug 2003 08:45:08 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Branch:
Changes by: Tuomas J. Lukka <address@hidden> 03/08/21 08:45:08
Modified files:
org/fenfire/bin: fenpdf10.py
org/fenfire/fenpdf: fenpdfcontext.py
org/fenfire/fenpdf/actions: keyboard.py
org/fenfire/fenpdf/events: key.py
Log message:
(Commit from arch): refactoring
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/bin/fenpdf10.py.diff?tr1=1.62&tr2=1.63&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdfcontext.py.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/keyboard.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/key.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/bin/fenpdf10.py
diff -u fenfire/org/fenfire/bin/fenpdf10.py:1.62
fenfire/org/fenfire/bin/fenpdf10.py:1.63
--- fenfire/org/fenfire/bin/fenpdf10.py:1.62 Thu Aug 21 04:15:22 2003
+++ fenfire/org/fenfire/bin/fenpdf10.py Thu Aug 21 08:45:07 2003
@@ -299,6 +299,7 @@
context = Context(w, fen, ppActions, FILE)
fenPDF.events.mouse = ff.fenpdf.events.mouse.MouseMapper(context)
+fenPDF.events.key = ff.fenpdf.events.key.KeyHandler(context.states)
# XXX KLUDGE
mainMouse = fenPDF.events.mouse.mainMouse
@@ -311,6 +312,8 @@
context.states.cursor = ff.fenpdf.fenpdfcontext.Cursor(fen,
views.getMultiplexerNodeContentFunction())
+context.keys = fenPDF.events.key
+
eventHandler.context = context
@@ -318,10 +321,16 @@
ff.view.buoy.AbstractMainNode2D.context = context
fenPDF.actions.mouse = ff.fenpdf.actions.mouse.MouseActions(context)
+fenPDF.actions.key = ff.fenpdf.actions.keyboard.KeyActions(context)
+
fenPDF.events.mouse.fenPDF = fenPDF
fenPDF.events.mouse.update()
+fenPDF.events.key.fenPDF = fenPDF
+
+fenPDF.actions.key.fenPDF = fenPDF
+
class Scene:
@@ -344,18 +353,6 @@
views.getBuoyManager().mouse(ev)
def key(self, key):
- if key == "Ctrl-P":
- s = Scene(context)
- vs = s.getVs()
- w.renderStill(vs, 0);
- saveanim.saveframe("/tmp/buoyframeWithHand.png", w)
-
- if key == "Ctrl-S":
- global currentScene
- currentScene.doubleGeometer.setSingle(
- not currentScene.doubleGeometer.getSingle())
- print "Set single: ",currentScene.doubleGeometer.getSingle()
- vob.AbstractUpdateManager.chg()
eventHandler.key(key)
Index: fenfire/org/fenfire/fenpdf/actions/keyboard.py
diff -u fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.1
fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.2
--- fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.1 Thu Aug 21 04:58:54 2003
+++ fenfire/org/fenfire/fenpdf/actions/keyboard.py Thu Aug 21 08:45:08 2003
@@ -1,3 +1,113 @@
# (c) Tuomas J. Lukka
+# The key event handlers do not have the same restrictions
+# as the event handlers for mouse events -- no need to implement
+# any particular interface.
+# Therefore, we'll just use a single class.
+
+from org.fenfire.swamp import Nodes
+from org import fenfire as ff
+from org.fenfire.util import RDFUtil
+
+dbg = 0
+
+def p(*s):
+ print 'ff.fenpdf.events.key::', s
+
+class KeyActions:
+ def __init__(self, context):
+ self.context = context
+ def insertChar(self, main, char):
+ """Insert a character to the accursed node - no creation.
+
+ If no node is accursed, will do nothing.
+ """
+ cur = self.context.states.cursor
+ pp = self.context.states.ppActions
+
+ acc = Nodes.toString(cur.getAccursed())
+
+ if dbg: p( "Typing: ", cur, cur.getAccursed())
+
+ offs = cur.getCursorOffset()
+
+ pp.insertText(acc, offs, char)
+ cur.setCursorOffset(offs + 1)
+
+
+ def insertCharOrCreate(self, main, char):
+ """Insert a character to the accursed node.
+
+ If no node is accursed, create a new node at cursor.
+ """
+ cur = self.context.states.cursor
+ pp = self.context.states.ppActions
+
+ if cur.getAccursed() == None:
+ paper = Nodes.toString(main.getPlane())
+ note = pp.newNote(paper, int(main.getFocus().getPanX()),
+ int(main.getFocus().getPanY()), "")
+ cur.setAccursed(Nodes.get(note))
+
+ self.insertChar(main, char)
+
+ def moveInsertionCursor(self, main, n):
+ """Move the text insertion cursor by n.
+
+ The number n may be positive or negative.
+ If no node is accursed, will do nothing.
+ """
+ cur = self.context.states.cursor
+ acc = cur.getAccursed()
+ if acc == None: return
+
+ # XXX !!!
+ alphContent = ff.util.AlphContent(self.context.states.fen)
+
+ offs = cur.getCursorOffset() + n
+ if offs < 0: offs = 0
+ l = len(alphContent.getText(acc))
+
+ if offs > l: offs = l
+
+ cur.setCursorOffset(offs)
+
+ def backspace(self, main):
+ cur = self.context.states.cursor
+ pp = self.context.states.ppActions
+
+
+ acc = cur.getAccursed()
+ if acc == None: return
+ offs = cur.getCursorOffset()
+
+ note = Nodes.toString(acc)
+
+ # XXX !!!
+ alphContent = ff.util.AlphContent(self.fenPDF.fen)
+
+ if offs >= 1:
+ p('delete:', offs)
+ pp.deleteText(note, offs - 1, offs)
+ offs = cur.setCursorOffset(offs - 1)
+ text = alphContent.getText(self.fenPDF.fen.constgraph, acc)
+ if offs == 0 and len(text) == 0:
+ # If text went to nothingness
+ if RDFUtil.isLinked(self.fenPDF.fen.graph, acc):
+ # Kludge workaround: insert # if it is linked
+ pp.insertText(note, 0, "#")
+ else:
+ # Delete the note
+ pp.deleteNote(note)
+ cur.setAccursed(None)
+
+
+ # XXX Not implemented
+ def toggleBgTextureUse(self, value = -1):
+ p("Not implemented")
+ pass
+
+ def changeBgPaperMaker(self):
+ p("Not implemented")
+ pass
Index: fenfire/org/fenfire/fenpdf/events/key.py
diff -u fenfire/org/fenfire/fenpdf/events/key.py:1.1
fenfire/org/fenfire/fenpdf/events/key.py:1.2
--- fenfire/org/fenfire/fenpdf/events/key.py:1.1 Thu Aug 21 04:24:09 2003
+++ fenfire/org/fenfire/fenpdf/events/key.py Thu Aug 21 08:45:08 2003
@@ -1,89 +1,56 @@
# (c) Tuomas J. Lukka, Matti Katila and Benja Fallenstein
""" Keyboard events.
+
+This class determines which action to call for which
+key.
+
+This class SHALL NOT KNOW ANYTHING about the internals
+of FenPDF!
+
"""
from org import fenfire as ff
from org.fenfire.spanimages.gl import papermakers
from org.fenfire.swamp import Nodes
+dbg = 0
+
def p(*s):
print 'ff.fenpdf.events.key::', s
class KeyHandler:
def __init__(self, states):
self.states = states
- self.makerTypes = [
- papermakers.fancyBlur(),
- papermakers.fancyHalo(),
- papermakers.fancyBlend(),
- papermakers.white(),
- ]
def key(self, stroke, main):
- p('KEY', stroke,', v:',main)
-
-
- fen = self.states.fen
- pp = self.states.ppActions
- cur = self.states.cursor
- acc = cur.getAccursed()
- offs = cur.getCursorOffset()
- alphContent = ff.util.AlphContent(self.states.fen)
+ if dbg: p('KEY', stroke,', v:',main)
### normal alphabets etc.
if len(stroke) == 1:
- p( "Typing: ", acc, cur, cur.getAccursed())
- if acc == None:
- paper = Nodes.toString(main.getPlane())
- note = pp.newNote(paper, int(main.getFocus().getPanX()),
- int(main.getFocus().getPanY()), "")
- cur.setAccursed(Nodes.get(note))
-
- acc = Nodes.toString(cur.getAccursed())
- pp.insertText(acc, offs, stroke)
- cur.setCursorOffset(offs + 1)
- return
-
- if stroke == 'Ctrl-B':
- p('change the bg texture..')
- v = main.getView2D()
- while v != None:
- if isinstance(v, ff.view.PaperView2D):
- v.drawPaper = not v.drawPaper
- v = v.getChildView2D()
- if stroke == 'Ctrl-I':
- p('change spanImageFactory\'s papermaker')
- self.makerTypes.append(self.makerTypes.pop(0))
- self.states.spanImageFactory.paperMaker = self.makerTypes[0]
- self.states.nodeview.reinit(fen.graph, 100)
- self.states.view2d.pageview_without_surrounding.flush()
-
- if acc == None:
- print "Other keys only for accursed"
- return
+ self.fenPDF.actions.key.insertCharOrCreate(main, stroke)
+
+ # XXX Need to get rid of these --
+ # needed for bolding and italics
+ elif stroke == 'Ctrl-B':
+ self.fenPDF.actions.key.toggleBgTextureUse()
+
+ elif stroke == 'Ctrl-I':
+ self.fenPDF.actions.key.changeBgPaperMaker()
+
+ # XXX Need to change this -- needed for saving!
+ elif stroke == 'Ctrl-S':
+ XXX
+ currentScene.doubleGeometer.setSingle(
+ not currentScene.doubleGeometer.getSingle())
+ print "Set single: ",currentScene.doubleGeometer.getSingle()
+ vob.AbstractUpdateManager.chg()
- if stroke == 'Return':
+ elif stroke == 'Return':
if dbg: p('Insert \\n')
-
- acc = Nodes.toString(acc)
- pp.insertText(acc, offs, "\n")
- cur.setCursorOffset(offs + 1)
+ self.fenPDF.actions.key.insertChar(main, "\n")
elif stroke == 'Backspace':
- note = Nodes.toString(acc)
- if offs >= 1:
- p('delete:', offs)
- pp.deleteText(note, offs - 1, offs)
- offs = cur.setCursorOffset(offs - 1)
- text = alphContent.getText(fen.constgraph, acc)
- if offs == 0 and len(text) == 0:
- if RDFUtil.isLinked(fen.graph, acc):
- pp.insertText(note, 0, "#")
- else:
- pp.deleteNote(note)
- cur.setAccursed(None)
+ self.fenPDF.actions.key.backspace(main)
elif stroke == 'Left':
- if offs > 0: cur.setCursorOffset(offs - 1)
+ self.fenPDF.actions.key.moveInsertionCursor(main, -1)
elif stroke == 'Right':
- text = alphContent.getText(acc)
- if offs < len(text):
- cur.setCursorOffset( offs + 1)
+ self.fenPDF.actions.key.moveInsertionCursor(main, 1)
Index: fenfire/org/fenfire/fenpdf/fenpdfcontext.py
diff -u fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.21
fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.22
--- fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.21 Thu Aug 21 04:24:09 2003
+++ fenfire/org/fenfire/fenpdf/fenpdfcontext.py Thu Aug 21 08:45:08 2003
@@ -266,7 +266,6 @@
global w
w = win
self.states = ContextStates(fen, pp)
- self.keys = ff.fenpdf.events.key.KeyHandler(self.states)
self.mousemenu = MouseMenu(self.states)
self.filename = filename
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/20
- [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp..., Tuomas J. Lukka, 2003/08/21
- [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 <=
- [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, 2003/08/24
- [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