From 20ffe570f4d4b57d6133df7d3d33e52b5b116676 Mon Sep 17 00:00:00 2001 From: Ozbolt Menegatti Date: Fri, 24 Jan 2020 02:04:12 +0100 Subject: [PATCH] ctrl+click now on different message. Will have to change these stuff, probably composition over inheritance --- src/message/show_menu.py | 76 ++++++++++++++++++++++++++++++++-- src/message/show_messages.py | 44 ++------------------ src/message/simple_messages.py | 26 ------------ 3 files changed, 75 insertions(+), 71 deletions(-) diff --git a/src/message/show_menu.py b/src/message/show_menu.py index be5a4bb..1c596ee 100644 --- a/src/message/show_menu.py +++ b/src/message/show_menu.py @@ -1,5 +1,7 @@ from model import Translation, Sense, Example from message.simple_messages import ClickMessage +from view import modals +from browser import document class ShowMenu(ClickMessage): @@ -8,6 +10,34 @@ class ShowMenu(ClickMessage): location_y = event.currentTarget.offsetTop + event.currentTarget.offsetHeight self.menu_location = (location_x, location_y) super().on_event(event) + + +# Special message to handle ctrl+click, shift+click and click +# overwrite update_model_default/ctrl/shift +class KeyPlusClickMessage(ShowMenu): + 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_default(model) + + def update_model_ctrl(self, model): + pass + + def update_model_shift(self, model): + pass + + def update_model_default(self, model): + pass + class ShowTranslationMenu(ShowMenu): @@ -24,8 +54,46 @@ class ShowSenseMenu(ShowMenu): model.menu_target = sense -class ShowExampleMenu(ShowMenu): - def update_model(self, model): - model.menu_location = self.menu_location +class ShowExampleMenu(KeyPlusClickMessage): + def update_model_default(self, model): + example = self.get_arg(0, Example) + + # if some are chosen, then show modal for choosing senses + if len(model.chosen_examples) > 0 and example in model.chosen_examples: + chosen_examples = model.chosen_examples + model.modal_set(lambda: modals.do_chosen_examples(chosen_examples, model.entry)) + else: + model.menu_location = self.menu_location + model.menu_target = example + + def update_model_ctrl(self, model): example = self.get_arg(0, Example) - model.menu_target = example + + if example in model.chosen_examples: + 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 or self.shift) diff --git a/src/message/show_messages.py b/src/message/show_messages.py index d7eab08..52cfcc4 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, KeyPlusClickMessage +from message.simple_messages import ClickMessage from model import Example, Sense, Translation from view import modals @@ -37,49 +37,11 @@ class ShowRelatedEntriesEdit(ClickMessage): model.modal_set(lambda: modals.edit_related_entries(model.entry)) -class ShowExampleEdit(KeyPlusClickMessage): +class ShowExampleEdit(ClickMessage): def update_model_default(self, model): example = self.get_arg(0, Example) example.make_copy() - - # if some are chosen, then show modal for choosing senses - if len(model.chosen_examples) > 0 and example in model.chosen_examples: - chosen_examples = model.chosen_examples - model.modal_set(lambda: modals.do_chosen_examples(chosen_examples, model.entry)) - else: - model.modal_set(lambda: modals.edit_example(example)) - - def update_model_ctrl(self, model): - example = self.get_arg(0, Example) - - if example in model.chosen_examples: - 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 or self.shift) + model.modal_set(lambda: modals.edit_example(example)) class ShowEditTranslation(ClickMessage): diff --git a/src/message/simple_messages.py b/src/message/simple_messages.py index 063b259..8aafb34 100644 --- a/src/message/simple_messages.py +++ b/src/message/simple_messages.py @@ -68,30 +68,4 @@ class ModalNotOkClose(Reset): return False -# 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_default(model) - - def update_model_ctrl(self, model): - pass - - def update_model_shift(self, model): - pass - - def update_model_default(self, model): - pass -