summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/lib-stdwin/TextEdit.py84
-rwxr-xr-xLib/stdwin/TextEdit.py84
2 files changed, 146 insertions, 22 deletions
diff --git a/Lib/lib-stdwin/TextEdit.py b/Lib/lib-stdwin/TextEdit.py
index f70fba1..5473f2b 100644
--- a/Lib/lib-stdwin/TextEdit.py
+++ b/Lib/lib-stdwin/TextEdit.py
@@ -1,5 +1,8 @@
# Text editing widget
+# NB: this always assumes fixed bounds.
+# For auto-growing TextEdit windows, different code would be needed.
+
from stdwinevents import *
class TextEdit():
@@ -11,7 +14,14 @@ class TextEdit():
self.rows = rows
self.text = ''
# Creation of the editor is done in realize()
- self.editor = 0
+ self.editor = None
+ self.dh = self.dv = 0
+ return self
+ #
+ def createboxed(self, (parent, (cols, rows), (dh, dv))):
+ self = self.create(parent, (cols, rows))
+ self.dh = max(0, dh)
+ self.dv = max(0, dv)
return self
#
def settext(self, text):
@@ -24,26 +34,69 @@ class TextEdit():
del self.editor
del self.window
#
- def minsize(self, m):
- return self.cols*m.textwidth('in')/2, self.rows*m.lineheight()
+ def getminsize(self, (m, (width, height))):
+ width = max(0, width - 2*self.dh)
+ height = max(0, height - 2*self.dv)
+ if width > 0 and self.editor:
+ (left, top), (right, bottom) = self.editor.getrect()
+ act_width, act_height = right - left, bottom - top
+ if width >= act_width:
+ width = width + 2*self.dh
+ height = max(height, act_height) + 2*self.dv
+ return width, height
+ width = max(width, self.cols*m.textwidth('in')/2) + 2*self.dh
+ height = max(height, self.rows*m.lineheight()) + 2*self.dv
+ return width, height
+ #
def setbounds(self, bounds):
self.bounds = bounds
if self.editor:
- self.editor.move(bounds)
- def getbounds(self, bounds):
- if self.editor:
- return self.editor.getrect()
- else:
- return self.bounds
+ (left, top), (right, bottom) = bounds
+ left = left + self.dh
+ top = top + self.dv
+ right = right - self.dh
+ bottom = bottom - self.dv
+ self.editor.move((left, top), (right, bottom))
+ if self.dh and self.dv:
+ (left, top), (right, bottom) = bounds
+ left = left + 1
+ top = top + 1
+ right = right - 1
+ bottom = bottom - 1
+ bounds = (left, top), (right, bottom)
+ self.editor.setview(bounds)
+ #
+ def getbounds(self):
+ return self.bounds
+ #
def realize(self):
self.window = self.parent.getwindow()
- self.editor = self.window.textcreate(self.bounds)
+ (left, top), (right, bottom) = self.bounds
+ left = left + self.dh
+ top = top + self.dv
+ right = right - self.dh
+ bottom = bottom - self.dv
+ self.editor = \
+ self.window.textcreate((left, top), (right, bottom))
+ self.editor.setactive(0)
+ bounds = self.bounds
+ if self.dh and self.dv:
+ (left, top), (right, bottom) = bounds
+ left = left + 1
+ top = top + 1
+ right = right - 1
+ bottom = bottom - 1
+ bounds = (left, top), (right, bottom)
+ self.editor.setview(bounds)
self.editor.settext(self.text)
self.parent.need_mouse(self)
self.parent.need_keybd(self)
self.parent.need_altdraw(self)
+ #
def draw(self, (d, area)):
- pass
+ if self.dh and self.dv:
+ d.box(self.bounds)
+ #
def altdraw(self, area):
self.editor.draw(area)
#
@@ -51,11 +104,20 @@ class TextEdit():
#
def mouse_down(self, detail):
x = self.editor.event(WE_MOUSE_DOWN, self.window, detail)
+ #
def mouse_move(self, detail):
x = self.editor.event(WE_MOUSE_MOVE, self.window, detail)
+ #
def mouse_up(self, detail):
x = self.editor.event(WE_MOUSE_UP, self.window, detail)
#
def keybd(self, (type, detail)):
x = self.editor.event(type, self.window, detail)
#
+ def activate(self):
+ self.editor.setfocus(0, 30000)
+ self.editor.setactive(1)
+ #
+ def deactivate(self):
+ self.editor.setactive(0)
+ #
diff --git a/Lib/stdwin/TextEdit.py b/Lib/stdwin/TextEdit.py
index f70fba1..5473f2b 100755
--- a/Lib/stdwin/TextEdit.py
+++ b/Lib/stdwin/TextEdit.py
@@ -1,5 +1,8 @@
# Text editing widget
+# NB: this always assumes fixed bounds.
+# For auto-growing TextEdit windows, different code would be needed.
+
from stdwinevents import *
class TextEdit():
@@ -11,7 +14,14 @@ class TextEdit():
self.rows = rows
self.text = ''
# Creation of the editor is done in realize()
- self.editor = 0
+ self.editor = None
+ self.dh = self.dv = 0
+ return self
+ #
+ def createboxed(self, (parent, (cols, rows), (dh, dv))):
+ self = self.create(parent, (cols, rows))
+ self.dh = max(0, dh)
+ self.dv = max(0, dv)
return self
#
def settext(self, text):
@@ -24,26 +34,69 @@ class TextEdit():
del self.editor
del self.window
#
- def minsize(self, m):
- return self.cols*m.textwidth('in')/2, self.rows*m.lineheight()
+ def getminsize(self, (m, (width, height))):
+ width = max(0, width - 2*self.dh)
+ height = max(0, height - 2*self.dv)
+ if width > 0 and self.editor:
+ (left, top), (right, bottom) = self.editor.getrect()
+ act_width, act_height = right - left, bottom - top
+ if width >= act_width:
+ width = width + 2*self.dh
+ height = max(height, act_height) + 2*self.dv
+ return width, height
+ width = max(width, self.cols*m.textwidth('in')/2) + 2*self.dh
+ height = max(height, self.rows*m.lineheight()) + 2*self.dv
+ return width, height
+ #
def setbounds(self, bounds):
self.bounds = bounds
if self.editor:
- self.editor.move(bounds)
- def getbounds(self, bounds):
- if self.editor:
- return self.editor.getrect()
- else:
- return self.bounds
+ (left, top), (right, bottom) = bounds
+ left = left + self.dh
+ top = top + self.dv
+ right = right - self.dh
+ bottom = bottom - self.dv
+ self.editor.move((left, top), (right, bottom))
+ if self.dh and self.dv:
+ (left, top), (right, bottom) = bounds
+ left = left + 1
+ top = top + 1
+ right = right - 1
+ bottom = bottom - 1
+ bounds = (left, top), (right, bottom)
+ self.editor.setview(bounds)
+ #
+ def getbounds(self):
+ return self.bounds
+ #
def realize(self):
self.window = self.parent.getwindow()
- self.editor = self.window.textcreate(self.bounds)
+ (left, top), (right, bottom) = self.bounds
+ left = left + self.dh
+ top = top + self.dv
+ right = right - self.dh
+ bottom = bottom - self.dv
+ self.editor = \
+ self.window.textcreate((left, top), (right, bottom))
+ self.editor.setactive(0)
+ bounds = self.bounds
+ if self.dh and self.dv:
+ (left, top), (right, bottom) = bounds
+ left = left + 1
+ top = top + 1
+ right = right - 1
+ bottom = bottom - 1
+ bounds = (left, top), (right, bottom)
+ self.editor.setview(bounds)
self.editor.settext(self.text)
self.parent.need_mouse(self)
self.parent.need_keybd(self)
self.parent.need_altdraw(self)
+ #
def draw(self, (d, area)):
- pass
+ if self.dh and self.dv:
+ d.box(self.bounds)
+ #
def altdraw(self, area):
self.editor.draw(area)
#
@@ -51,11 +104,20 @@ class TextEdit():
#
def mouse_down(self, detail):
x = self.editor.event(WE_MOUSE_DOWN, self.window, detail)
+ #
def mouse_move(self, detail):
x = self.editor.event(WE_MOUSE_MOVE, self.window, detail)
+ #
def mouse_up(self, detail):
x = self.editor.event(WE_MOUSE_UP, self.window, detail)
#
def keybd(self, (type, detail)):
x = self.editor.event(type, self.window, detail)
#
+ def activate(self):
+ self.editor.setfocus(0, 30000)
+ self.editor.setactive(1)
+ #
+ def deactivate(self):
+ self.editor.setactive(0)
+ #