From e8dc0c8e990d8ef928b5980e77630c89ab597a51 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Mon, 21 Oct 2019 00:28:00 -0500 Subject: [PATCH] Add support for tree control --- CHANGELOG | 4 ++ source/easymacro.py | 95 +++++++++++++++++++++++++++++++++------ source/images/record.png | Bin 0 -> 4220 bytes source/images/stop.png | Bin 0 -> 1359 bytes 4 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 source/images/record.png create mode 100644 source/images/stop.png diff --git a/CHANGELOG b/CHANGELOG index 0ad42bb..5e79dfa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +v 0.10.0 [21-oct-2019] + - Add suuport for tree control + + v 0.9.0 [19-oct-2019] - Add support for generate locales - Start support for forms diff --git a/source/easymacro.py b/source/easymacro.py index 8f9f5b9..4965e04 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -2416,7 +2416,7 @@ class UnoListBox(UnoBaseObject): @property def value(self): - return self.obj.SelectedItem + return self.obj.getSelectedItem() @property def count(self): @@ -2430,6 +2430,10 @@ class UnoListBox(UnoBaseObject): self.model.StringItemList = list(sorted(values)) return + def unselect(self): + self.obj.selectItem(self.value, False) + return + def select(self, pos=0): if isinstance(pos, str): self.obj.selectItem(pos, True) @@ -2438,7 +2442,7 @@ class UnoListBox(UnoBaseObject): return def clear(self): - self.obj.removeItems(0, self.count) + self.model.removeAllItems() return def _set_image_url(self, image): @@ -2609,6 +2613,61 @@ class UnoRoadmap(UnoBaseObject): return +class UnoTree(UnoBaseObject): + + @catch_exception + def __init__(self, obj, ): + super().__init__(obj) + self._tdm = None + self._data = [] + + @property + def selection(self): + return self.obj.Selection + + @property + def root(self): + if self._tdm is None: + return '' + return self._tdm.Root.DisplayValue + + @root.setter + def root(self, value): + self._add_data_model(value) + + def _add_data_model(self, name): + tdm = create_instance('com.sun.star.awt.tree.MutableTreeDataModel') + root = tdm.createNode(name, True) + root.DataValue = 0 + tdm.setRoot(root) + self.model.DataModel = tdm + self._tdm = self.model.DataModel + self._add_data() + return + + @property + def data(self): + return self._data + @data.setter + def data(self, values): + self._data = list(values) + self._add_data() + + def _add_data(self): + if not self.data: + return + + parents = {} + for node in self.data: + parent = parents.get(node[1], self._tdm.Root) + child = self._tdm.createNode(node[2], False) + child.DataValue = node[0] + parent.appendChild(child) + parents[node[0]] = child + self.obj.expandNode(self._tdm.Root) + return + + def get_custom_class(tipo, obj): classes = { 'label': UnoLabel, @@ -2618,11 +2677,11 @@ def get_custom_class(tipo, obj): 'grid': UnoGrid, 'link': UnoLabelLink, 'roadmap': UnoRoadmap, + 'tree': UnoTree, # ~ 'tab': UnoTab, # ~ 'image': UnoImage, # ~ 'radio': UnoRadio, # ~ 'groupbox': UnoGroupBox, - # ~ 'tree': UnoTree, 'formbutton': FormButton, } return classes[tipo](obj) @@ -3144,11 +3203,11 @@ class LODialog(object): def _get_type_control(self, name): types = { 'stardiv.Toolkit.UnoFixedTextControl': 'label', - 'stardiv.Toolkit.UnoButtonControl': 'button', - 'stardiv.Toolkit.UnoEditControl': 'text', - 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', 'stardiv.Toolkit.UnoFixedHyperlinkControl': 'link', + 'stardiv.Toolkit.UnoEditControl': 'text', + 'stardiv.Toolkit.UnoButtonControl': 'button', 'stardiv.Toolkit.UnoListBoxControl': 'listbox', + 'stardiv.Toolkit.UnoRoadmapControl': 'roadmap', } return types[name] @@ -3235,17 +3294,17 @@ class LODialog(object): def _get_control_model(self, control): services = { - 'button': 'com.sun.star.awt.UnoControlButtonModel', - 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', - 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', - 'image': 'com.sun.star.awt.UnoControlImageControlModel', 'label': 'com.sun.star.awt.UnoControlFixedTextModel', 'link': 'com.sun.star.awt.UnoControlFixedHyperlinkModel', - 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', - 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', - 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', 'text': 'com.sun.star.awt.UnoControlEditModel', + 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', + 'button': 'com.sun.star.awt.UnoControlButtonModel', + 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', + 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', 'tree': 'com.sun.star.awt.tree.TreeControlModel', + 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', + 'image': 'com.sun.star.awt.UnoControlImageControlModel', + 'radio': 'com.sun.star.awt.UnoControlRadioButtonModel', } return services[control] @@ -3285,6 +3344,8 @@ class LODialog(object): def add_control(self, properties): tipo = properties.pop('Type').lower() + root = properties.pop('Root', '') + properties = self._special_properties(tipo, properties) model = self.model.createInstance(self._get_control_model(tipo)) set_properties(model, properties) @@ -3293,6 +3354,10 @@ class LODialog(object): control = self.obj.getControl(name) add_listeners(self.events, control, name) control = get_custom_class(tipo, control) + + if tipo == 'tree' and root: + control.root = root + setattr(self, name, control) return @@ -3704,6 +3769,10 @@ def get_path_extension(id): return path +def get_home(): + return Path.home() + + # ~ Export ok def inputbox(message, default='', title=TITLE, echochar=''): diff --git a/source/images/record.png b/source/images/record.png new file mode 100644 index 0000000000000000000000000000000000000000..30eb0051026c7b136ef7feddc609ca4a126ce01f GIT binary patch literal 4220 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 RJr@7~002ovPDHLkV1kUHXD$E$ literal 0 HcmV?d00001