From 2b50060bab9fe5e6d2c6c3859e3d86ec77182b87 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 22 Oct 2014 15:45:52 +0400 Subject: [PATCH] gui/widget/menue.cpp: add activate observer to notify when item become active --- src/gui/widget/menue.cpp | 26 +++++++++++++++----------- src/gui/widget/menue.h | 10 ++++++++++ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 1bc9c6ea8..69efb9eeb 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -87,6 +87,7 @@ CMenuItem::CMenuItem(bool Active, neutrino_msg_t DirectKey, const char * const I directKeyOK = true; selected_iconName = NULL; height = 0; + actObserv = NULL; } void CMenuItem::init(const int X, const int Y, const int DX, const int OFFX) @@ -453,6 +454,12 @@ int CMenuItem::getHeight(void) return height; } +void CMenuItem::activateNotify() +{ + if (actObserv) + actObserv->activateNotify(name); +} + //small helper class to manage values e.g.: handling needed but deallocated widget objects CMenuGlobal::CMenuGlobal() { @@ -822,6 +829,7 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if (pos < page_start[current_page + 1] && pos >= page_start[current_page]) { /* in current page */ items[selected]->paint(false); + item->activateNotify(); item->paint(true); paintHint(pos); selected = pos; @@ -1215,19 +1223,15 @@ void CMenuWidget::paintItems() (count < page_start[current_page + 1])) { item->init(x, ypos, width, iconOffset); - if( (item->isSelectable()) && (selected==-1) ) - { - paintHint(count); - ypos = item->paint(true); + + if (item->isSelectable() && selected == -1) selected = count; + + if (selected == count) { + item->activateNotify(); + paintHint(count); } - else - { - bool sel = selected==((signed int) count) ; - if(sel) - paintHint(count); - ypos = item->paint(sel); - } + ypos = item->paint(selected == count); } else { diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index ced5f41c8..2dabedd5e 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -82,6 +82,13 @@ class CChangeObserver } }; +class CActivateObserver +{ + public: + virtual ~CActivateObserver(){} + virtual void activateNotify(const neutrino_locale_t /*OptionName*/) {} +}; + class CMenuTarget { protected: @@ -113,6 +120,7 @@ class CMenuItem std::string nameString; neutrino_locale_t desc; std::string descString; + CActivateObserver * actObserv; public: int height; bool active; @@ -180,6 +188,8 @@ class CMenuItem virtual void setDescription(const std::string& text); virtual void setDescription(const neutrino_locale_t text); virtual int getDescriptionHeight(void); + void setActivateObserver(CActivateObserver * Observ) { actObserv = Observ; } + void activateNotify(void); }; class CMenuSeparator : public CMenuItem