1 # Copyright (C) 2002, Peter Roozemaal.
3 # GnuCoMo/CoConf is free software; you may redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2, or (at your option)
6 # any later version. See the file COPYING.
8 "The widget definitions that build a form"
15 from textbase import txt
17 _id = "$Id: cotkwidget.py,v 1.1 2002-11-19 19:21:18 arjen Exp $"
21 class HelpWin(Tkinter.Toplevel):
22 def __init__(self, item, text):
24 Tkinter.Toplevel.__init__(self)
25 self.title(txt("helpon","help on")+" "+item)
26 _helpwins[item] = self
28 self.bind("<Destroy>", self.cleanup)
29 self.textwin = ScrolledText.ScrolledText(self, takefocus=0, wrap="word")
30 self.textwin.pack(side="top")
31 self.textwin.insert("1.0", text)
32 self.textwin["state"] = "disabled"
33 self.button = Tkinter.Button(self, text=txt("thanks", "Thank You"),
34 relief="groove", borderwidth=4,
36 self.button.pack(side="bottom")
37 def cleanup(self, event):
38 if _helpwins.has_key(self.name):
39 del _helpwins[self.name]
50 def readDom(self, dom):
51 self.widgetname = dom.getAttribute("name")
52 for i in self.translate:
53 att = dom.getAttribute(i)
54 setattr(self, "cur"+i, att)
55 setattr(self, "def"+i, att)
57 getattr(self, i)[dom.getAttribute("language")] = att
60 if el.nodeType == el.ELEMENT_NODE:
61 if el.tagName == "help":
63 elif el.tagName == "translate":
66 print self.widgetname, "bad element:", el.tagName
68 #print self.widgetname, "bad xml node:", el.nodeName
71 def readHelp(self, dom):
72 lang = dom.getAttribute("language")
76 if el.nodeType == el.TEXT_NODE:
79 text = string.join(string.split(text))
80 if self.curhelp == "":
82 if self.defhelp == "":
84 self.help[lang] = text
86 def readTrans(self, dom):
89 def provide_help(self):
90 if _helpwins.has_key(self.widgetname):
91 _helpwins[self.widgetname].lift()
93 HelpWin(self.widgetname, self.curhelp)
95 tkMessageBox.showinfo(title=txt("sorry", "Sorry"),
96 message=txt("nohelp", "The creator of the form didn't provide a help message."))
98 def value_dom(self, document, parent, flags):
100 node = document.createElement("variable")
101 node.setAttribute("name", self.widgetname)
102 #the next line isn't OO clean
103 node.setAttribute("value", str(self.variable.get()))
104 parent.appendChild(node)
106 class _ComposedWidget(_BaseWidget):
107 def readDom(self, dom):
108 self.widgetname = dom.getAttribute("name")
109 for i in self.translate:
110 att = dom.getAttribute(i)
111 setattr(self, "cur"+i, att)
112 setattr(self, "def"+i, att)
114 getattr(self, i)[dom.getAttribute("language")] = att
117 if el.nodeType == el.ELEMENT_NODE:
118 if el.tagName == "help":
120 elif el.tagName == "translate":
122 elif _subwidgets.has_key(el.tagName):
123 w = _subwidgets[el.tagName](self, el)
126 print self.widgetname, "bad element:", el.tagName
128 #print self.widgetname, "bad xml node:", el.nodeName
131 class FormWin(Tkinter.Frame, _ComposedWidget):
132 translate = ( "title", )
133 def __init__(self, master, dom):
134 Tkinter.Frame.__init__(self, master)
138 for sub in self.wlist:
141 def add_widget(self, wid):
142 self.wlist.append(wid)
143 wid.pack(side="top", fill="x")
144 def value_dom(self, document, parent, flags):
146 node = document.createElement("export")
148 node = document.createElement("save")
149 node.setAttribute("form", self.widgetname)
150 parent.appendChild(node)
151 for sub in self.wlist:
152 sub.value_dom(document, node, flags)
154 class Group(Tkinter.Frame, _ComposedWidget):
156 def __init__(self, master, dom):
157 Tkinter.Frame.__init__(self, master)
159 self.filler = Tkinter.Frame(self, width="7m")
160 self.filler.pack(side="left", fill="y")
161 self.inner = Tkinter.Frame(self)
162 self.inner.pack(side="right", fill="both", expand=1)
165 for sub in self.wlist:
168 def add_widget(self, wid):
169 self.wlist.append(wid)
170 wid.pack(side="top", fill="x", in_=self.inner)
171 def value_dom(self, document, parent, flags):
173 node = document.createElement("group")
174 node.setAttribute("name", self.widgetname)
175 parent.appendChild(node)
176 for sub in self.wlist:
177 sub.value_dom(document, node, flags)
179 class Boolean(Tkinter.Frame, _BaseWidget):
180 translate = ( "label", )
181 def __init__(self, master, dom):
182 Tkinter.Frame.__init__(self, master)
184 self.button = Tkinter.Checkbutton(self, text=self.curlabel)
185 self.button.pack(side="left")
186 self.variable = Tkinter.BooleanVar()
187 self.button["variable"] = self.variable
188 if os.name == "posix":
189 self.button["selectcolor"] = "green"
190 self.helpbutton = Tkinter.Button(self, text=txt("lhelp", "?"),
191 command=self.provide_help)
192 self.helpbutton.pack(side="right")
194 class String(Tkinter.Frame, _BaseWidget):
195 translate = ( "label", )
196 def __init__(self, master, dom):
197 Tkinter.Frame.__init__(self, master)
199 self.label = Tkinter.Label(self, text=self.curlabel)
200 self.label.pack(side="left")
201 self.variable = Tkinter.StringVar()
202 self.veld = Tkinter.Entry(self, textvariable=self.variable)
203 self.helpbutton = Tkinter.Button(self, text=txt("lhelp", "?"),
204 command=self.provide_help)
205 self.helpbutton.pack(side="right")
206 self.veld.pack(side="right", fill="x")
208 class Ruler(Tkinter.Frame):
209 def __init__(self, master, dom):
210 Tkinter.Frame.__init__(self, master, relief="sunken", height=4,
212 def value_dom(self, document, parent, flags):