Advertisement
Uno-Dan

Untitled

Nov 5th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.19 KB | None | 0 0
  1. class Cell(object):
  2.     def __init__(self, parent, key, data, **kwargs):
  3.         self.key = key
  4.         self.parent = parent
  5.         self.members = {}
  6.         self.grid_args = {}
  7.         self.config_args = {}
  8.  
  9.         self.row = None
  10.         self.rowspan = None
  11.         self.column = None
  12.         self.columnspan = None
  13.  
  14.         self.padx = None
  15.         self.pady = None
  16.         self.ipadx = None
  17.         self.ipady = None
  18.         self.index = None
  19.  
  20.         self.type = data.get('type', None)
  21.         self.label = data.get('label', None)
  22.         self.style = data.get('style', None)
  23.         self.width = data.get('width', None)
  24.         self.height = data.get('height', None)
  25.         self.sticky = data.get('sticky', None)
  26.         self.rowconfigure = data.get('rowconfigure', 0)
  27.         self.columnconfigure = data.get('columnconfigure', 0)
  28.  
  29.         if self.type == 'LabelFrame':
  30.             self.frame = LabelFrame(parent, text=self.label)
  31.         else:
  32.             self.frame = Frame(parent)
  33.  
  34.         self.frame.rowconfigure(self.rowconfigure, weight=1)
  35.         self.frame.columnconfigure(self.columnconfigure, weight=1)
  36.         self.frame.grid(sticky=self.sticky)
  37.  
  38.     def get(self, uri=None):
  39.         if not uri:
  40.             return self.frame
  41.  
  42.         uri = uri.replace('\\', '/').rstrip('/')
  43.         if '/' in uri:
  44.             def parse(parent, uri_part):
  45.                 parts = uri_part.split('/', 1)
  46.  
  47.                 child = parent.get(parts[0])
  48.                 if len(parts) > 1:
  49.                     child = parse(child, parts[1])
  50.  
  51.                 return child
  52.  
  53.             return parse(self, uri)
  54.  
  55.         if isinstance(self.members.get(uri, None), Field):
  56.             return self.members.get(uri).field
  57.  
  58.         return self.members.get(uri, None)
  59.  
  60.     def add(self, data):
  61.         key = next(iter(data.keys()))
  62.         item = next(iter(data.values()))
  63.         item_type = item.get('type')
  64.  
  65.         if key not in self.members:
  66.             if item_type == 'PanedWindow':
  67.                 self.members[key] = Pane(self.frame, key, item)
  68.             elif item_type in ('Frame', 'LabelFrame'):
  69.                 self.members[key] = Group(self.frame, key, item)
  70.             else:
  71.                 self.members[key] = Field(self.frame, key, item)
  72.  
  73.         return self.members[key]
  74.  
  75.     def item(self, uri=None):
  76.         return self.get(uri)
  77.  
  78.     def remove(self, uri):
  79.         if not uri:
  80.             return self.frame
  81.  
  82.         uri = uri.replace('\\', '/').rstrip('/')
  83.         if '/' in uri:
  84.             def parse(parent, uri_part):
  85.                 parts = uri_part.split('/', 1)
  86.  
  87.                 child = parent.get(parts[0])
  88.                 if len(parts) > 1:
  89.                     child = parse(child, parts[1])
  90.  
  91.                 return child
  92.  
  93.             return parse(self, uri)
  94.         self.members[uri].grid_remove()
  95.  
  96.         del self.members[uri]
  97.  
  98.     def values(self, data=None):
  99.         cache = URICache(data=data)
  100.  
  101.         def process(uri, members):
  102.  
  103.             for key, widget in members.items():
  104.                 if isinstance(widget, Field):
  105.                     target = uri + '/' + key + '/value'
  106.                     value = None if not data else cache.get(target, '')
  107.  
  108.                     if widget.type in ('Treeview', 'Progressbar', 'Button', 'Separator', 'Label'):
  109.                         continue
  110.  
  111.                     if widget.type == 'Notebook':
  112.                         for tab, page in widget.field.page.items():
  113.                             if hasattr(page, 'form'):
  114.                                 process(uri + '/' + key + '/items/' + tab + '/content', page.form.members)
  115.  
  116.                     elif widget.type == 'Text':
  117.                         if data:
  118.                             if value is None:
  119.                                 value = ''
  120.                             widget.field.text.delete('1.0', 'end')
  121.                             widget.field.text.insert('end', value)
  122.                         else:
  123.                             cache.set(widget.field.text.get('1.0', 'end'), target)
  124.  
  125.                     elif widget.type == 'Combobox':
  126.                         if data:
  127.                             item = ''
  128.                             if widget.items:
  129.                                 if isinstance(value, str):
  130.                                     value = 0
  131.                                 item = widget.items[value]
  132.  
  133.                             widget.field.set(item)
  134.                             if value:
  135.                                 widget.field.combobox.current(value)
  136.                         else:
  137.                             cache.set(widget.items.index(widget.field.var.get()), target)
  138.  
  139.                     else:
  140.                         if data:
  141.                             widget.field.set(value)
  142.                         else:
  143.                             cache.set(widget.field.var.get(), target)
  144.                 elif widget.type != 'PanedWindow':
  145.                     process(uri + '/' + key, widget.members)
  146.                 else:
  147.                     for k, v in widget.members.items():
  148.                         process(uri + '/' + key + '/' + k, v.members)
  149.  
  150.         process(self.key, self.members)
  151.  
  152.         return cache.get()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement