Refactory class UnoGrid

This commit is contained in:
Mauricio Baeza 2020-11-21 22:20:00 -06:00
parent 830d08d01d
commit 41342b8a59
2 changed files with 113 additions and 95 deletions

View File

@ -705,34 +705,6 @@ class LOCellRange(object):
return LOCellRange(self.sheet[cell.AbsoluteName].obj, self.doc)
class EventsMouseGrid(EventsMouse):
selected = False
def mousePressed(self, event):
super().mousePressed(event)
# ~ obj = event.Source
# ~ col = obj.getColumnAtPoint(event.X, event.Y)
# ~ row = obj.getRowAtPoint(event.X, event.Y)
# ~ print(col, row)
# ~ if col == -1 and row == -1:
# ~ if self.selected:
# ~ obj.deselectAllRows()
# ~ else:
# ~ obj.selectAllRows()
# ~ self.selected = not self.selected
return
def mouseReleased(self, event):
# ~ obj = event.Source
# ~ col = obj.getColumnAtPoint(event.X, event.Y)
# ~ row = obj.getRowAtPoint(event.X, event.Y)
# ~ if row == -1 and col > -1:
# ~ gdm = obj.Model.GridDataModel
# ~ for i in range(gdm.RowCount):
# ~ gdm.updateRowHeading(i, i + 1)
return
class EventsModify(EventsListenerBase, XModifyListener):
def __init__(self, controller):
@ -1426,17 +1398,6 @@ class LOChart(object):
return self
def _set_column_model(columns):
#~ https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1grid_1_1XGridColumn.html
column_model = create_instance('com.sun.star.awt.grid.DefaultGridColumnModel', True)
for column in columns:
grid_column = create_instance('com.sun.star.awt.grid.GridColumn', True)
for k, v in column.items():
setattr(grid_column, k, v)
column_model.addColumn(grid_column)
return column_model
class LODialog(object):
def _get_type_control(self, name):

View File

@ -2998,10 +2998,10 @@ def _add_listeners(events, control, name=''):
getattr(control, key)(listeners[key](events, name))
# ~ if is_grid:
# ~ controllers = EventsGrid(events, name)
# ~ control.addSelectionListener(controllers)
# ~ control.Model.GridDataModel.addGridDataListener(controllers)
if is_grid:
controllers = EventsGrid(events, name)
control.addSelectionListener(controllers)
control.Model.GridDataModel.addGridDataListener(controllers)
return
@ -3188,6 +3188,34 @@ class EventsGrid(EventsListenerBase, XGridDataListener, XGridSelectionListener):
return
class EventsMouseGrid(EventsMouse):
selected = False
def mousePressed(self, event):
super().mousePressed(event)
# ~ obj = event.Source
# ~ col = obj.getColumnAtPoint(event.X, event.Y)
# ~ row = obj.getRowAtPoint(event.X, event.Y)
# ~ print(col, row)
# ~ if col == -1 and row == -1:
# ~ if self.selected:
# ~ obj.deselectAllRows()
# ~ else:
# ~ obj.selectAllRows()
# ~ self.selected = not self.selected
return
def mouseReleased(self, event):
# ~ obj = event.Source
# ~ col = obj.getColumnAtPoint(event.X, event.Y)
# ~ row = obj.getRowAtPoint(event.X, event.Y)
# ~ if row == -1 and col > -1:
# ~ gdm = obj.Model.GridDataModel
# ~ for i in range(gdm.RowCount):
# ~ gdm.updateRowHeading(i, i + 1)
return
# ~ BorderColor = ?
# ~ FontStyleName = ?
# ~ HelpURL = ?
@ -3780,11 +3808,12 @@ class UnoGrid(UnoBaseObject):
def __init__(self, obj):
super().__init__(obj)
self._gdm = self.model.GridDataModel
# ~ self._columns = {}
self._columns = []
self._data = []
# ~ self._format_columns = ()
def __setattr__(self, name, value):
if name in ('_gdm',):
if name in ('_gdm', '_columns', '_data'):
self.__dict__[name] = value
else:
super().__setattr__(name, value)
@ -3797,6 +3826,55 @@ class UnoGrid(UnoBaseObject):
def type(self):
return 'grid'
@property
def columns(self):
return self._columns
@columns.setter
def columns(self, 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:
column = create_instance('com.sun.star.awt.grid.GridColumn', True)
for k, v in properties.items():
setattr(column, k, v)
model.addColumn(column)
self.model.ColumnModel = model
return
@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 value(self):
if self.column == -1 or self.row == -1:
return ''
return self[self.column, self.row]
@property
def row(self):
return self.obj.CurrentRow
@property
def column(self):
return self.obj.CurrentColumn
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
@ -3810,39 +3888,13 @@ class UnoGrid(UnoBaseObject):
# ~ def format_columns(self, value):
# ~ self._format_columns = value
@property
def value(self):
return self[self.column, self.row]
# ~ @property
# ~ def rows(self):
# ~ return self._gdm.RowCount
@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
# ~ @property
# ~ def columns(self):
# ~ return self._gdm.ColumnCount
def set_cell_tooltip(self, col, row, value):
self._gdm.updateCellToolTip(col, row, value)
@ -3862,10 +3914,6 @@ class UnoGrid(UnoBaseObject):
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)
@ -4068,28 +4116,33 @@ class LODialog(object):
return _P.to_url(path)
def _special_properties(self, tipo, args):
columns = args.pop('Columns', ())
if tipo == 'link' and not 'Label' in args:
args['Label'] = args['URL']
elif tipo == 'grid':
args['ColumnModel'] = self._set_column_model(columns)
elif tipo == 'button':
return args
if tipo == 'button':
if 'ImageURL' in args:
args['ImageURL'] = self._set_image_url(args['ImageURL'])
args['FocusOnClick'] = args.get('FocusOnClick', False)
elif tipo == 'roadmap':
if not 'Height' in args:
args['Height'] = self.height
return args
if tipo == 'roadmap':
args['Height'] = args.get('Height', self.height)
if 'Title' in args:
args['Text'] = args.pop('Title')
elif tipo == 'tree':
return args
if tipo == 'tree':
args['SelectionType'] = args.get('SelectionType', SINGLE)
elif tipo == 'tab':
if not 'Width' in args:
args['Width'] = self.width
if not 'Height' in args:
args['Height'] = self.height
return args
if tipo == 'grid':
args['ShowRowHeader'] = args.get('ShowRowHeader', True)
return args
if tipo == 'tab':
args['Width'] = args.get('Width', self.width)
args['Height'] = args.get('Height', self.height)
return args
@ -4097,6 +4150,7 @@ class LODialog(object):
tipo = args.pop('Type').lower()
root = args.pop('Root', '')
sheets = args.pop('Sheets', ())
columns = args.pop('Columns', ())
args = self._special_properties(tipo, args)
model = self.model.createInstance(self.MODELS[tipo])
@ -4106,11 +4160,14 @@ class LODialog(object):
control = self.obj.getControl(name)
_add_listeners(self.events, control, name)
control = UNO_CLASSES[tipo](control)
if tipo in ('listbox',):
control.path = self.path
if tipo == 'tree' and root:
control.root = root
elif tipo == 'grid' and columns:
control.columns = columns
elif tipo == 'pages' and sheets:
control.sheets = sheets
control.events = self.events