Add range selection

This commit is contained in:
El Mau 2021-11-03 23:43:23 -06:00
parent 9f16224a82
commit 4d62aef1b8
1 changed files with 60 additions and 0 deletions

View File

@ -84,6 +84,7 @@ from com.sun.star.util import Time, Date, DateTime
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK
from com.sun.star.sheet import XRangeSelectionListener
from com.sun.star.lang import Locale
from com.sun.star.lang import XEventListener
from com.sun.star.awt import XActionListener
@ -1440,6 +1441,9 @@ class LOCalc(LODocument):
super().__init__(obj)
self._type = CALC
self._sheets = obj.Sheets
self._events = None
self._listener_range_selection = None
self._range_selection = ''
def __getitem__(self, index):
return LOCalcSheet(self._sheets[index])
@ -1508,6 +1512,40 @@ class LOCalc(LODocument):
obj = self.create_instance('com.sun.star.sheet.SheetCellRanges')
return LOCalcRanges(obj)
def _connect_listeners(self):
# ~ self._cc.addRangeSelectionListener(EventsRangeSelectionListener(self.events))
return
@property
def events(self):
return self._events
@events.setter
def events(self, controllers):
self._events = controllers(self)
self._connect_listeners()
@property
def range_selection(self):
return self._range_selection
@run_in_thread
def _start_range_selection(self, args):
properties = dict_to_property(args)
self._cc.startRangeSelection(properties)
return
def start_range_selection(self, args={}):
if not args:
args = dict(
Title = 'Please select a range',
CloseOnMouseRelease = True)
self._listener_range_selection = EventsRangeSelectionListener(self)
self._cc.addRangeSelectionListener(self._listener_range_selection)
self._start_range_selection(args)
# ~ self._cc.removeRangeSelectionListener(listener)
return
def get_ranges(self, address: str):
ranges = self.ranges
ranges.add([sheet[address] for sheet in self])
@ -4834,6 +4872,28 @@ class EventsWindow(EventsListenerBase, XTopWindowListener, XWindowListener):
pass
class EventsRangeSelectionListener(EventsListenerBase, XRangeSelectionListener):
def __init__(self, doc):
super().__init__(None, '')
self._doc = doc
def done(self, event):
range_name = event.RangeDescriptor
self.doc.range_selection = range_name
# ~ event_name = 'range_selection_done'
# ~ if hasattr(self._controller, event_name):
# ~ getattr(self._controller, event_name)(event)
return
def aborted(self, event):
range_name = ''
# ~ event_name = 'range_selection_aborted'
# ~ if hasattr(self._controller, event_name):
# ~ getattr(self._controller, event_name)(event)
return
# ~ BorderColor = ?
# ~ FontStyleName = ?
# ~ HelpURL = ?