diff --git a/easymacro.py b/easymacro.py index 5682097..97bd577 100644 --- a/easymacro.py +++ b/easymacro.py @@ -4,7 +4,7 @@ # ~ This file is part of ZAZ. -# ~ https://git.elmau.net/elmau/zaz +# ~ https://git.cuates.net/elmau/zaz # ~ ZAZ is free software: you can redistribute it and/or modify # ~ it under the terms of the GNU General Public License as published by @@ -4676,12 +4676,11 @@ class UnoGrid(UnoBaseObject): def __init__(self, obj): super().__init__(obj) self._gdm = self.model.GridDataModel - self._columns = [] self._data = [] - # ~ self._format_columns = () + self._formats = () def __setattr__(self, name, value): - if name in ('_gdm', '_columns', '_data'): + if name in ('_gdm', '_data', '_formats'): self.__dict__[name] = value else: super().__setattr__(name, value) @@ -4700,10 +4699,10 @@ class UnoGrid(UnoBaseObject): @property def columns(self): - return self._columns + return {} @columns.setter def columns(self, values): - self._columns = values + # ~ self._columns = values #~ https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1grid_1_1XGridColumn.html model = create_instance('com.sun.star.awt.grid.DefaultGridColumnModel', True) for properties in values: @@ -4742,35 +4741,46 @@ class UnoGrid(UnoBaseObject): def row(self): return self.obj.CurrentRow + @property + def row_count(self): + return self._gdm.RowCount + @property def column(self): return self.obj.CurrentColumn + @property + def column(self): + return self.obj.CurrentColumn + + @property + def is_valid(self): + return not (self.row == -1 or self.column == -1) + + @property + def formats(self): + return self._formats + @formats.setter + def formats(self, values): + self._formats = values + def clear(self): self._gdm.removeAllRows() return - # UP - 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 + def _format_columns(self, data): + row = data + if self.formats: + for i, f in enumerate(formats): + if f: + row[i] = f.format(data[i]) + return row - # ~ @property - # ~ def format_columns(self): - # ~ return self._format_columns - # ~ @format_columns.setter - # ~ def format_columns(self, value): - # ~ self._format_columns = value - - # ~ @property - # ~ def rows(self): - # ~ return self._gdm.RowCount - - # ~ @property - # ~ def columns(self): - # ~ return self._gdm.ColumnCount + def add_row(self, data): + self._data.append(data) + row = self._format_columns(data) + self._gdm.addRow(self.row_count + 1, row) + return def set_cell_tooltip(self, col, row, value): self._gdm.updateCellToolTip(col, row, value) @@ -4780,45 +4790,20 @@ class UnoGrid(UnoBaseObject): 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 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 + def update_row_heading(self): + for i in range(self.row_count): + self._gdm.updateRowHeading(i, i + 1) + return + + def remove_row(self, row): + self._gdm.removeRow(row) + del self._data[row] + self.update_row_heading() return @@ -6212,6 +6197,14 @@ class Paths(object): return True + @classmethod + def image(cls, path): + gp = create_instance('com.sun.star.graphic.GraphicProvider') + image = gp.queryGraphic(( + PropertyValue(Name='URL', Value=cls.to_url(path)), + )) + return image + @classmethod def copy(cls, source, target='', name=''): p, f, n, e = _P(source).info