diff options
-rw-r--r-- | Lib/lib-stdwin/TextEdit.py | 84 | ||||
-rwxr-xr-x | Lib/stdwin/TextEdit.py | 84 |
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) + # |