summaryrefslogtreecommitdiffstats
path: root/Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py')
-rw-r--r--Mac/Contrib/PyIDE-src/IDELib/Widgets/Wdialogs.py183
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()