gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] gzz ./Gzz.py ./bindings.py gzz/client/actions.p...


From: Benja Fallenstein
Subject: [Gzz-commits] gzz ./Gzz.py ./bindings.py gzz/client/actions.p...
Date: Sun, 27 Oct 2002 19:54:13 -0500

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Benja Fallenstein <address@hidden>      02/10/27 19:54:13

Modified files:
        .              : Gzz.py bindings.py 
        gzz/client     : actions.py pythonbinder.py 

Log message:
        Python bindings somewhat work

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/Gzz.py.diff?tr1=1.42&tr2=1.43&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/bindings.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/client/actions.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/client/pythonbinder.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text

Patches:
Index: gzz/Gzz.py
diff -u gzz/Gzz.py:1.42 gzz/Gzz.py:1.43
--- gzz/Gzz.py:1.42     Sun Oct 27 19:17:54 2002
+++ gzz/Gzz.py  Sun Oct 27 19:54:13 2002
@@ -74,8 +74,8 @@
         else:
             print "Using Python bindings"
             import bindings
-            self.binder = \
-                gzz.client.pythonbinder.PythonBinder(bindings.normal_mode)
+            self.binder = gzz.client.pythonbinder.PythonBinder(
+                bindings.normal_mode, bindings.edit_mode, bindings.search_mode)
         
         self.spanType = java.lang.System.getProperty("gzz.spanType")
         self.spaceType = java.lang.System.getProperty("gzz.spaceType")
Index: gzz/bindings.py
diff -u gzz/bindings.py:1.2 gzz/bindings.py:1.3
--- gzz/bindings.py:1.2 Sun Oct 27 19:17:54 2002
+++ gzz/bindings.py     Sun Oct 27 19:54:13 2002
@@ -9,6 +9,9 @@
 
 from gzz.client.actions import *
 
+edit_mode = {}
+search_mode = {}
+
 normal_mode = {
 
     # "Meta-binding:"
@@ -92,8 +95,8 @@
     'g': GoTo(1),
     'G': GoTo(0),
 
-    'Delete': Delete(),
-    'Ctrl-Backspace': Delete(),    # Macs have no "Delete" key
+    'Delete': Delete(1),
+    'Ctrl-Backspace': Delete(1),    # Macs have no "Delete" key
 
 
 
Index: gzz/gzz/client/actions.py
diff -u gzz/gzz/client/actions.py:1.2 gzz/gzz/client/actions.py:1.3
--- gzz/gzz/client/actions.py:1.2       Sun Oct 27 19:17:54 2002
+++ gzz/gzz/client/actions.py   Sun Oct 27 19:54:13 2002
@@ -27,11 +27,12 @@
     def call(self, x):
         op = x.getPendingOp()
         if not op: op = Move()
+        x.setPendingOp(None)
 
-        x = x.setDir(self.side, self.axis, self.dir)
-        op.dir(self, x)
+        x.setDir(self.side, self.axis, self.dir)
+        op.dir(x)
 
-        gzz.client.AbstractUpdateManager.prioritize(self.win.getScreen())
+        gzz.client.AbstractUpdateManager.prioritize(x.win.getScreen())
 
 class New(DirOp):
     def dir(self, x):
@@ -47,6 +48,15 @@
         x.checkNew()
         x.win.cursor = x.new
 
+class Connect(DirOp):
+    def dir(self, x):
+        if not x.getMarks():
+            x.cell.connect(x.dim, x.dir,
+                           x.client.windows[1-x.side].cursor)
+        else:
+            raise gzz.client.ClientException(
+                "Sorry, connecting to marked cells is not implemented yet.")
+
 class Break(DirOp):
     def dir(self, x):
         x.checkNew()
@@ -70,7 +80,7 @@
     try:
         c = x.client
         c.filers.saveAll(c.space.getSlicer().exportAll())
-        c.filers.saveAll(c.space.linkSpace.getSlicer().exportAll())
+        c.filers.saveAll(c.linkSpace.getSlicer().exportAll())
         print "Saved."
         return 1
 
@@ -79,6 +89,11 @@
         e.printStackTrace()
         return 0
 
+class Delete(SidedOp):
+    def call(self, x):
+        w = self.client.windows[self.side]
+        w.cursor.delete() # XXX move cursor
+
 class Save(Op):
     def call(self, x):
         save(x)
@@ -132,7 +147,7 @@
         c = x.client.windows[self.side].cursor
 
         if c not in x.getMarkedCells():
-            x.setMarks = x.getMarks() + [gzz.view.Mark(c)]
+            x.setMarks(x.getMarks() + [gzz.view.Mark(c)])
         else:
             x.setMarks([m for m in x.getMarks() if m.cell != c])
 
@@ -147,11 +162,28 @@
 
         else:
             for i in range(len(marks) - 1):
-                if marks[i].cell == x.cell:
+                if marks[i].cell == w.cursor:
                     w.cursor = marks[i+1].cell
                     break
             else:
-                w.cursor = marks[0]
+                w.cursor = marks[0].cell
+
+class NormalMode(Op):
+    def call(self, x):
+        x.setMode('normal')
+
+class EditMode(SidedOp):
+    def call(self, x):
+        if self.side == 0:
+            x.setMode('edit 0')
+        elif self.side == 1:
+            x.setMode('edit 1')
+        else:
+            assert 0
+
+class SearchMode(Op):
+    def call(self, x):
+        x.setMode('search')
 
 class MakeLink(Op):
     def __init__(self, dir): self.dir = dir
Index: gzz/gzz/client/pythonbinder.py
diff -u gzz/gzz/client/pythonbinder.py:1.2 gzz/gzz/client/pythonbinder.py:1.3
--- gzz/gzz/client/pythonbinder.py:1.2  Sun Oct 27 19:17:54 2002
+++ gzz/gzz/client/pythonbinder.py      Sun Oct 27 19:54:13 2002
@@ -1,23 +1,55 @@
 
 import java, gzz
 
-class PythonBinder(gzz.client.FallbackBinder):    
-    def __init__(self, bindings):
-        self.bindings = bindings
+MODES = ['normal', 'edit 0', 'edit 1', 'search']
 
-    def setFallback(client):
+class PythonBinder(gzz.client.FallbackBinder):  
+    def __init__(self, normal_mode, edit_mode, search_mode):
+        self.normal_mode = normal_mode
+        self.edit_mode = edit_mode
+        self.search_mode = search_mode
+
+    def setFallback(self, client):
         self.client = client
 
     pendingOp = None
+    mode = 'normal'
+
+    def getBindings(self):
+        if self.mode == 'normal':
+            return self.normal_mode
+        
+        elif self.mode in ['edit 0', 'edit 1']:
+            return self.edit_mode
+        
+        elif self.mode == 'search':
+            return self.search_mode
+        
+        else:
+            assert 0
 
     def keystroke(self, key, win):
+        bindings = self.getBindings()
+        
         try:
-            op = self.bindings[key]
+            op = bindings[key]
+            
         except KeyError:
-            print "Unbound key: ", key
-            return
+            if len(key) == 1 and bindings.has_key('CHAR'):
+                op = bindings['CHAR']
+                op.key(State(self, win), key)
+
+            elif bindings.has_key('DEFAULT'):
+                op = bindings['DEFAULT']
+                op.key(State(self, win), key)
+
+            else:
+                print "Unbound key: ", key
+        
+        else:
+            op.call(State(self, win))
 
-        op.call(State(self, win))
+        gzz.client.AbstractUpdateManager.chg()
 
     def mouse(self, event, win):
         pass
@@ -33,11 +65,22 @@
 
         self.client = binder.client
 
+        if self.binder.mode.startswith('edit '):
+            if self.binder.mode == 'edit 0':
+                self.editside = 0
+            elif self.binder.mode == 'edit 1':
+                self.editside = 1
+            else:
+                assert 0
+
+            self.editwin = self.client.windows[editside]
+            self.editcell = self.editwin.cursor
+
     def getPendingOp(self):
-        return self.client.pendingOp
+        return self.binder.pendingOp
 
     def setPendingOp(self, op):
-        self.client.pendingOp = op
+        self.binder.pendingOp = op
 
     def getMarks(self):
         return list(gzz.view.DefaultBinder.marks)
@@ -55,12 +98,16 @@
         gzz.view.DefaultBinder.marks = l
         gzz.view.DefaultBinder.markedCells = s
 
+    def setMode(self, mode):
+        assert mode in MODES
+        self.client.mode = mode
+
     def setDir(self, side, axis, dir):
         self.side = side
         self.axis = axis
         self.dir = dir
 
-        self.win = self.client.windows[win]
+        self.win = self.client.windows[side]
         self.cell = self.win.cursor
         self.dim = self.win.dims[axis]
         self.new = self.cell.s(self.dim, self.dir)
@@ -71,7 +118,7 @@
         if not self.new:
             raise gzz.client.ClientException(
                 "Sorry, but there's no cell %s cell '%s'" %
-                [self.getDirString(), self.cell.t()])
+                (self.getDirString(), self.cell.t()))
 
     def getDirString(self):
         if self.dir < 0: dir = -1




reply via email to

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