From 575345f98f37526aee162a06e0d31434d6ba80fc Mon Sep 17 00:00:00 2001 From: Ozbolt Menegatti Date: Tue, 14 Jan 2020 22:16:47 +0100 Subject: [PATCH] Adding shift+click to example selection --- src/message/show_messages.py | 28 ++++++++++++++++++++++++---- src/message/simple_messages.py | 17 ++++++++++++----- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/message/show_messages.py b/src/message/show_messages.py index 2b62880..d761ad7 100644 --- a/src/message/show_messages.py +++ b/src/message/show_messages.py @@ -1,6 +1,6 @@ from message.message import Message from message.translation_edit import AddTranslation, EditTranslation -from message.simple_messages import ClickMessage, CtrlClickMessage +from message.simple_messages import ClickMessage, KeyPlusClickMessage from model import Example, Sense, Translation from view import modals @@ -31,8 +31,8 @@ class ShowVariantsEdit(ClickMessage): model.modal_set(lambda: modals.edit_variants(model.entry)) -class ShowExampleEdit(CtrlClickMessage): - def update_model_noctrl(self, model): +class ShowExampleEdit(KeyPlusClickMessage): + def update_model_default(self, model): example = self.get_arg(0, Example) # if some are chosen, then show modal for choosing senses @@ -49,10 +49,30 @@ class ShowExampleEdit(CtrlClickMessage): model.chosen_examples.remove(example) else: model.chosen_examples.append(example) + + def update_model_shift(self, model): + first_example = self.get_arg(0, Example) + last_example = model.chosen_examples[model.chosen_examples.length - 1] + adding = False + + # logic to add all senses between these two + for sense in model.entry.senses: + for example in sense.examples: + match = example in (first_example, last_example) + + if adding and match: + adding = False + elif match: + adding = True + elif not adding: + continue + + if example not in model.chosen_examples: + model.chosen_examples.append(example) def reset(self): # special case, when choosing messages dont reset - return not self.ctrl + return not (self.ctrl or self.shift) class ShowExampleTranslationEdit(ClickMessage): def update_model(self, model): diff --git a/src/message/simple_messages.py b/src/message/simple_messages.py index 9977d1b..063b259 100644 --- a/src/message/simple_messages.py +++ b/src/message/simple_messages.py @@ -68,23 +68,30 @@ class ModalNotOkClose(Reset): return False -# Special message to handle ctrl+click and click -# overwrite update_model_noctrl and/or update_model_ctrl -class CtrlClickMessage(ClickMessage): +# Special message to handle ctrl+click, shift+click and click +# overwrite update_model_default/ctrl/shift +class KeyPlusClickMessage(ClickMessage): def on_event(self, event): super().on_event(event) self.ctrl = event.ctrlKey + self.shift = event.shiftKey def update_model(self, model): if self.ctrl: self.update_model_ctrl(model) + elif self.shift: + document.getSelection().removeAllRanges() + self.update_model_shift(model) else: - self.update_model_noctrl(model) + self.update_model_default(model) def update_model_ctrl(self, model): pass - def update_model_noctrl(self, model): + def update_model_shift(self, model): + pass + + def update_model_default(self, model): pass