fenfire-commits
[Top][All Lists]
Advanced

[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
         




reply via email to

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