commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef/src UIcurses.py


From: James Thompson
Subject: gnue/gnuef/src UIcurses.py
Date: Sun, 14 Jan 2001 20:19:26 -0800

CVSROOT:        /cvs
Module name:    gnue
Changes by:     James Thompson <address@hidden> 01/01/14 20:19:26

Modified files:
        gnuef/src      : UIcurses.py 

Log message:
        Converted from python 2.0 curses to python 1.5.2 (should still work on 
2.0)
        Fixed cursor positioning bug

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIcurses.py.diff?r1=1.2&r2=1.3

Patches:
Index: gnue/gnuef/src/UIcurses.py
diff -u gnue/gnuef/src/UIcurses.py:1.2 gnue/gnuef/src/UIcurses.py:1.3
--- gnue/gnuef/src/UIcurses.py:1.2      Sat Dec 30 02:25:53 2000
+++ gnue/gnuef/src/UIcurses.py  Sun Jan 14 20:19:26 2001
@@ -15,12 +15,10 @@
 import GFDebug
 import sys
 
-import ncurses.form
-import ncurses.curses
 import curses
-from curses import ascii
-from curses.wrapper import wrapper
-from ncurses.panel import *
+import string
+#from curses import ascii
+#from curses.wrapper import wrapper
 
 def COLOR_PAIR(pair):
   return pair<<8
@@ -63,41 +61,6 @@
   def __del__(self):
     curses.endwin()
     sys.exitclean=TRUE
-
-##   def addField(self,x,y,w,text,new_page, object, type="entry"):
-##     GFDebug.printMesg(3,'%d %d %d %s\r' % (x,y,w,text))
-##     if x+w>79 or y>24:
-##       return
-##     field=ncurses.form.FIELD(1,w,y,x)
-##     field.field_opts_off(ncurses.form.O_STATIC)
-##     field.set_field_buffer(text)
-##     field.set_field_pad('_')
-##     field.set_new_page(new_page)
-##     field.fld_userptr = (type, object)
-##     self.fields.append(field)
-##     return field
-
-##  def addChoice(self,x,y,w,choices,new_page, object, type="choice"):
-##    GFDebug.printMesg(3,'%d %d %d %s\r' % (x,y,w,choices[0]))
-##    if x+w>79 or y>24:
-##      return
-##    field=ncurses.form.FIELD(1,w,y,x)
-##    field.field_opts_off(ncurses.form.O_STATIC)
-##    field.TYPE_ENUM(choices, TRUE, TRUE)
-##    field.set_field_pad('.')
-##    field.set_new_page(new_page)
-##    field.fld_userptr = (type, object)
-##    self.fields.append(field)
-##    return field
-
-##  def addLabel(self,x,y,text,new_page):
-##    GFDebug.printMesg(3, '%d %d %s\r' % (x,y,text))
-##    if x+len(text)>79 or y>24:
-##      return
-##    field=ncurses.form.LABEL(y,x,text)
-##    field.set_new_page(new_page)
-##    self.fields.append(field)
-##    return field
   
   def handle(self,c):
     if self.kbdFuncs.has_key(c):
@@ -172,7 +135,6 @@
       self.uiEventTrap(ev)
 
   def uiEventTrap(self, event):
-#    action = self.panel.handleEvent(event)
     try:
       GFDebug.printMesg(2, "%d"%event)
       action = self.keyEvents[event]
@@ -191,6 +153,8 @@
     object = self.currentObject[0]
     container = self.currentWidget[0]
 
+    print object.width, object.height
+
     self.frame = NCMain()
     
     return self.frame
@@ -199,16 +163,11 @@
     object = self.currentObject[0]
     container = self.currentWidget[0]
 
-    # Need to set height and width = to form height and width
-    page = NCPage( container, 200, 200 )
+    print self.form.width
+    page = NCPage( container, self.form.height, self.form.width )
     
     return page
   
-#  def pageHandler(self):
-#    self.newPage=1
-#    self.currentPage = self.currentPage + 1
-#    return self.currentPage
-
   def boxHandler(self):
     object = self.currentObject[0]
     self.panel.addBox( int(object.height), int(object.width),
@@ -332,6 +291,7 @@
     ncfield = self.formToUI[event.data][0][index]
     self.frame.setFocus(ncfield)
     self.frame.refresh()
+    ncfield.window.refresh()
     curses.doupdate()
     
   def updateEntry(self,event):
@@ -345,6 +305,7 @@
     else:
       style = 'text'
 
+    # Fill the prior spots
     for count in range(index):
       value = block.dataSourceLink.getField(currentRecord-(index-count),
                                             event.data.field)
@@ -354,6 +315,7 @@
       ncfield = self.formToUI[event.data][0][count]
       ncfield.set_field_buffer(value)
 
+    # fill currently indexed spot
     if style == 'dropdown':
       value = event.data.allowedValues()[event.data.getValue()]
     else:
@@ -363,8 +325,12 @@
     ncfield.setText(value)
     positionx = event.data.cursorPosition
     positiony = 0
-    ncfield.window.move(positiony, positionx)
 
+    # Fill trailing spots
+    #
+    # You must skip the matching index but
+    # you do not want to just add 1 to count
+    # as the formulas would then be off                
     count = index
     while count < int(event.data.visibleCount):
       if count != index:
@@ -378,6 +344,11 @@
       count = count +1   
     self.frame.refresh()
     curses.doupdate()
+
+    # move the cursor to where it should be on the screen
+    ncfield.window.move(positiony, positionx)
+    ncfield.window.refresh () 
+    curses.doupdate()
     
   def updateStatus(self, event):
     GFDebug.printMesg(1, "%s"%event.data)
@@ -446,7 +417,7 @@
         focus.move(0, len(focus.getText()))
       elif key == ord('\r'): # return key
           break # leave loop on return
-      elif (ascii.isalnum(key)) or (key == ord(' ')):
+      elif chr(key) in string.letters+string.digits+" ":
         text = focus.getText()
         newtext = text + chr(key)
         focus.setText(newtext)
@@ -521,7 +492,7 @@
       widget.refresh()
     self.draw()
     if not isinstance(self, NCPage) and not self.subwin:
-      self.window.noutrefresh()
+      self.window.nooutrefresh()
       if hasattr(self, 'getBook'):
         for page in self.pages:
           if page.visible:
@@ -529,9 +500,8 @@
             sminy, sminx = book.window.getbegyx()
             smaxy, smaxc = book.window.getmaxyx()
             pminrow, pmincol = ( 0, 0)
-            page.window.noutrefresh( pminrow, pmincol,
-                                     sminy, sminx,
-                                     smaxy, smaxc )
+            page.window.nooutrefresh()
+            
     if (self.parent == None):
       widget = self
       while (widget.focus != None):
@@ -555,7 +525,7 @@
       self.window = curses.newwin( lines, cols, by, bx )
     else:
       self.subwin = 1
-      self.window = parent.window.derwin( lines, cols, by, bx )
+      self.window = parent.window.subwin( lines, cols, by, bx )
 
   def draw(self):
     pass
@@ -572,8 +542,11 @@
   #
   def __init__(self, parent, lines, cols):
     NCWidget.__init__(self, parent)
-    self.window = curses.newpad( lines, cols )
-
+    #self.window = curses.newpad( lines, cols )
+    
+    parentY, parentX = parent.window.getbegyx()
+    self.window = parent.window.subwin(parentY, parentX)
+        
     self.visible = 0
     self.ispad = 1
     if len(parent.pages):
@@ -598,7 +571,12 @@
   def __init__(self, parent, line, col, text, attr=curses.A_BOLD):
     NCWidget.__init__(self, parent)
 
-    self.window = parent.window.derwin( 1, len(text), line, col)
+    #print parent.window.getbegyx ()
+    #print parent.window.getmaxyx () 
+    #print 1, len(text), line+ , col
+
+    parentY, parentX = parent.window.getbegyx ()
+    self.window = parent.window.subwin( 1, len(text), parentY+line, 
parentX+col)
     self.subwin = 1
     
     self.realx = line
@@ -613,7 +591,10 @@
 
   def draw(self):
     self.window.clear()
-    self.window.insstr( 0, 0, self.text, self.attr )
+    for index in range(len(self.text)-1,-1,-1):
+      self.window.insch(0, 0, ord(self.text[index]), self.attr )
+      
+    #self.window.insstr( 0, 0, self.text, self.attr )
 
 class NCEntry(NCWidget):
   #
@@ -626,8 +607,9 @@
     self.height = height
     self.width = width
     self.password = password
-
-    self.window = parent.window.derwin( height, width, line, col )
+    
+    parentY, parentX = parent.window.getbegyx ()
+    self.window = parent.window.subwin( height, width, parentY+line, 
parentX+col )
     self.subwin = 1
     
     self.pad = '_'
@@ -646,7 +628,14 @@
         text = '*'*len(lines[line]) + self.pad*numspace
       else:
         text = lines[line] + self.pad*numspace
-      self.window.insstr( line, 0, text)
+
+      for index in range(len(text)-1,-1,-1):
+        self.window.insch(line, 0, ord(text[index]))
+
+      #for character in self.text:
+      #  self.window.insch(line,0, character)
+            
+      #self.window.insstr( line, 0, text)
 
   def setText(self, text):
     self.text = text
@@ -685,15 +674,15 @@
     # ncurses statusbar
     self.bottom = NCForm( self, 3, cols, lines-4, 0)
 
-    self.bottommsg1 = NCLabel(self.bottom, 0, 2, bottommsg1, attr=A_NORMAL)
-    self.bottommsg2 = NCLabel(self.bottom, 1, 2, bottommsg2, attr=A_NORMAL)
-    self.bottommsg3 = NCLabel(self.bottom, 2, 2, bottommsg3, attr=A_NORMAL)
+    self.bottommsg1 = NCLabel(self.bottom, 0, 2, bottommsg1, 
attr=curses.A_NORMAL)
+    self.bottommsg2 = NCLabel(self.bottom, 1, 2, bottommsg2, 
attr=curses.A_NORMAL)
+    self.bottommsg3 = NCLabel(self.bottom, 2, 2, bottommsg3, 
attr=curses.A_NORMAL)
     
     # GNUef statusbar
     self.status = NCForm( self, 1, cols, lines-1, 0)
 #    self.status.attrset(A_REVERSE)
-    self.statusmesg = NCLabel(self.status, 0, 2, statusmsg, attr=A_NORMAL)
-#    self.status.chgat(COLS(), A_REVERSE, 0)
+    self.statusmesg = NCLabel(self.status, 0, 2, statusmsg, 
attr=curses.A_NORMAL)
+#    self.status.chgat(COLS(), curses.A_REVERSE, 0)
     self.refresh()
 
   def getBook(self):



reply via email to

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