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)
|
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):
|
class EventsModify(EventsListenerBase, XModifyListener):
|
||||||
|
|
||||||
def __init__(self, controller):
|
def __init__(self, controller):
|
||||||
|
@ -1426,17 +1398,6 @@ class LOChart(object):
|
||||||
return self
|
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):
|
class LODialog(object):
|
||||||
|
|
||||||
def _get_type_control(self, name):
|
def _get_type_control(self, name):
|
||||||
|
|
|
@ -2998,10 +2998,10 @@ def _add_listeners(events, control, name=''):
|
||||||
|
|
||||||
getattr(control, key)(listeners[key](events, name))
|
getattr(control, key)(listeners[key](events, name))
|
||||||
|
|
||||||
# ~ if is_grid:
|
if is_grid:
|
||||||
# ~ controllers = EventsGrid(events, name)
|
controllers = EventsGrid(events, name)
|
||||||
# ~ control.addSelectionListener(controllers)
|
control.addSelectionListener(controllers)
|
||||||
# ~ control.Model.GridDataModel.addGridDataListener(controllers)
|
control.Model.GridDataModel.addGridDataListener(controllers)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -3188,6 +3188,34 @@ class EventsGrid(EventsListenerBase, XGridDataListener, XGridSelectionListener):
|
||||||
return
|
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 = ?
|
# ~ BorderColor = ?
|
||||||
# ~ FontStyleName = ?
|
# ~ FontStyleName = ?
|
||||||
# ~ HelpURL = ?
|
# ~ HelpURL = ?
|
||||||
|
@ -3780,11 +3808,12 @@ class UnoGrid(UnoBaseObject):
|
||||||
def __init__(self, obj):
|
def __init__(self, obj):
|
||||||
super().__init__(obj)
|
super().__init__(obj)
|
||||||
self._gdm = self.model.GridDataModel
|
self._gdm = self.model.GridDataModel
|
||||||
# ~ self._columns = {}
|
self._columns = []
|
||||||
|
self._data = []
|
||||||
# ~ self._format_columns = ()
|
# ~ self._format_columns = ()
|
||||||
|
|
||||||
def __setattr__(self, name, value):
|
def __setattr__(self, name, value):
|
||||||
if name in ('_gdm',):
|
if name in ('_gdm', '_columns', '_data'):
|
||||||
self.__dict__[name] = value
|
self.__dict__[name] = value
|
||||||
else:
|
else:
|
||||||
super().__setattr__(name, value)
|
super().__setattr__(name, value)
|
||||||
|
@ -3797,6 +3826,55 @@ class UnoGrid(UnoBaseObject):
|
||||||
def type(self):
|
def type(self):
|
||||||
return 'grid'
|
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):
|
def _format_cols(self):
|
||||||
rows = tuple(tuple(
|
rows = tuple(tuple(
|
||||||
self._format_columns[i].format(r) for i, r in enumerate(row)) for row in self._data
|
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):
|
# ~ def format_columns(self, value):
|
||||||
# ~ self._format_columns = value
|
# ~ self._format_columns = value
|
||||||
|
|
||||||
@property
|
# ~ @property
|
||||||
def value(self):
|
# ~ def rows(self):
|
||||||
return self[self.column, self.row]
|
# ~ return self._gdm.RowCount
|
||||||
|
|
||||||
@property
|
# ~ @property
|
||||||
def data(self):
|
# ~ def columns(self):
|
||||||
return self._data
|
# ~ return self._gdm.ColumnCount
|
||||||
@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):
|
def set_cell_tooltip(self, col, row, value):
|
||||||
self._gdm.updateCellToolTip(col, row, value)
|
self._gdm.updateCellToolTip(col, row, value)
|
||||||
|
@ -3862,10 +3914,6 @@ class UnoGrid(UnoBaseObject):
|
||||||
row.append(d)
|
row.append(d)
|
||||||
return tuple(row)
|
return tuple(row)
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self._gdm.removeAllRows()
|
|
||||||
return
|
|
||||||
|
|
||||||
def add_row(self, data):
|
def add_row(self, data):
|
||||||
# ~ self._data.append(data)
|
# ~ self._data.append(data)
|
||||||
data = self._validate_column(data)
|
data = self._validate_column(data)
|
||||||
|
@ -4068,28 +4116,33 @@ class LODialog(object):
|
||||||
return _P.to_url(path)
|
return _P.to_url(path)
|
||||||
|
|
||||||
def _special_properties(self, tipo, args):
|
def _special_properties(self, tipo, args):
|
||||||
columns = args.pop('Columns', ())
|
|
||||||
|
|
||||||
if tipo == 'link' and not 'Label' in args:
|
if tipo == 'link' and not 'Label' in args:
|
||||||
args['Label'] = args['URL']
|
args['Label'] = args['URL']
|
||||||
elif tipo == 'grid':
|
return args
|
||||||
args['ColumnModel'] = self._set_column_model(columns)
|
|
||||||
elif tipo == 'button':
|
if tipo == 'button':
|
||||||
if 'ImageURL' in args:
|
if 'ImageURL' in args:
|
||||||
args['ImageURL'] = self._set_image_url(args['ImageURL'])
|
args['ImageURL'] = self._set_image_url(args['ImageURL'])
|
||||||
args['FocusOnClick'] = args.get('FocusOnClick', False)
|
args['FocusOnClick'] = args.get('FocusOnClick', False)
|
||||||
elif tipo == 'roadmap':
|
return args
|
||||||
if not 'Height' in args:
|
|
||||||
args['Height'] = self.height
|
if tipo == 'roadmap':
|
||||||
|
args['Height'] = args.get('Height', self.height)
|
||||||
if 'Title' in args:
|
if 'Title' in args:
|
||||||
args['Text'] = args.pop('Title')
|
args['Text'] = args.pop('Title')
|
||||||
elif tipo == 'tree':
|
return args
|
||||||
|
|
||||||
|
if tipo == 'tree':
|
||||||
args['SelectionType'] = args.get('SelectionType', SINGLE)
|
args['SelectionType'] = args.get('SelectionType', SINGLE)
|
||||||
elif tipo == 'tab':
|
return args
|
||||||
if not 'Width' in args:
|
|
||||||
args['Width'] = self.width
|
if tipo == 'grid':
|
||||||
if not 'Height' in args:
|
args['ShowRowHeader'] = args.get('ShowRowHeader', True)
|
||||||
args['Height'] = self.height
|
return args
|
||||||
|
|
||||||
|
if tipo == 'tab':
|
||||||
|
args['Width'] = args.get('Width', self.width)
|
||||||
|
args['Height'] = args.get('Height', self.height)
|
||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
@ -4097,6 +4150,7 @@ class LODialog(object):
|
||||||
tipo = args.pop('Type').lower()
|
tipo = args.pop('Type').lower()
|
||||||
root = args.pop('Root', '')
|
root = args.pop('Root', '')
|
||||||
sheets = args.pop('Sheets', ())
|
sheets = args.pop('Sheets', ())
|
||||||
|
columns = args.pop('Columns', ())
|
||||||
|
|
||||||
args = self._special_properties(tipo, args)
|
args = self._special_properties(tipo, args)
|
||||||
model = self.model.createInstance(self.MODELS[tipo])
|
model = self.model.createInstance(self.MODELS[tipo])
|
||||||
|
@ -4106,11 +4160,14 @@ class LODialog(object):
|
||||||
control = self.obj.getControl(name)
|
control = self.obj.getControl(name)
|
||||||
_add_listeners(self.events, control, name)
|
_add_listeners(self.events, control, name)
|
||||||
control = UNO_CLASSES[tipo](control)
|
control = UNO_CLASSES[tipo](control)
|
||||||
|
|
||||||
if tipo in ('listbox',):
|
if tipo in ('listbox',):
|
||||||
control.path = self.path
|
control.path = self.path
|
||||||
|
|
||||||
if tipo == 'tree' and root:
|
if tipo == 'tree' and root:
|
||||||
control.root = root
|
control.root = root
|
||||||
|
elif tipo == 'grid' and columns:
|
||||||
|
control.columns = columns
|
||||||
elif tipo == 'pages' and sheets:
|
elif tipo == 'pages' and sheets:
|
||||||
control.sheets = sheets
|
control.sheets = sheets
|
||||||
control.events = self.events
|
control.events = self.events
|
||||||
|
|
Loading…
Reference in New Issue