menu: add optional usage of toggle buttons to visualze options

Origin commit data
------------------
Branch: ni/coolstream
Commit: f0f4698984
Author: Thilo Graf <dbt@novatux.de>
Date: 2018-04-11 (Wed, 11 Apr 2018)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
2018-04-11 23:58:16 +02:00
committed by vanhofen
parent 45d3f67ec9
commit c277fa0f9a
2 changed files with 46 additions and 22 deletions

View File

@@ -76,7 +76,7 @@ CMenuItem::CMenuItem(bool Active, neutrino_msg_t DirectKey, const char * const I
setInfoIconRight(IconName_Info_right); setInfoIconRight(IconName_Info_right);
hintIcon = NULL; hintIcon = NULL;
has_option_icon = false;
x = -1; x = -1;
used = false; used = false;
hint = NONEXISTANT_LOCALE; hint = NONEXISTANT_LOCALE;
@@ -274,7 +274,9 @@ void CMenuItem::paintItemCaption(const bool select_mode, const char * right_text
} }
if (*right_text) { if (*right_text) {
stringstartposOption -= (icon_w == 0 ? 0 : icon_w + OFFSET_INNER_MID); stringstartposOption -= (icon_w == 0 ? 0 : icon_w + OFFSET_INNER_MID);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height - desc_height, dx - stringstartposOption + x - OFFSET_INNER_MID, right_text, item_color); if (!has_option_icon || icon_w == 0) //don't render text if we use an 'option icon'
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height - desc_height, dx - stringstartposOption + x - OFFSET_INNER_MID, right_text, item_color);
has_option_icon = false;
} }
} }
if (desc_text && *desc_text) if (desc_text && *desc_text)
@@ -539,6 +541,31 @@ void CMenuItem::activateNotify()
actObserv->activateNotify(name); actObserv->activateNotify(name);
} }
void CMenuItem::handleOptionIcon(const std::string& str_option)
{
std::string on = g_Locale->getText(LOCALE_OPTIONS_ON);
std::string off = g_Locale->getText(LOCALE_OPTIONS_OFF);
std::string yes = g_Locale->getText(LOCALE_MESSAGEBOX_YES);
std::string no = g_Locale->getText(LOCALE_MESSAGEBOX_NO);
if (str_option == on || str_option == off || str_option == yes || str_option == no){
if (str_option == on || str_option == yes)
setInfoIconRight(active ? NEUTRINO_ICON_BUTTON_OPTION_ON_ACTIVE : NEUTRINO_ICON_BUTTON_OPTION_ON_INACTIVE);
if (str_option == off || str_option == no)
setInfoIconRight(active ? NEUTRINO_ICON_BUTTON_OPTION_OFF_ACTIVE : NEUTRINO_ICON_BUTTON_OPTION_OFF_INACTIVE);
has_option_icon = true;
}else
setInfoIconRight(NULL);
}
const char* CMenuItem::getValName(const neutrino_locale_t& Option, const char* ValName)
{
if (ValName)
return ValName;
else
return g_Locale->getText(Option);
}
//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()
{ {
@@ -1726,6 +1753,9 @@ int CMenuOptionNumberChooser::paint(bool selected)
} }
} }
//manage toggle button
handleOptionIcon(l_option);
//paint item //paint item
prepareItem(selected, height); prepareItem(selected, height);
@@ -1935,7 +1965,7 @@ int CMenuOptionChooser::exec(CMenuTarget*)
{ {
CMenuOptionChooserOptions* co = new CMenuOptionChooserOptions(); CMenuOptionChooserOptions* co = new CMenuOptionChooserOptions();
co->key = options[i1].key; co->key = options[i1].key;
co->valname = (options[i1].valname != 0) ? options[i1].valname : g_Locale->getText(options[i1].value); co->valname = getValName(options[i1].value, options[i1].valname );
option_chooser_options_v.push_back(co); option_chooser_options_v.push_back(co);
} }
@@ -1966,11 +1996,8 @@ int CMenuOptionChooser::exec(CMenuTarget*)
const char * l_option; const char * l_option;
if (options[count].key == (*optionValue)) if (options[count].key == (*optionValue))
selected = true; selected = true;
l_option = getValName(options[count].value, options[count].valname);
if(options[count].valname != 0)
l_option = options[count].valname;
else
l_option = g_Locale->getText(options[count].value);
CMenuForwarder *mn_option = new CMenuForwarder(l_option, true, NULL, selector, to_string(count).c_str()); CMenuForwarder *mn_option = new CMenuForwarder(l_option, true, NULL, selector, to_string(count).c_str());
mn_option->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true /*for selected item*/); mn_option->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true /*for selected item*/);
menu->addItem(mn_option, selected); menu->addItem(mn_option, selected);
@@ -2017,33 +2044,27 @@ int CMenuOptionChooser::exec(CMenuTarget*)
int CMenuOptionChooser::paint( bool selected) int CMenuOptionChooser::paint( bool selected)
{ {
neutrino_locale_t option = NONEXISTANT_LOCALE;
const char * l_option = NULL; const char * l_option = NULL;
for(unsigned int count = 0 ; count < number_of_options; count++) { for(unsigned int count = 0 ; count < number_of_options; count++) {
if (options[count].key == *optionValue) { if (options[count].key == *optionValue) {
option = options[count].value; l_option = getValName(options[count].value, options[count].valname);
if(options[count].valname != 0)
l_option = options[count].valname;
else
l_option = g_Locale->getText(option);
break; break;
} }
} }
if(l_option == NULL) if(l_option == NULL)
{ {
*optionValue = options[0].key; *optionValue = options[0].key;
option = options[0].value; l_option = getValName(options[0].value, options[0].valname);
if(options[0].valname != 0)
l_option = options[0].valname;
else
l_option = g_Locale->getText(option);
} }
//manage toggle button
handleOptionIcon(l_option);
//paint item //paint item
prepareItem(selected, height); prepareItem(selected, height);
//paint item icon //paint item icon
paintItemButton(selected, height, NEUTRINO_ICON_BUTTON_OKAY); paintItemButton(selected, height, NEUTRINO_ICON_BUTTON_OKAY);

View File

@@ -126,6 +126,10 @@ class CMenuItem : public CComponentsSignals
neutrino_locale_t desc; neutrino_locale_t desc;
std::string descString; std::string descString;
CActivateObserver * actObserv; CActivateObserver * actObserv;
bool has_option_icon;
void handleOptionIcon(const std::string& str_option);
const char* getValName(const neutrino_locale_t& Option, const char* ValName);
public: public:
int height; int height;
bool active, current_active; bool active, current_active;
@@ -442,7 +446,6 @@ class CMenuOptionChooser : public CAbstractMenuOptionChooser
bool OptionsSort bool OptionsSort
); );
public: public:
CMenuOptionChooser(const neutrino_locale_t Name, int * const OptionValue, const struct keyval * const Options, CMenuOptionChooser(const neutrino_locale_t Name, int * const OptionValue, const struct keyval * const Options,
const size_t Number_Of_Options, const bool Active = false, CChangeObserver * const Observ = NULL, const size_t Number_Of_Options, const bool Active = false, CChangeObserver * const Observ = NULL,