| import W |
| from types import * |
| import string |
| |
| """ |
| import Wdialogs |
| testDict1 = {1:1, 2:2, 3:3} |
| testDict2 = {3:3,4:4, 'testDict1':testDict1, 6:6, 7:7} |
| testDict3 = {3:3,4:4, 'testDict2':testDict2, 'testDict1':testDict1, 6:6, 7:7} |
| Wdialogs.EditDictionary(testDict3) |
| |
| import Wdialogs |
| a = Wdialogs.Ask('xxx', 'default text', ['font', 'typografie', 'lettertonwerpen', 'huisstijl']) |
| """ |
| |
| def Message(text, button = "OK"): |
| w = W.ModalDialog((300, 100)) |
| w.button = W.Button((-90, -30, 80, 16), button, w.close) |
| w.message = W.TextBox((10, 10, -10, -40), text) |
| w.setdefaultbutton(w.button) |
| w.open() |
| |
| |
| def Ask(question, defaulttext = "", selections = []): |
| d = _Ask(question, defaulttext, selections) |
| return d.rv |
| |
| |
| class _Ask: |
| # selections is a list of possible for selections |
| |
| def __init__(self, question, defaulttext, selections): |
| self.selections = [] |
| for s in selections: |
| self.selections.append(string.lower(s)) |
| self.selections.sort() |
| self.w = W.ModalDialog((300, 120)) |
| self.w.button1 = W.Button((-90, -30, 80, 16), "OK", self.button1hit) |
| self.w.button2 = W.Button((-180, -30, 80, 16), "Cancel", self.button2hit) |
| self.w.question = W.TextBox((10, 10, -10, 30), question) |
| self.w.input = W.EditText((10, 40, -10, 20), defaulttext, self.processInput) |
| self.rv = None |
| self.w.setdefaultbutton(self.w.button1) |
| |
| self.w.bind("cmd.", self.w.button2.push) |
| self.w.open() |
| |
| def processInput(self, key, modifiers): # Process user input to match a selection |
| pos = self.w.input.getselection() |
| input = string.lower(self.w.input.get()[0:pos[1]]) |
| if len(input): |
| for t in self.selections: |
| if input == t[0:pos[0]]: |
| self.w.input.set(t) |
| self.w.input.setselection(pos[0], pos[1]) |
| return |
| self.w.input.set(input) |
| self.w.input.setselection(pos[1], pos[1]) |
| |
| def button1hit(self): |
| self.rv = self.w.input.get() |
| self.w.close() |
| |
| def button2hit(self): |
| self.w.close() |
| |
| class _AskYesNo: |
| |
| def __init__(self, question, cancelFlag= 0): |
| if cancelFlag: |
| size = 190, 80 |
| else: size = 150, 80 |
| self.w = W.ModalDialog(size) |
| self.w.yes = W.Button((10, -36, 50, 24), 'Yes', self.yes) |
| if cancelFlag: |
| self.w.cancel = W.Button((70, -36, -70, 24), "Cancel", self.cancel) |
| self.w.no = W.Button((-60, -36, -10, 24), 'No', self.no) |
| self.w.question = W.TextBox((10, 10, -10, 30), question) |
| self.rv = None |
| self.w.setdefaultbutton(self.w.yes) |
| if cancelFlag: |
| self.w.bind("cmd.", self.w.cancel) |
| else: self.w.bind("cmd.", self.w.no) |
| self.w.open() |
| |
| def yes(self): |
| self.rv = 1 |
| self.w.close() |
| |
| def no(self): |
| self.rv = 0 |
| self.w.close() |
| |
| def cancel(self): |
| self.rv = -1 |
| self.w.close() |
| |
| def AskYesNo(question): |
| d = _AskYesNo(question, 0) |
| return d.rv |
| |
| def AskYesCancelNo(question): |
| d = _AskYesNo(question, 1) |
| return d.rv |
| |
| class CallBackButton(W.Button): |
| def click(self, point, modifiers): |
| if not self._enabled: |
| return |
| part = self._control.TrackControl(point) |
| if part: |
| if self._callback: |
| self._callback(self.dict) |
| |
| def push(self): |
| if not self._enabled: |
| return |
| import time |
| self._control.HiliteControl(1) |
| time.sleep(0.1) |
| self._control.HiliteControl(0) |
| if self._callback: |
| self._callback(self.dict) |
| |
| class EditDictionary: # Auto layout editor of dictionary |
| def __init__(self, dictionary, title = 'Dictionary Editor'): |
| self.leading = 20 |
| self.d = dictionary |
| keys = self.d.keys() |
| windowSize = 400, len(keys) * self.leading + 100 |
| self.w = w = W.ModalDialog(windowSize) |
| y = 2 * self.leading |
| theFont = fontsettings = ('Geneva', 0, 10, (0,0,0)) |
| keys.sort() |
| for key in keys: |
| if type(key) == StringType: |
| label = key |
| else: label = `key` |
| if type(self.d[key]) == StringType: |
| value = self.d[key] |
| else: |
| value = `self.d[key]` # Just show the value |
| |
| if type(self.d[key]) == DictType: # Make a button |
| button = w[label] = CallBackButton((110, y, 50, 18), label, self.pushDict) |
| button.dict = self.d[key] |
| else: |
| w['k_' + label] = W.TextBox((10, y, 200, 18), label, fontsettings = theFont) |
| w[label] = W.EditText((110, y, -10, 18), value, fontsettings = theFont) |
| y = y + self.leading |
| |
| w._name = W.TextBox((10, 4, 100, 10), title) |
| w._ok = W.Button((-160, -36, 60, 24), "OK", self.ok) |
| w._cancel = W.Button((-80, -36, 60, 24), "Cancel", self.cancel) |
| w.setdefaultbutton(self.w._ok) |
| |
| self.rv = None # Return value |
| w.open() |
| |
| def pushDict(self, dict): |
| EditDictionary(dict) |
| |
| def popDict(self): |
| self.w.close() |
| |
| def ok(self): |
| self.rv = 1 |
| for key in self.d.keys(): |
| if type(key) == StringType: |
| label = key |
| else: label = `key` |
| if type(self.d[key]) == StringType or self.d[key] == None: |
| self.d[key] = self.w[label].get() |
| else: |
| try: |
| self.d[key] = eval(self.w[label].get()) |
| except: |
| pass |
| self.popDict() |
| |
| def cancel(self): |
| self.rv = 0 |
| self.popDict() |