Adding data_change to use to signal to Screenful that save button nedds a litle star

This commit is contained in:
Ozbolt Menegatti 2019-11-20 22:25:31 +01:00
parent 9f16aa999b
commit 1f038e177a
6 changed files with 49 additions and 5 deletions

15
src/lib/screenful.py Normal file
View File

@ -0,0 +1,15 @@
from browser import window
# interface to screenful
class ScreenfulEmptyShell:
def __init__(self):
func = lambda: None
self.Editor = {"changed": func}
def screenful():
return window.Screenful if window.Screenful else ScreenfulEmptyShell()
def changed():
console.log(Screenful, window.Screenful)
screenful().Editor.changed();

View File

@ -25,6 +25,9 @@ class Message:
return result return result
def data_change(self):
return True
def add_arg(self, arg): def add_arg(self, arg):
self._args.append(arg) self._args.append(arg)
@ -35,6 +38,9 @@ class Message:
class ClickMessage(Message): class ClickMessage(Message):
def on_event(self, event): def on_event(self, event):
event.stopPropagation() event.stopPropagation()
def data_change(self):
return False
def msg(message, params): def msg(message, params):

View File

@ -21,6 +21,9 @@ class AddToGenericList(NoReset):
def update_model(self, model): def update_model(self, model):
list_getter = self.get_arg(0) list_getter = self.get_arg(0)
list_getter().append("") list_getter().append("")
def data_change(self):
return False
class AddToLabelList(NoReset): class AddToLabelList(NoReset):
@ -31,6 +34,9 @@ class AddToLabelList(NoReset):
# just adding to the copy to show in the modal # just adding to the copy to show in the modal
list_to_add_to.append(thing_to_add) list_to_add_to.append(thing_to_add)
def data_change(self):
return False
class EditExampleTranslation(Message): class EditExampleTranslation(Message):

View File

@ -19,11 +19,17 @@ class NoReset(Reset):
class _ModalResetDelayed(Message): class _ModalResetDelayed(Message):
def update_model(self, model): def update_model(self, model):
model.modal_reset() model.modal_reset()
def data_change(self):
return False
class ModalNotOkClose(Reset): class ModalNotOkClose(Reset):
def update_model(self, model): def update_model(self, model):
# msg just creates a callback, need to actually run it! # msg just creates a callback, need to actually run it!
window.setTimeout(lambda: msg(_ModalResetDelayed())(None), 100) window.setTimeout(lambda: msg(_ModalResetDelayed())(None), 100)
def data_change(self):
return False

View File

@ -12,8 +12,13 @@ def get_translation_location(entry, translation):
if search_translation == translation: if search_translation == translation:
return (si, ci, ti), (sense, cluster) return (si, ci, ti), (sense, cluster)
class TranslationEditMessage(ClickMessage):
def data_change(self):
return True
class EditTranslation(ClickMessage): class EditTranslation(TranslationEditMessage):
def update_model(self, model): def update_model(self, model):
self.translation = self.get_arg(0, Translation) self.translation = self.get_arg(0, Translation)
self.old_cluster_idx = self.get_arg(1, int) self.old_cluster_idx = self.get_arg(1, int)
@ -60,7 +65,7 @@ class EditTranslation(ClickMessage):
sense.translations.splice(cidx, 1) sense.translations.splice(cidx, 1)
class MoveRight(ClickMessage): class MoveRight(TranslationEditMessage):
def update_model(self, model): def update_model(self, model):
translation = self.get_arg(0, Translation) translation = self.get_arg(0, Translation)
(_, _, idx), (_, cluster) = get_translation_location(model.entry, translation) (_, _, idx), (_, cluster) = get_translation_location(model.entry, translation)
@ -69,7 +74,7 @@ class MoveRight(ClickMessage):
model.translation = None model.translation = None
class MoveLeft(ClickMessage): class MoveLeft(TranslationEditMessage):
def update_model(self, model): def update_model(self, model):
translation = self.get_arg(0, Translation) translation = self.get_arg(0, Translation)
(_, _, idx), (_, cluster) = get_translation_location(model.entry, translation) (_, _, idx), (_, cluster) = get_translation_location(model.entry, translation)
@ -78,7 +83,7 @@ class MoveLeft(ClickMessage):
model.translation = None model.translation = None
class BinTranslation(ClickMessage): class BinTranslation(TranslationEditMessage):
def update_model(self, model): def update_model(self, model):
translation = self.get_arg(0, Translation) translation = self.get_arg(0, Translation)
(_, cidx, tidx), (sense, cluster) = get_translation_location(model.entry, translation) (_, cidx, tidx), (sense, cluster) = get_translation_location(model.entry, translation)
@ -90,7 +95,7 @@ class BinTranslation(ClickMessage):
model.translation = None model.translation = None
class AddTranslation(EditTranslation): class AddTranslation(TranslationEditMessage):
def handle_cluster_change(self, new_cluster_idx, _): def handle_cluster_change(self, new_cluster_idx, _):
# we need to cheat here # we need to cheat here
# sense was actually given in constructor in third place # sense was actually given in constructor in third place

View File

@ -1,3 +1,5 @@
import lib.screenful as screenful
class Update: class Update:
def __init__(self): def __init__(self):
self.message_queue = [] self.message_queue = []
@ -10,6 +12,10 @@ class Update:
if msg.reset(): if msg.reset():
self.model.reset() self.model.reset()
break break
for msg in self.message_queue:
if msg.data_change():
screenful.changed()
for msg in self.message_queue: for msg in self.message_queue:
msg.update_model(self.model) msg.update_model(self.model)