Advertisement
Uno-Dan

Copy & Paste

Mar 12th, 2020
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.34 KB | None | 0 0
  1. ########################################################################################################################
  2.  
  3. #  Author: Dan Huckson, https://github.com/unodan
  4. #    Date: 2020-03-12
  5. ########################################################################################################################
  6.  
  7.  
  8.     def copy(self):
  9.         def get_items(_node):
  10.             def get_nodes(_nodex):
  11.                 _items = []
  12.                 for _nodex in self.get_children(_nodex):
  13.                     _items.append(_nodex)
  14.                     if self.get_children(_nodex):
  15.                         _items += get_items(_nodex)
  16.                 return _items
  17.  
  18.             if self.item(node)['open']:
  19.                 results = [] if next((x for x in selections if x.startswith(_node)), False) else get_nodes(_node)
  20.             else:
  21.                 results = get_nodes(_node)
  22.             return results
  23.  
  24.         self.tags_remove_all('copy', 'selected')
  25.         self.refresh_tags()
  26.  
  27.         items = []
  28.         selections = sorted(list(self.selection()))
  29.         while selections:
  30.             node = selections.pop(0)
  31.             items.append(node)
  32.  
  33.             if self.item(node)['values'][0] == 'Menu':
  34.                 items += get_items(node)
  35.  
  36.         for item in items:
  37.             self.tags_add(item, ['copy', 'selected'])
  38.             self.tags_remove(item, ['odd', 'even'])
  39.  
  40.         self.popup.enable_items(['paste'])
  41.         self.pointer_x, self.pointer_y = self.winfo_toplevel().winfo_pointerxy()
  42.  
  43.     def paste(self):
  44.         def set_items(parent, _node):
  45.             for child in self.get_children(_node):
  46.                 if child in nodes:
  47.                     nodes.pop(nodes.index(child))
  48.                     data = self.get_data(child)
  49.                     _iid = self.append(parent, data['type'], data['text'], data['values'])
  50.                     set_items(_iid, child)
  51.  
  52.         for selection in self.selection():
  53.             nodes = sorted(self.tag_has('copy'))
  54.  
  55.             while nodes:
  56.                 node = nodes.pop(0)
  57.                 item = self.item(node)
  58.  
  59.                 iid = self.append(selection, item['values'][0], item['text'], item['values'])
  60.                 if item['values'][0] == 'Menu':
  61.                     set_items(iid, node)
  62.  
  63.         self.tags_remove_all('selected')
  64.         self.refresh_tags()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement