From 5ef5f4aabfde1f8613d395d4d880a2daa8bc853e Mon Sep 17 00:00:00 2001 From: Goffi Date: Sun, 9 Feb 2020 23:50:21 +0100 Subject: [PATCH] quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected: A property is now used to manage `selected_widget` in QuickApp, and widget's onSelected method is called when suitable. --- sat_frontends/primitivus/chat.py | 13 +++++----- sat_frontends/quick_frontend/quick_app.py | 26 +++++++++++++++++-- sat_frontends/quick_frontend/quick_widgets.py | 4 +++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/sat_frontends/primitivus/chat.py b/sat_frontends/primitivus/chat.py index efab6d75..3ca11ce3 100644 --- a/sat_frontends/primitivus/chat.py +++ b/sat_frontends/primitivus/chat.py @@ -17,12 +17,12 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from sat.core.i18n import _ -from sat.core import log as logging - -log = logging.getLogger(__name__) +from functools import total_ordering +import bisect import urwid from urwid_satext import sat_widgets +from sat.core.i18n import _ +from sat.core import log as logging from sat_frontends.quick_frontend import quick_widgets from sat_frontends.quick_frontend import quick_chat from sat_frontends.quick_frontend import quick_games @@ -31,8 +31,9 @@ from sat_frontends.primitivus.constants import Const as C from sat_frontends.primitivus.keys import action_key_map as a_key from sat_frontends.primitivus.widget import PrimitivusWidget from sat_frontends.primitivus.contact_list import ContactList -from functools import total_ordering -import bisect + + +log = logging.getLogger(__name__) OCCUPANTS_FOOTER = _("{} occupants") diff --git a/sat_frontends/quick_frontend/quick_app.py b/sat_frontends/quick_frontend/quick_app.py index e503e884..8fb2d635 100644 --- a/sat_frontends/quick_frontend/quick_app.py +++ b/sat_frontends/quick_frontend/quick_app.py @@ -301,8 +301,8 @@ class QuickApp(object): else: self.options = None - # widget currently selected (must be filled by frontend) - self.selected_widget = None + # see selected_widget setter and getter + self._selected_widget = None # listeners are callable watching events self._listeners = {} # key: listener type ("avatar", "selected", etc), @@ -436,6 +436,28 @@ class QuickApp(object): if isinstance(w, quick_widgets.QuickWidget): return w + @property + def selected_widget(self): + """widget currently selected + + This must be set by frontend using setter. + """ + return self._selected_widget + + @selected_widget.setter + def selected_widget(self, wid): + """Set the currently selected widget + + Must be set by frontend + """ + self._selected_widget = wid + try: + onSelected = wid.onSelected + except AttributeError: + pass + else: + onSelected() + # backend state management @property diff --git a/sat_frontends/quick_frontend/quick_widgets.py b/sat_frontends/quick_frontend/quick_widgets.py index abf4ce33..bec95073 100644 --- a/sat_frontends/quick_frontend/quick_widgets.py +++ b/sat_frontends/quick_frontend/quick_widgets.py @@ -462,3 +462,7 @@ class QuickWidget(object): all other value continue deletion """ return True + + def onSelected(self): + """Called when host.selected_widget is this instance""" + pass