From 51afb264fb38375e3017d0af6fd4ec8de78b79e6 Mon Sep 17 00:00:00 2001 From: El Mau Date: Thu, 4 Nov 2021 00:16:53 -0600 Subject: [PATCH] Add range selection --- source/easymacro.py | 47 +++++++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/source/easymacro.py b/source/easymacro.py index bd2f367..4a30af2 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -1443,7 +1443,6 @@ class LOCalc(LODocument): self._sheets = obj.Sheets self._events = None self._listener_range_selection = None - self._range_selection = '' def __getitem__(self, index): return LOCalcSheet(self._sheets[index]) @@ -1513,7 +1512,7 @@ class LOCalc(LODocument): return LOCalcRanges(obj) def _connect_listeners(self): - # ~ self._cc.addRangeSelectionListener(EventsRangeSelectionListener(self.events)) + return @property @@ -1524,26 +1523,22 @@ class LOCalc(LODocument): 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={}): + def start_range_selection(self, controllers, args={}): if not args: args = dict( Title = 'Please select a range', CloseOnMouseRelease = True) + properties = dict_to_property(args) - self._listener_range_selection = EventsRangeSelectionListener(self) + self._listener_range_selection = EventsRangeSelectionListener(controllers(self)) self._cc.addRangeSelectionListener(self._listener_range_selection) - self._start_range_selection(args) - # ~ self._cc.removeRangeSelectionListener(listener) + self._cc.startRangeSelection(properties) + return + + def remove_range_selection_listener(self): + if not self._listener_range_selection is None: + self._cc.removeRangeSelectionListener(self._listener_range_selection) return def get_ranges(self, address: str): @@ -4874,23 +4869,21 @@ class EventsWindow(EventsListenerBase, XTopWindowListener, XWindowListener): class EventsRangeSelectionListener(EventsListenerBase, XRangeSelectionListener): - def __init__(self, doc): - super().__init__(None, '') - self._doc = doc + def __init__(self, controller): + super().__init__(controller, '') 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) + range_selection = event.RangeDescriptor + event_name = 'range_selection_done' + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)(range_selection) return def aborted(self, event): - range_name = '' - # ~ event_name = 'range_selection_aborted' - # ~ if hasattr(self._controller, event_name): - # ~ getattr(self._controller, event_name)(event) + range_selection = event.RangeDescriptor + event_name = 'range_selection_aborted' + if hasattr(self._controller, event_name): + getattr(self._controller, event_name)() return