diff --git a/source/diff.py b/source/diff.py index af67f89..fc8871d 100644 --- a/source/diff.py +++ b/source/diff.py @@ -757,33 +757,6 @@ class EventsTab(EventsListenerBase, XTabListener): return -class EventsGrid(EventsListenerBase, XGridDataListener, XGridSelectionListener): - - def __init__(self, controller, name): - super().__init__(controller, name) - - def dataChanged(self, event): - event_name = '{}_data_changed'.format(self.name) - if hasattr(self._controller, event_name): - getattr(self._controller, event_name)(event) - return - - def rowHeadingChanged(self, event): - pass - - def rowsInserted(self, event): - pass - - def rowsRemoved(self, evemt): - pass - - def selectionChanged(self, event): - event_name = '{}_selection_changed'.format(self.name) - if hasattr(self._controller, event_name): - getattr(self._controller, event_name)(event) - return - - class EventsKeyWindow(EventsListenerBase, XKeyListener): """ event.KeyChar @@ -902,124 +875,6 @@ class EventsMenu(EventsListenerBase, XMenuListener): return -class UnoGrid(UnoBaseObject): - - def __init__(self, obj): - super().__init__(obj) - self._gdm = self._model.GridDataModel - # ~ self._data = [] - self._columns = {} - # ~ self._format_columns = () - - def __getitem__(self, index): - value = self._gdm.getCellData(index[0], index[1]) - return value - - @property - def type(self): - return 'grid' - - def _format_cols(self): - rows = tuple(tuple( - self._format_columns[i].format(r) for i, r in enumerate(row)) for row in self._data - ) - return rows - - # ~ @property - # ~ def format_columns(self): - # ~ return self._format_columns - # ~ @format_columns.setter - # ~ def format_columns(self, value): - # ~ self._format_columns = value - - @property - def value(self): - return self[self.column, self.row] - - @property - def data(self): - return self._data - @data.setter - def data(self, values): - # ~ self._data = values - self.clear() - headings = tuple(range(1, len(values) + 1)) - self._gdm.addRows(headings, values) - # ~ rows = range(grid_dm.RowCount) - # ~ colors = [COLORS['GRAY'] if r % 2 else COLORS['WHITE'] for r in rows] - # ~ grid.Model.RowBackgroundColors = tuple(colors) - return - - @property - def row(self): - return self.obj.CurrentRow - - @property - def rows(self): - return self._gdm.RowCount - - @property - def column(self): - return self.obj.CurrentColumn - - @property - def columns(self): - return self._gdm.ColumnCount - - def set_cell_tooltip(self, col, row, value): - self._gdm.updateCellToolTip(col, row, value) - return - - def get_cell_tooltip(self, col, row): - value = self._gdm.getCellToolTip(col, row) - return value - - def _validate_column(self, data): - row = [] - for i, d in enumerate(data): - if i in self._columns: - if 'image' in self._columns[i]: - row.append(self._columns[i]['image']) - else: - row.append(d) - return tuple(row) - - def clear(self): - self._gdm.removeAllRows() - return - - def add_row(self, data): - # ~ self._data.append(data) - data = self._validate_column(data) - self._gdm.addRow(self.rows + 1, data) - return - - def remove_row(self, row): - self._gdm.removeRow(row) - # ~ del self._data[row] - self.update_row_heading() - return - - def update_row_heading(self): - for i in range(self.rows): - self._gdm.updateRowHeading(i, i + 1) - return - - def sort(self, column, asc=True): - self._gdm.sortByColumn(column, asc) - self.update_row_heading() - return - - def set_column_image(self, column, path): - gp = create_instance('com.sun.star.graphic.GraphicProvider') - data = dict_to_property({'URL': _path_url(path)}) - image = gp.queryGraphic(data) - if not column in self._columns: - self._columns[column] = {} - self._columns[column]['image'] = image - return - - class UnoTab(UnoBaseObject): def __init__(self, obj): diff --git a/source/easymacro2.py b/source/easymacro2.py index b73cc2e..c86c120 100644 --- a/source/easymacro2.py +++ b/source/easymacro2.py @@ -87,6 +87,8 @@ from com.sun.star.awt import XMouseMotionListener from com.sun.star.awt import XFocusListener from com.sun.star.awt import XKeyListener from com.sun.star.awt import XItemListener +from com.sun.star.awt.grid import XGridDataListener +from com.sun.star.awt.grid import XGridSelectionListener # ~ https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1awt_1_1FontUnderline.html from com.sun.star.awt import FontUnderline @@ -3159,6 +3161,33 @@ class EventsItemRoadmap(EventsItem): return +class EventsGrid(EventsListenerBase, XGridDataListener, XGridSelectionListener): + + def __init__(self, controller, name): + super().__init__(controller, name) + + def dataChanged(self, event): + event_name = '{}_data_changed'.format(self.name) + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)(event) + return + + def rowHeadingChanged(self, event): + pass + + def rowsInserted(self, event): + pass + + def rowsRemoved(self, evemt): + pass + + def selectionChanged(self, event): + event_name = '{}_selection_changed'.format(self.name) + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)(event) + return + + # ~ BorderColor = ? # ~ FontStyleName = ? # ~ HelpURL = ? @@ -3714,7 +3743,6 @@ class UnoTree(UnoBaseObject): tdm.setRoot(root) self.model.DataModel = tdm self._tdm = self.model.DataModel - # ~ self._add_data() return @property @@ -3747,6 +3775,129 @@ class UnoTree(UnoBaseObject): return +class UnoGrid(UnoBaseObject): + + def __init__(self, obj): + super().__init__(obj) + self._gdm = self.model.GridDataModel + # ~ self._columns = {} + # ~ self._format_columns = () + + def __setattr__(self, name, value): + if name in ('_gdm',): + self.__dict__[name] = value + else: + super().__setattr__(name, value) + + def __getitem__(self, index): + value = self._gdm.getCellData(index[0], index[1]) + return value + + @property + def type(self): + return 'grid' + + def _format_cols(self): + rows = tuple(tuple( + self._format_columns[i].format(r) for i, r in enumerate(row)) for row in self._data + ) + return rows + + # ~ @property + # ~ def format_columns(self): + # ~ return self._format_columns + # ~ @format_columns.setter + # ~ def format_columns(self, value): + # ~ self._format_columns = value + + @property + def value(self): + return self[self.column, self.row] + + @property + def data(self): + return self._data + @data.setter + def data(self, values): + # ~ self._data = values + self.clear() + headings = tuple(range(1, len(values) + 1)) + self._gdm.addRows(headings, values) + # ~ rows = range(grid_dm.RowCount) + # ~ colors = [COLORS['GRAY'] if r % 2 else COLORS['WHITE'] for r in rows] + # ~ grid.Model.RowBackgroundColors = tuple(colors) + return + + @property + def row(self): + return self.obj.CurrentRow + + @property + def rows(self): + return self._gdm.RowCount + + @property + def column(self): + return self.obj.CurrentColumn + + @property + def columns(self): + return self._gdm.ColumnCount + + def set_cell_tooltip(self, col, row, value): + self._gdm.updateCellToolTip(col, row, value) + return + + def get_cell_tooltip(self, col, row): + value = self._gdm.getCellToolTip(col, row) + return value + + def _validate_column(self, data): + row = [] + for i, d in enumerate(data): + if i in self._columns: + if 'image' in self._columns[i]: + row.append(self._columns[i]['image']) + else: + row.append(d) + return tuple(row) + + def clear(self): + self._gdm.removeAllRows() + return + + def add_row(self, data): + # ~ self._data.append(data) + data = self._validate_column(data) + self._gdm.addRow(self.rows + 1, data) + return + + def remove_row(self, row): + self._gdm.removeRow(row) + # ~ del self._data[row] + self.update_row_heading() + return + + def update_row_heading(self): + for i in range(self.rows): + self._gdm.updateRowHeading(i, i + 1) + return + + def sort(self, column, asc=True): + self._gdm.sortByColumn(column, asc) + self.update_row_heading() + return + + def set_column_image(self, column, path): + gp = create_instance('com.sun.star.graphic.GraphicProvider') + data = dict_to_property({'URL': _path_url(path)}) + image = gp.queryGraphic(data) + if not column in self._columns: + self._columns[column] = {} + self._columns[column]['image'] = image + return + + UNO_CLASSES = { 'label': UnoLabel, 'link': UnoLabelLink, @@ -3758,10 +3909,10 @@ UNO_CLASSES = { 'listbox': UnoListBox, 'roadmap': UnoRoadmap, 'tree': UnoTree, + 'grid': UnoGrid, } -# ~ 'ComboBox': 'com.sun.star.awt.UnoControlComboBoxModel', # ~ 'CurrencyField': 'com.sun.star.awt.UnoControlCurrencyFieldModel', # ~ 'DateField': 'com.sun.star.awt.UnoControlDateFieldModel', # ~ 'FileControl': 'com.sun.star.awt.UnoControlFileControlModel', @@ -3775,6 +3926,7 @@ UNO_CLASSES = { # ~ 'Throbber': 'com.sun.star.awt.UnoControlThrobberModel', # ~ 'TimeField': 'com.sun.star.awt.UnoControlTimeFieldModel', + class LODialog(object): SEPARATION = 5 MODELS = { @@ -3788,9 +3940,10 @@ class LODialog(object): 'listbox': 'com.sun.star.awt.UnoControlListBoxModel', 'roadmap': 'com.sun.star.awt.UnoControlRoadmapModel', 'tree': 'com.sun.star.awt.tree.TreeControlModel', - # ~ 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', + 'grid': 'com.sun.star.awt.grid.UnoControlGridModel', # ~ 'groupbox': 'com.sun.star.awt.UnoControlGroupBoxModel', # ~ 'pages': 'com.sun.star.awt.UnoMultiPageModel', + # ~ 'combobox': 'com.sun.star.awt.UnoControlComboBoxModel', } def __init__(self, args):