From 3d187e56dab70df2ae859b395ef45f2578bca3f6 Mon Sep 17 00:00:00 2001 From: martii Date: Sun, 7 Apr 2013 15:05:43 +0200 Subject: [PATCH] CMenuWidget: add action keys Conflicts: src/gui/widget/menue.h --- src/gui/widget/menue.cpp | 33 +++++++++++++++++++++++++++++---- src/gui/widget/menue.h | 3 +++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index a24b7cf7e..db4a3ee53 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -519,6 +519,25 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if ( msg <= CRCInput::RC_MaxRC ) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + std::map::iterator it = keyActionMap.find(msg); + if (it != keyActionMap.end()) { + int rv = it->second.menue->exec(parent, it->second.action); + switch ( rv ) { + case menu_return::RETURN_EXIT_ALL: + retval = menu_return::RETURN_EXIT_ALL; + case menu_return::RETURN_EXIT: + msg = CRCInput::RC_timeout; + break; + case menu_return::RETURN_REPAINT: + case menu_return::RETURN_EXIT_REPAINT: + if (fade && washidden) + fader.StartFadeIn(); + checkHints(); + paint(); + break; + } + continue; + } for (unsigned int i= 0; i< items.size(); i++) { CMenuItem* titem = items[i]; if ((titem->directKey != CRCInput::RC_nokey) && (titem->directKey == msg)) { @@ -534,10 +553,10 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) } } #ifdef MARTII - if (msg == (uint32_t) g_settings.key_channelList_pageup) - msg = CRCInput::RC_page_up; - else if (msg == (uint32_t) g_settings.key_channelList_pagedown) - msg = CRCInput::RC_page_down; + if (msg == (uint32_t) g_settings.key_channelList_pageup) + msg = CRCInput::RC_page_up; + else if (msg == (uint32_t) g_settings.key_channelList_pagedown) + msg = CRCInput::RC_page_down; #endif } @@ -1147,6 +1166,12 @@ void CMenuWidget::paintHint(int pos) } +void CMenuWidget::addKey(neutrino_msg_t key, CMenuTarget *menue, const std::string & action) +{ + keyActionMap[key].menue = menue; + keyActionMap[key].action = action; +} + //------------------------------------------------------------------------------------------------------------------------------- CMenuOptionNumberChooser::CMenuOptionNumberChooser(const neutrino_locale_t name, int * const OptionValue, const bool Active, const int min_value, const int max_value, CChangeObserver * const Observ, const int print_offset, const int special_value, const neutrino_locale_t special_value_name, const char * non_localized_name, bool sliderOn) { diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 38e2db1f5..0c9b4deb5 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -435,6 +435,8 @@ class CMenuWidget : public CMenuTarget CFrameBuffer *frameBuffer; std::vector items; std::vector page_start; + struct keyAction { std::string action; CMenuTarget *menue; }; + std::map keyActionMap; std::string iconfile; int min_width; @@ -514,6 +516,7 @@ class CMenuWidget : public CMenuTarget MENU_POS_BOTTOM_LEFT , MENU_POS_BOTTOM_RIGHT }; + void addKey(neutrino_msg_t key, CMenuTarget *menue, const std::string &action); }; class CPINProtection