summaryrefslogtreecommitdiffstats
path: root/Demo/cwilib/form.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/cwilib/form.py')
-rwxr-xr-xDemo/cwilib/form.py170
1 files changed, 0 insertions, 170 deletions
diff --git a/Demo/cwilib/form.py b/Demo/cwilib/form.py
deleted file mode 100755
index 8dd6ef9..0000000
--- a/Demo/cwilib/form.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# Fill-out form window
-
-import stdwin
-from stdwinevents import *
-
-
-class Form:
-
- def __init__(self, title):
- self.title = title
- self.window = None
- self.fields = {}
- self.fieldnames = []
- self.formwidth = self.formheight = 0
- self.focusname = None
- self.tefocus = None
-
- def define_field(self, name, label, lines, chars):
- self.fieldnames.append(name)
- lh = stdwin.lineheight()
- cw = stdwin.textwidth('m')
- left = 20*cw
- top = self.formheight + 4
- right = left + chars*cw
- bottom = top + lines*lh
- te = None
- self.fields[name] = (label, left, top, right, bottom, te)
- self.formheight = bottom + 2
- self.formwidth = max(self.formwidth, right + 4)
-
- def open(self):
- if self.window: return
- self.formwidth = max(100, self.formwidth)
- self.formheight = max(50, self.formheight)
- stdwin.setdefwinsize(self.formwidth, self.formheight)
- stdwin.setdefscrollbars(0, 0)
- self.window = stdwin.open(self.title)
- self.window.setdocsize(self.formwidth, self.formheight)
- for name in self.fieldnames:
- label, left, top, right, bottom, te = \
- self.fields[name]
- rect = (left, top), (right, bottom)
- te = self.window.textcreate(rect)
- te.setactive(0)
- te.setview(rect)
- self.fields[name] = \
- label, left, top, right, bottom, te
- if self.fieldnames:
- self.setfocus(self.fieldnames[0])
-
- def setfocus(self, name):
- if name <> self.focusname and self.tefocus:
- self.tefocus.setactive(0)
- self.focusname = name
- if self.focusname:
- self.tefocus = self.fields[self.focusname][-1]
- self.tefocus.setactive(1)
- else:
- self.tefocus = None
-
- def dispatch(self, type, detail):
- event = type, self.window, detail
- if type == WE_NULL:
- pass
- elif type == WE_DRAW:
- self.draw(detail)
- elif type == WE_MOUSE_DOWN:
- x, y = detail[0]
- for name in self.fieldnames:
- label, left, top, right, bottom, te = \
- self.fields[name]
- if left <= x < right and \
- top <= y < bottom:
- self.setfocus(name)
- break
- else:
- stdwin.fleep()
- return
- if self.tefocus:
- (left, top), (right, bottom) = \
- self.tefocus.getrect()
- if x < left: x = left
- if x >= right: x = right-1
- if y < top: y = top
- if y >= bottom:
- y = bottom-1
- x = right-1
- event = type, self.window, ((x,y),)+detail[1:]
- if not self.tefocus.event(event):
- stdwin.fleep()
- elif type in (WE_MOUSE_MOVE, WE_MOUSE_UP, WE_CHAR):
- if not self.tefocus or not self.tefocus.event(event):
- stdwin.fleep()
- elif type == WE_MOUSE_UP:
- button = detail[2]
- if button == 2:
- self.paste_selection()
- else:
- self.make_selection()
- elif type == WE_COMMAND:
- if detail in (WC_BACKSPACE, WC_UP, WC_DOWN,
- WC_LEFT, WC_RIGHT):
- if not self.tefocus or \
- not self.tefocus.event(event):
- stdwin.fleep()
- elif detail == WC_RETURN:
- print '*** Submit query'
- elif detail == WC_TAB:
- if not self.fields:
- stdwin.fleep()
- return
- if not self.focusname:
- i = 0
- else:
- i = self.fieldnames.index(
- self.focusname)
- i = (i+1) % len(self.fieldnames)
- self.setfocus(self.fieldnames[i])
- self.tefocus.setfocus(0, 0x7fff)
- self.make_selection()
- elif type in (WE_ACTIVATE, WE_DEACTIVATE):
- pass
- elif type == WE_LOST_SEL:
- if self.tefocus:
- a, b = self.tefocus.getfocus()
- self.tefocus.setfocus(a, a)
- else:
- print 'Form.dispatch(%d, %s)' % (type, `detail`)
-
- def draw(self, detail):
- d = self.window.begindrawing()
- d.cliprect(detail)
- d.erase(detail)
- self.drawform(d, detail)
- d.noclip()
- d.close()
- # Stupid textedit objects can't draw with open draw object...
- self.drawtextedit(detail)
-
- def drawform(self, d, detail):
- for name in self.fieldnames:
- label, left, top, right, bottom, te = self.fields[name]
- d.text((0, top), label)
- d.box((left-3, top-2), (right+4, bottom+2))
-
- def drawtextedit(self, detail):
- for name in self.fieldnames:
- label, left, top, right, bottom, te = self.fields[name]
- te.draw(detail)
-
- def make_selection(self):
- s = self.tefocus.getfocustext()
- if not s:
- return
- stdwin.rotatecutbuffers(1)
- stdwin.setcutbuffer(0, s)
- if not self.window.setselection(WS_PRIMARY, s):
- stdwin.fleep()
-
- def paste_selection(self):
- if not self.tefocus:
- stdwin.fleep()
- return
- s = stdwin.getselection(WS_PRIMARY)
- if not s:
- s = stdwin.getcutbuffer(0)
- if not s:
- stdwin.fleep()
- return
- self.tefocus.replace(s)