Advertisement
Uno-Dan

Copy & Paste

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