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;
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
{

View File

@@ -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