gui/widget/menue.cpp: add activate observer to notify when item become active

This commit is contained in:
[CST] Focus
2014-10-22 15:45:52 +04:00
parent 2af0d0c4ee
commit 2b50060bab
2 changed files with 25 additions and 11 deletions

View File

@@ -87,6 +87,7 @@ CMenuItem::CMenuItem(bool Active, neutrino_msg_t DirectKey, const char * const I
directKeyOK = true; directKeyOK = true;
selected_iconName = NULL; selected_iconName = NULL;
height = 0; height = 0;
actObserv = NULL;
} }
void CMenuItem::init(const int X, const int Y, const int DX, const int OFFX) 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; return height;
} }
void CMenuItem::activateNotify()
{
if (actObserv)
actObserv->activateNotify(name);
}
//small helper class to manage values e.g.: handling needed but deallocated widget objects //small helper class to manage values e.g.: handling needed but deallocated widget objects
CMenuGlobal::CMenuGlobal() 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]) { if (pos < page_start[current_page + 1] && pos >= page_start[current_page]) {
/* in current page */ /* in current page */
items[selected]->paint(false); items[selected]->paint(false);
item->activateNotify();
item->paint(true); item->paint(true);
paintHint(pos); paintHint(pos);
selected = pos; selected = pos;
@@ -1215,19 +1223,15 @@ void CMenuWidget::paintItems()
(count < page_start[current_page + 1])) (count < page_start[current_page + 1]))
{ {
item->init(x, ypos, width, iconOffset); item->init(x, ypos, width, iconOffset);
if( (item->isSelectable()) && (selected==-1) )
{ if (item->isSelectable() && selected == -1)
paintHint(count);
ypos = item->paint(true);
selected = count; selected = count;
if (selected == count) {
item->activateNotify();
paintHint(count);
} }
else ypos = item->paint(selected == count);
{
bool sel = selected==((signed int) count) ;
if(sel)
paintHint(count);
ypos = item->paint(sel);
}
} }
else else
{ {

View File

@@ -82,6 +82,13 @@ class CChangeObserver
} }
}; };
class CActivateObserver
{
public:
virtual ~CActivateObserver(){}
virtual void activateNotify(const neutrino_locale_t /*OptionName*/) {}
};
class CMenuTarget class CMenuTarget
{ {
protected: protected:
@@ -113,6 +120,7 @@ class CMenuItem
std::string nameString; std::string nameString;
neutrino_locale_t desc; neutrino_locale_t desc;
std::string descString; std::string descString;
CActivateObserver * actObserv;
public: public:
int height; int height;
bool active; bool active;
@@ -180,6 +188,8 @@ class CMenuItem
virtual void setDescription(const std::string& text); virtual void setDescription(const std::string& text);
virtual void setDescription(const neutrino_locale_t text); virtual void setDescription(const neutrino_locale_t text);
virtual int getDescriptionHeight(void); virtual int getDescriptionHeight(void);
void setActivateObserver(CActivateObserver * Observ) { actObserv = Observ; }
void activateNotify(void);
}; };
class CMenuSeparator : public CMenuItem class CMenuSeparator : public CMenuItem