home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / gui / userform.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  4.0 KB  |  114 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import wx
  5. from util import import_function, callany
  6. from gui.toolbox import GetTextFromUser
  7.  
  8. def getinput(obj, parent, needs, callback, **k):
  9.     diag = None
  10.     if hasattr(needs, 'Prompt'):
  11.         diag = needs(parent, obj)
  12.     elif isinstance(needs, basestring) and needs.startswith('@'):
  13.         diag = import_function(needs[1:])(parent, obj)
  14.     
  15.     if diag is not None:
  16.         diag.Prompt(callback)
  17.         diag.Destroy()
  18.     elif callable(needs):
  19.         needs = needs(obj)
  20.     
  21.     pprint = pprint
  22.     import pprint
  23.     pprint(needs)
  24.     if len(needs) == 1 and issubclass(needs[0][0], basestring):
  25.         (type, name, default) = needs[0]
  26.         val = GetTextFromUser(name, caption = name, default_value = default)
  27.         if val is not None:
  28.             return callback(val)
  29.         return None
  30.     FormFrame(obj, parent, needs, callback, **k)
  31.  
  32.  
  33. def maketext(self, name = '', default = '', obj = None):
  34.     if default is None:
  35.         default = ''
  36.     
  37.     if callable(default):
  38.         default = callany(default, obj)
  39.     
  40.     ctrl = wx.TextCtrl(self.content, -1, name = name, value = default)
  41.     return (name, ctrl)
  42.  
  43. typetable = {
  44.     str: maketext,
  45.     int: maketext,
  46.     unicode: maketext }
  47.  
  48. class FormFrame(wx.Frame):
  49.     
  50.     def __init__(self, obj, parent, needs, callback, title = None):
  51.         if not title:
  52.             pass
  53.         wx.Frame.__init__(self, parent, title = 'Please enter a value')
  54.         self.content = content = wx.Panel(self)
  55.         content.Sizer = s = wx.FlexGridSizer(0, 2, 15, 15)
  56.         self.callback = callback
  57.         self.needs = needs
  58.         self.gui_items = [ self.gentype(need, obj) for need in self.needs ]
  59.         for i, item in enumerate(self.gui_items):
  60.             s.Add(wx.StaticText(content, -1, label = _(item[0])), 0, wx.EXPAND | wx.ALL, 3)
  61.             s.Add(item[1], 0, wx.EXPAND | wx.ALL, 3)
  62.         
  63.         b = wx.Button(content, -1, label = 'Submit')
  64.         b.Bind(wx.EVT_BUTTON, self.getvalues)
  65.         b.SetDefault()
  66.         s.Add(b, 1, wx.EXPAND | wx.ALL, 7)
  67.         self.Sizer = wx.BoxSizer(wx.VERTICAL)
  68.         self.Sizer.Add(content, 1, wx.EXPAND)
  69.         self.Fit()
  70.         self.CenterOnParent()
  71.         self.Show(True)
  72.  
  73.     
  74.     def gentype(self, need, obj):
  75.         
  76.         try:
  77.             return typetable[need[0]](self, *need[1:], **{
  78.                 'obj': obj })
  79.         except KeyError:
  80.             e = None
  81.             raise TypeError("I don't know how to get %r from the user" % need[0])
  82.  
  83.  
  84.     
  85.     def getvalues(self, e):
  86.         vals = []
  87.         for i in range(len(self.gui_items)):
  88.             t = None if isinstance(self.needs[i], tuple) else self.needs[i]
  89.             vals.append(t(self.gui_items[i][1].GetValue()))
  90.         
  91.         self.Show(False)
  92.         self.callback(*vals)
  93.         self.Close()
  94.         self.Destroy()
  95.  
  96.  
  97.  
  98. def printstuff(*stuff):
  99.     for item in stuff:
  100.         print 'type', type(item), 'item', item
  101.     
  102.  
  103. if __name__ == '__main__':
  104.     app = wx.PySimpleApp()
  105.     stuff = ((str, 'name1', 'bleh'), (int, 'name2', '45'), (str, 'name3', 'bleh3'))
  106.     
  107.     def callback():
  108.         print 'yay'
  109.  
  110.     frame = FormFrame(None, None, callback = printstuff, needs = stuff)
  111.     app.SetTopWindow(frame)
  112.     app.MainLoop()
  113.  
  114.