Refactory class UnoGrid
This commit is contained in:
parent
830d08d01d
commit
41342b8a59
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue