diff options
Diffstat (limited to 'Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py')
| -rw-r--r-- | Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py b/Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py new file mode 100644 index 0000000..b954255 --- /dev/null +++ b/Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py @@ -0,0 +1,183 @@ +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() |
