Add range selection
This commit is contained in:
parent
9f16224a82
commit
4d62aef1b8
|
@ -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 = ?
|
||||
|
|
Loading…
Reference in New Issue