[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9176 - trunk/gnue-forms/src/uidrivers/curses/widgets
From: |
johannes |
Subject: |
[gnue] r9176 - trunk/gnue-forms/src/uidrivers/curses/widgets |
Date: |
Tue, 19 Dec 2006 04:49:05 -0600 (CST) |
Author: johannes
Date: 2006-12-19 04:49:04 -0600 (Tue, 19 Dec 2006)
New Revision: 9176
Modified:
trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py
Log:
Multiline text edit is capable of entering text now (although selection
is still missing)
Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py 2006-12-19
09:51:34 UTC (rev 9175)
+++ trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py 2006-12-19
10:49:04 UTC (rev 9176)
@@ -490,6 +490,19 @@
class MultiLineTextEntry(TextEntry):
# -------------------------------------------------------------------------
+ # Constructor
+ # -------------------------------------------------------------------------
+
+ def __init__(self, entry, row_offset):
+
+ BaseEntry.__init__(self, entry, row_offset)
+
+ self.selection = None
+ self.__vx = self.__vy = 0 # Virtual cursor position
+ self.__hoffs = self.__voffs = 0 # Offset of the top/left cell
+
+
+ # -------------------------------------------------------------------------
# Draw the widget
# -------------------------------------------------------------------------
@@ -499,7 +512,9 @@
text = self.value or ''
for (row, line) in enumerate(text.splitlines()):
- data[row] = line[self.offset:].ljust(self.width)[:self.width]
+ vrow = row - self.__voffs
+ if (vrow >= 0) and (vrow < self.height):
+ data[vrow] = line[self.__hoffs:].ljust(self.width)[:self.width]
for (row, line) in enumerate(data):
self.entry._parent.write(self.left, self.top + row, line,
@@ -520,21 +535,50 @@
if not self.entry.ready():
return
+ gDebug(2, "S=%s/%s, H=%s, V=%s" % (self.width, self.height,
+ self.__hoffs, self.__voffs))
(row, col) = self.__position_to_coord(position)
- if col > self.width - 1:
- self.offset = col - self.width + 1
+ self.__vx = col
+ self.__vy = row
+
+ delta_x = col - self.__hoffs
+ delta_y = row - self.__voffs
+
+ gDebug(2, "ch/rv: %s/%s" % (delta_x, delta_y))
+
+ if (delta_x) > self.width - 1:
+ self.__hoffs = col - self.width + 1
col = self.width - 1
+ gDebug(2, "New HOFFS: %s" % self.__hoffs)
need_repaint = True
- elif col < 0:
- self.offset += col
+ elif (delta_x) < 0:
+ self.__hoffs += delta_x
col = 0
+ gDebug(2, "New HOFFS: %s" % self.__hoffs)
need_repaint = True
+ else:
+ col -= self.__hoffs
+ if delta_y > self.height - 1:
+ self.__voffs = row - self.height + 1
+ gDebug(2, "New VOFFS: %s" % self.__voffs)
+ row = self.height - 1
+ need_repaint = True
+
+ elif delta_y < 0:
+ self.__voffs += delta_y
+ gDebug(2, "New VOFFS: %s" % self.__voffs)
+ row = 0
+ need_repaint = True
+ else:
+ row -= self.__voffs
+
if need_repaint:
self._repaint_()
if self.has_focus:
+ gDebug(2, "Point to: %s/%s" % (col, row))
self.entry._parent.move(self.left + col, self.top + row)
# -------------------------------------------------------------------------
@@ -543,12 +587,13 @@
def __position_to_coord(self, position):
- part = (self.value or '')[self.offset:position]
+ part = (self.value or '')[:position]
paragraph = part.count('\n')
offset = position
if paragraph > 0:
offset = len(part.split('\n')[-1])
+ gDebug(2, "pos2virt: %s %s/%s" % (position, paragraph, offset))
return (paragraph, offset)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9176 - trunk/gnue-forms/src/uidrivers/curses/widgets,
johannes <=