*neutrino usermenu: move user menu to it's own modul

git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-beta@1640 e54a6e83-5905-42d5-8d5c-058d10e6a962
This commit is contained in:
thilo
2011-08-31 16:24:57 +00:00
parent f81f41400c
commit caa345b8c5
6 changed files with 504 additions and 371 deletions

View File

@@ -86,6 +86,7 @@ libneutrino_gui_a_SOURCES = \
themes.cpp \ themes.cpp \
timeosd.cpp \ timeosd.cpp \
update.cpp \ update.cpp \
user_menue.cpp \
user_menue_setup.cpp \ user_menue_setup.cpp \
vfd_setup.cpp \ vfd_setup.cpp \
videosettings.cpp \ videosettings.cpp \

448
src/gui/user_menue.cpp Normal file
View File

@@ -0,0 +1,448 @@
/*
user_menue setup implementation - Neutrino-GUI
based up implementation by Günther
Copyright (C) 2001 Steffen Hehn 'McClean'
and some other guys
Homepage: http://dbox.cyberphoria.org/
Rework
Copyright (C) 2011 T. Graf 'dbt'
Homepage: http://www.dbox2-tuning.net/
License: GPL
This program is free software; you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program;
if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
NOTE for ignorant distributors:
It's not allowed to distribute any compiled parts of this code, if you don't accept the terms of GPL.
Please read it and understand it right!
This means for you: Hold it, if not, leave it! You could face legal action!
Otherwise ask the copyright owners, anything else would be theft!
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "gui/user_menue.h"
#include "gui/user_menue_setup.h"
#include "gui/subchannel_select.h"
#include "gui/favorites.h"
#include "gui/audio_select.h"
#include "gui/streaminfo2.h"
#include "gui/epgplus.h"
#include "gui/movieplayer.h"
#include "gui/timerlist.h"
#include "gui/plugins.h"
#include "gui/imageinfo.h"
#include "gui/dboxinfo.h"
#include "gui/cam_menu.h"
#include <global.h>
#include <neutrino.h>
#include <mymenu.h>
#include <gui/widget/icons.h>
#include <driver/record.h>
#include <driver/screen_max.h>
#include <daemonc/remotecontrol.h>
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
extern CPlugins * g_PluginList;
extern CCAMMenuHandler * g_CamHandler;
//
#include <system/debug.h>
CUserMenu::CUserMenu()
{
width = 0;
}
CUserMenu::~CUserMenu()
{
}
#define MAINMENU_RECORDING_OPTION_COUNT 2
const CMenuOptionChooser::keyval MAINMENU_RECORDING_OPTIONS[MAINMENU_RECORDING_OPTION_COUNT] =
{
{ 0, LOCALE_MAINMENU_RECORDING_START },
{ 1, LOCALE_MAINMENU_RECORDING_STOP }
};
// USERMENU
bool CUserMenu::showUserMenu(int button)
{
// set width
width = w_max (40, 10);
if (button < 0 || button >= COL_BUTTONMAX)
return false;
CMenuItem* menu_item = NULL;
CColorKeyHelper keyhelper;
//set default feature key
neutrino_msg_t key = CRCInput::RC_nokey;
const char * icon = NULL;
int dummy;
int menu_items = 0;
int menu_prev = -1;
// define classes
CFavorites* tmpFavorites = NULL;
CPauseSectionsdNotifier* tmpPauseSectionsdNotifier = NULL;
CAudioSelectMenuHandler* tmpAudioSelectMenuHandler = NULL;
CMenuWidget* tmpNVODSelector = NULL;
CSubChannelSelectMenu subchanselect;
CStreamInfo2Handler* tmpStreamInfo2Handler = NULL;
CEventListHandler* tmpEventListHandler = NULL;
CEPGplusHandler* tmpEPGplusHandler = NULL;
CEPGDataHandler* tmpEPGDataHandler = NULL;
CTimerList* Timerlist = NULL;
CRCLock *rcLock = NULL;
CStreamFeaturesChangeExec *StreamFeaturesChanger = NULL;
CImageInfo *imageinfo = NULL;
CDBoxInfoWidget *boxinfo = NULL;
std::string txt = g_settings.usermenu_text[button];
neutrino_locale_t caption = user_menu[button].caption;
//ensure correct caption for yellow menue
if ( button == SNeutrinoSettings::BUTTON_YELLOW)
caption = g_RemoteControl->are_subchannels ? LOCALE_INFOVIEWER_SUBSERVICE : LOCALE_INFOVIEWER_SELECTTIME;
//ensure no empty caption
if ( txt.empty() )
txt = g_Locale->getText(caption);
CMenuWidget *menu = new CMenuWidget(txt.c_str() , user_menu[button].menu_icon_def, width);
if (menu == NULL)
return 0;
menu->setSelected(user_menu[button].selected);
//menu->addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL);
menu->addItem(GenericMenuSeparator);
// go through any postition number
for (int pos = 0; pos < SNeutrinoSettings::ITEM_MAX ; pos++) {
// now compare pos with the position of any item. Add this item if position is the same
switch (g_settings.usermenu[button][pos]) {
case SNeutrinoSettings::ITEM_NONE:
// do nothing
break;
case SNeutrinoSettings::ITEM_BAR:
if (menu_prev == -1 || menu_prev == SNeutrinoSettings::ITEM_BAR )
break;
menu->addItem(GenericMenuSeparatorLine);
menu_prev = SNeutrinoSettings::ITEM_BAR;
break;
case SNeutrinoSettings::ITEM_FAVORITS:
{
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_FAVORITS;
tmpFavorites = new CFavorites;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_FAVORITES_MENUEADD, true, NULL, tmpFavorites, "-1", key, icon);
menu->addItem(menu_item, false);
break;
}
case SNeutrinoSettings::ITEM_RECORD:
{
if (g_settings.recording_type == RECORDING_OFF)
break;
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_RECORD;
keyhelper.get(&key,&icon,CRCInput::RC_red);
#if 1 //NEW, show menu, how better ?
menu_item = new CMenuForwarder(LOCALE_MAINMENU_RECORDING, true, NULL, CRecordManager::getInstance(), "-1", key, icon);
#else //OLD, show start/stop chooser
menu_item = new CMenuOptionChooser(LOCALE_MAINMENU_RECORDING, &CRecordManager::getInstance()->recordingstatus,
MAINMENU_RECORDING_OPTIONS, MAINMENU_RECORDING_OPTION_COUNT, true,
CRecordManager::getInstance(), key, icon);
#endif
menu->addItem(menu_item, false);
//if(has_hdd)
// menu->addItem(new CMenuForwarder(LOCALE_EXTRA_AUTO_TO_RECORD, autoshift, NULL, CNeutrinoApp::getInstance(), "autolink"), false);
break;
}
case SNeutrinoSettings::ITEM_MOVIEPLAYER_MB:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_MOVIEPLAYER_MB;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_MOVIEBROWSER_HEAD, true, NULL, &CMoviePlayerGui::getInstance(), "tsmoviebrowser", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_TIMERLIST:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_TIMERLIST;
keyhelper.get(&key,&icon,CRCInput::RC_yellow);
Timerlist = new CTimerList();
menu_item = new CMenuForwarder(LOCALE_TIMERLIST_NAME, true, NULL, Timerlist, "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_REMOTE:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_REMOTE;
keyhelper.get(&key,&icon,CRCInput::RC_nokey);
rcLock = new CRCLock();
menu_item = new CMenuForwarder(LOCALE_RCLOCK_MENUEADD, true, NULL, rcLock, "-1" , key, icon );
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_SUPER:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_SUPER;
tmpEPGplusHandler = new CEPGplusHandler();
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EPGPLUS , true, NULL, tmpEPGplusHandler , "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_LIST:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_LIST;
tmpEventListHandler = new CEventListHandler();
keyhelper.get(&key,&icon,CRCInput::RC_red);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EVENTLIST , true, NULL, tmpEventListHandler, "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_INFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_INFO;
tmpEPGDataHandler = new CEPGDataHandler();
keyhelper.get(&key,&icon,CRCInput::RC_yellow);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EVENTINFO , true, NULL, tmpEPGDataHandler , "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_MISC:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_MISC;
dummy = g_Sectionsd->getIsScanningActive();
//dummy = sectionsd_scanning;
tmpPauseSectionsdNotifier = new CPauseSectionsdNotifier;
keyhelper.get(&key,&icon);
menu_item = new CMenuOptionChooser(LOCALE_MAINMENU_PAUSESECTIONSD, &dummy, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, tmpPauseSectionsdNotifier , key, icon );
menu->addItem(menu_item, false);
menu_items++;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(LOCALE_MAINMENU_CLEARSECTIONSD, true, NULL, CNeutrinoApp::getInstance(), "clearSectionsd", key,icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_AUDIO_SELECT:
//g_settings.audio_left_right_selectable || g_RemoteControl->current_PIDs.APIDs.size() > 1)
if (1) {
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_AUDIO_SELECT;
tmpAudioSelectMenuHandler = new CAudioSelectMenuHandler;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(LOCALE_AUDIOSELECTMENUE_HEAD, true, NULL, tmpAudioSelectMenuHandler, "-1", key,icon);
menu->addItem(menu_item, false);
}
break;
case SNeutrinoSettings::ITEM_SUBCHANNEL:
if (!(g_RemoteControl->subChannels.empty())) {
// NVOD/SubService- Kanal!
tmpNVODSelector = new CMenuWidget(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_HEAD, NEUTRINO_ICON_VIDEO);
if (subchanselect.getNVODMenu(tmpNVODSelector)) {
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_SUBCHANNEL;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_HEAD, true, NULL, tmpNVODSelector, "-1", key,icon);
menu->addItem(menu_item, false);
}
}
break;
case SNeutrinoSettings::ITEM_TECHINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_TECHINFO;
tmpStreamInfo2Handler = new CStreamInfo2Handler();
keyhelper.get(&key,&icon,CRCInput::RC_blue);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_STREAMINFO, true, NULL, tmpStreamInfo2Handler , "-1", key, icon );
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_PLUGIN:
{
char id[5];
int cnt = 0;
for (unsigned int count = 0; count < (unsigned int) g_PluginList->getNumberOfPlugins(); count++)
{
if (g_PluginList->getType(count)== CPlugins::P_TYPE_TOOL && !g_PluginList->isHidden(count))
{
sprintf(id, "%d", count);
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_PLUGIN;
//keyhelper.get(&key,&icon,CRCInput::RC_blue);
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarderNonLocalized(g_PluginList->getName(count), true, NULL, StreamFeaturesChanger, id, key, icon);
//menu->addItem(menu_item, (cnt == 0));
menu->addItem(menu_item, 0);
cnt++;
}
}
}
break;
case SNeutrinoSettings::ITEM_VTXT:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_VTXT;
keyhelper.get(&key,&icon, CRCInput::RC_blue);
StreamFeaturesChanger = new CStreamFeaturesChangeExec();
menu_item = new CMenuForwarder(LOCALE_USERMENU_ITEM_VTXT, true, NULL, StreamFeaturesChanger, "teletext", key, icon);
menu->addItem(menu_item, 0);
break;
case SNeutrinoSettings::ITEM_IMAGEINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_IMAGEINFO;
imageinfo = new CImageInfo();
keyhelper.get(&key,&icon);
menu->addItem(new CMenuForwarder(LOCALE_SERVICEMENU_IMAGEINFO, true, NULL, imageinfo, NULL, key, icon ), false);
break;
case SNeutrinoSettings::ITEM_BOXINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_BOXINFO;
boxinfo = new CDBoxInfoWidget();
keyhelper.get(&key,&icon);
menu->addItem( new CMenuForwarder(LOCALE_EXTRA_DBOXINFO, true, NULL, boxinfo, NULL, key, icon));
break;
case SNeutrinoSettings::ITEM_CAM:
//if(cs_get_revision() != 10)
{
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_CAM;
keyhelper.get(&key,&icon);
menu->addItem(new CMenuForwarder(LOCALE_CI_SETTINGS, true, NULL, g_CamHandler, NULL, key, icon));
}
break;
#if 0 // FIXME not supported yet
case SNeutrinoSettings::ITEM_MOVIEPLAYER_TS:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_MOVIEPLAYER_TS;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_MOVIEPLAYER_TSPLAYBACK, true, NULL, moviePlayerGui, "tsplayback", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_VTXT:
for (unsigned int count = 0; count < (unsigned int) g_PluginList->getNumberOfPlugins(); count++)
{
std::string tmp = g_PluginList->getName(count);
if (g_PluginList->getType(count)== CPlugins::P_TYPE_TOOL && !g_PluginList->isHidden(count) && tmp.find("Teletext") != std::string::npos)
{
sprintf(id, "%d", count);
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_VTXT;
//keyhelper.get(&key,&icon,CRCInput::RC_blue);
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarderNonLocalized(g_PluginList->getName(count), true, NULL, StreamFeaturesChanger, id, key, icon);
menu->addItem(menu_item, 0);
}
}
break;
#endif
default:
printf("[neutrino] WARNING! menu wrong item!!\n");
break;
}
}
// Allow some tailoring for privat image bakers ;)
if (button == SNeutrinoSettings::BUTTON_RED) {
}
else if ( button == SNeutrinoSettings::BUTTON_GREEN) {
}
else if ( button == SNeutrinoSettings::BUTTON_YELLOW) {
}
else if ( button == SNeutrinoSettings::BUTTON_BLUE) {
#ifdef _EXPERIMENTAL_SETTINGS_
//Experimental Settings
if (menu_prev != -1)
menu->addItem(GenericMenuSeparatorLine);
menu_items ++;
menu_key++;
// FYI: there is a memory leak with 'new CExperimentalSettingsMenuHandler()
menu_item = new CMenuForwarder(LOCALE_EXPERIMENTALSETTINGS, true, NULL, new CExperimentalSettingsMenuHandler(), "-1", CRCInput::convertDigitToKey(menu_key));
menu->addItem(menu_item, false);
#endif
}
// show menu if there are more than 2 items only
// otherwise, we start the item directly (must be the last one)
if (menu_items > 1 ) {
menu->exec(NULL,"");
}
else if (menu_item != NULL)
menu_item->exec( NULL );
user_menu[button].selected = menu->getSelected();
// restore mute symbol
//AudioMute(current_muted, true);
// clear the heap
if (tmpFavorites) delete tmpFavorites;
if (tmpPauseSectionsdNotifier) delete tmpPauseSectionsdNotifier;
if (tmpAudioSelectMenuHandler) delete tmpAudioSelectMenuHandler;
if (tmpNVODSelector) delete tmpNVODSelector;
if (tmpStreamInfo2Handler) delete tmpStreamInfo2Handler;
if (tmpEventListHandler) delete tmpEventListHandler;
if (tmpEPGplusHandler) delete tmpEPGplusHandler;
if (tmpEPGDataHandler) delete tmpEPGDataHandler;
if (Timerlist) delete Timerlist;
if (rcLock) delete rcLock;
if (StreamFeaturesChanger) delete StreamFeaturesChanger;
if (imageinfo) delete imageinfo;
if (boxinfo) delete boxinfo;
if (menu) delete menu;
return 0;
}
/**************************************************************************************
* changeNotify - features menu recording start / stop *
**************************************************************************************/
bool CUserMenu::changeNotify(const neutrino_locale_t OptionName, void * /*Data*/)
{
bool res = !CRecordManager::getInstance()->RecordingStatus() ? false:true;
if ((ARE_LOCALES_EQUAL(OptionName, LOCALE_MAINMENU_RECORDING_START)) || (ARE_LOCALES_EQUAL(OptionName, LOCALE_MAINMENU_RECORDING)))
{
CNeutrinoApp::getInstance()->exec(NULL, "handle_record");
if (CRecordManager::getInstance()->RecordingStatus())
res = false;
else
res = true;
}
return res;
}

View File

@@ -1,6 +1,4 @@
/* /*
$id$
user_menue setup implementation - Neutrino-GUI user_menue setup implementation - Neutrino-GUI
based up implementation by Günther based up implementation by Günther
@@ -8,25 +6,29 @@
and some other guys and some other guys
Homepage: http://dbox.cyberphoria.org/ Homepage: http://dbox.cyberphoria.org/
Rework
Copyright (C) 2011 T. Graf 'dbt' Copyright (C) 2011 T. Graf 'dbt'
Homepage: http://www.dbox2-tuning.net/ Homepage: http://www.dbox2-tuning.net/
License: GPL License: GPL
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify it under the terms of the GNU
it under the terms of the GNU General Public License as published by General Public License as published by the Free Software Foundation; either version 2 of the License,
the Free Software Foundation; either version 2 of the License, or or (at your option) any later version.
(at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
but WITHOUT ANY WARRANTY; without even the implied warranty of without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the See the GNU General Public License for more details.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
You should have received a copy of the GNU General Public License along with this program;
if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
NOTE for ignorant distributors:
It's not allowed to distribute any compiled parts of this code, if you don't accept the terms of GPL.
Please read it and understand it right!
This means for you: Hold it, if not, leave it! You could face legal action!
Otherwise ask the copyright owners, anything else would be theft!
*/ */
#ifndef __user_menue__ #ifndef __user_menue__
@@ -57,6 +59,22 @@ static user_menu_data_t user_menu[COL_BUTTONMAX]=
{LOCALE_INFOVIEWER_STREAMINFO , CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE , NEUTRINO_ICON_FEATURES, -1} {LOCALE_INFOVIEWER_STREAMINFO , CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE , NEUTRINO_ICON_FEATURES, -1}
}; };
// #define COL_BUTTONMAX SNeutrinoSettings::BUTTON_MAX
// const neutrino_msg_t col_key_helper_msg_def[COL_BUTTONMAX]={CRCInput::RC_red,CRCInput::RC_green,CRCInput::RC_yellow,CRCInput::RC_blue};
// const char * col_key_helper_icon_def[COL_BUTTONMAX]={NEUTRINO_ICON_BUTTON_RED,NEUTRINO_ICON_BUTTON_GREEN,NEUTRINO_ICON_BUTTON_YELLOW,NEUTRINO_ICON_BUTTON_BLUE};
class CUserMenu : public CChangeObserver
{
private:
int width;
bool changeNotify(const neutrino_locale_t OptionName, void *);
public:
CUserMenu();
~CUserMenu();
bool showUserMenu(int button);
};
// This is just a quick helper for the usermenu only. // This is just a quick helper for the usermenu only.
class CColorKeyHelper class CColorKeyHelper

View File

@@ -1974,12 +1974,8 @@ int CNeutrinoApp::run(int argc, char **argv)
g_PluginList->loadPlugins(); g_PluginList->loadPlugins();
APIDChanger = new CAPIDChangeExec; APIDChanger = new CAPIDChangeExec;
StreamFeaturesChanger = new CStreamFeaturesChangeExec;
MoviePluginChanger = new CMoviePluginChangeExec; MoviePluginChanger = new CMoviePluginChangeExec;
ConsoleDestinationChanger = new CConsoleDestChangeNotifier; ConsoleDestinationChanger = new CConsoleDestChangeNotifier;
rcLock = new CRCLock();
//USERMENU
Timerlist = new CTimerList;
// setup recording device // setup recording device
setupRecordingDevice(); setupRecordingDevice();
@@ -2167,7 +2163,7 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu)
{ {
neutrino_msg_t msg; neutrino_msg_t msg;
neutrino_msg_data_t data; neutrino_msg_data_t data;
dprintf(DEBUG_NORMAL, "initialized everything\n"); dprintf(DEBUG_NORMAL, "initialized everything\n");
g_PluginList->startPlugin("startup.cfg"); g_PluginList->startPlugin("startup.cfg");
@@ -2326,25 +2322,26 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu)
if(CRecordManager::getInstance()->RecordingStatus()) if(CRecordManager::getInstance()->RecordingStatus())
CRecordManager::getInstance()->ShowMenu(); CRecordManager::getInstance()->ShowMenu();
} }
else if( msg == CRCInput::RC_red ) { else if( msg == CRCInput::RC_red ) {
StopSubtitles(); StopSubtitles();
showUserMenu(SNeutrinoSettings::BUTTON_RED); usermenu.showUserMenu(SNeutrinoSettings::BUTTON_RED);
StartSubtitles(); StartSubtitles();
} }
else if( (msg == CRCInput::RC_green) || ((msg == CRCInput::RC_audio) && !g_settings.audio_run_player) ) else if( (msg == CRCInput::RC_green) || ((msg == CRCInput::RC_audio) && !g_settings.audio_run_player) )
{ {
StopSubtitles(); StopSubtitles();
showUserMenu(SNeutrinoSettings::BUTTON_GREEN); usermenu.showUserMenu(SNeutrinoSettings::BUTTON_GREEN);
StartSubtitles(); StartSubtitles();
} }
else if( msg == CRCInput::RC_yellow ) { // NVODs else if( msg == CRCInput::RC_yellow ) { // NVODs
StopSubtitles(); StopSubtitles();
showUserMenu(SNeutrinoSettings::BUTTON_YELLOW); usermenu.showUserMenu(SNeutrinoSettings::BUTTON_YELLOW);
StartSubtitles(); StartSubtitles();
} }
else if( msg == CRCInput::RC_blue ) { else if( msg == CRCInput::RC_blue ) {
StopSubtitles(); StopSubtitles();
showUserMenu(SNeutrinoSettings::BUTTON_BLUE); usermenu.showUserMenu(SNeutrinoSettings::BUTTON_BLUE);
StartSubtitles(); StartSubtitles();
} }
else if( (msg == CRCInput::RC_audio) && g_settings.audio_run_player) { else if( (msg == CRCInput::RC_audio) && g_settings.audio_run_player) {
@@ -2392,8 +2389,10 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu)
showInfo(); showInfo();
} }
} }
else if (msg == CRCInput::RC_timer) { else if (msg == CRCInput::RC_timer)
Timerlist->exec(NULL, ""); {
CTimerList Timerlist;
Timerlist.exec(NULL, "");
} }
else { else {
if (msg == CRCInput::RC_home) { if (msg == CRCInput::RC_home) {
@@ -3014,8 +3013,10 @@ _repeat:
delete[] (unsigned char*) data; delete[] (unsigned char*) data;
return messages_return::handled; return messages_return::handled;
} }
else if (msg == NeutrinoMessages::LOCK_RC) { else if (msg == NeutrinoMessages::LOCK_RC)
this->rcLock->exec(NULL,CRCLock::NO_USER_INPUT); {
CRCLock rcLock;
rcLock.exec(NULL,CRCLock::NO_USER_INPUT);
return messages_return::handled; return messages_return::handled;
} }
else if( msg == NeutrinoMessages::CHANGEMODE ) { else if( msg == NeutrinoMessages::CHANGEMODE ) {
@@ -3711,7 +3712,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey)
{ {
// printf("ac: %s\n", actionKey.c_str()); // printf("ac: %s\n", actionKey.c_str());
int returnval = menu_return::RETURN_REPAINT; int returnval = menu_return::RETURN_REPAINT;
if(actionKey == "help_recording") { if(actionKey == "help_recording") {
ShowLocalizedMessage(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMessageBox::mbrBack, CMessageBox::mbBack); ShowLocalizedMessage(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMessageBox::mbrBack, CMessageBox::mbBack);
} }
@@ -3871,7 +3872,6 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey)
g_Sectionsd->freeMemory(); g_Sectionsd->freeMemory();
} }
return returnval; return returnval;
} }
@@ -3880,11 +3880,12 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey)
**************************************************************************************/ **************************************************************************************/
bool CNeutrinoApp::changeNotify(const neutrino_locale_t OptionName, void * /*data*/) bool CNeutrinoApp::changeNotify(const neutrino_locale_t OptionName, void * /*data*/)
{ {
if (ARE_LOCALES_EQUAL(OptionName, LOCALE_LANGUAGESETUP_SELECT)) { if (ARE_LOCALES_EQUAL(OptionName, LOCALE_LANGUAGESETUP_SELECT))
{
g_Locale->loadLocale(g_settings.language); g_Locale->loadLocale(g_settings.language);
return true; return true;
} }
return false; return false;
} }
/************************************************************************************** /**************************************************************************************

View File

@@ -46,6 +46,7 @@
#include <gui/rc_lock.h> #include <gui/rc_lock.h>
#include <daemonc/remotecontrol.h> /* st_rmsg */ #include <daemonc/remotecontrol.h> /* st_rmsg */
#include <gui/user_menue.h>
#include <zapit/client/zapitclient.h> #include <zapit/client/zapitclient.h>
#include <string> #include <string>
@@ -115,6 +116,7 @@ private:
CConfigFile configfile; CConfigFile configfile;
CScanSettings scanSettings; CScanSettings scanSettings;
CUserMenu usermenu;
int network_dhcp; int network_dhcp;
int network_automatic_start; int network_automatic_start;
@@ -138,16 +140,10 @@ private:
bool pbBlinkChange; bool pbBlinkChange;
CColorSetupNotifier *colorSetupNotifier; CColorSetupNotifier *colorSetupNotifier;
CNetworkSetup *networksetup; CNetworkSetup *networksetup;
CStreamFeaturesChangeExec *StreamFeaturesChanger;
CMoviePluginChangeExec *MoviePluginChanger; CMoviePluginChangeExec *MoviePluginChanger;
COnekeyPluginChangeExec *OnekeyPluginChanger; COnekeyPluginChangeExec *OnekeyPluginChanger;
CIPChangeNotifier *MyIPChanger; CIPChangeNotifier *MyIPChanger;
CConsoleDestChangeNotifier *ConsoleDestinationChanger; CConsoleDestChangeNotifier *ConsoleDestinationChanger;
CRCLock *rcLock;
// USERMENU
CTimerList *Timerlist;
bool showUserMenu(int button);
void firstChannel(); void firstChannel();
void setupNetwork( bool force= false ); void setupNetwork( bool force= false );
@@ -201,8 +197,8 @@ public:
//callback stuff only.... //callback stuff only....
int exec(CMenuTarget* parent, const std::string & actionKey); int exec(CMenuTarget* parent, const std::string & actionKey);
//onchange // //onchange
bool changeNotify(const neutrino_locale_t OptionName, void *); bool changeNotify(const neutrino_locale_t OptionName, void *);
int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data); int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data);

View File

@@ -73,17 +73,13 @@
#include "gui/sleeptimer.h" #include "gui/sleeptimer.h"
#include "gui/software_update.h" #include "gui/software_update.h"
#include <gui/streaminfo2.h> #include <gui/streaminfo2.h>
#include "gui/subchannel_select.h"
#ifdef TEST_MENU #ifdef TEST_MENU
#include "gui/test_menu.h" #include "gui/test_menu.h"
#endif /*TEST_MENU*/ #endif /*TEST_MENU*/
#include "gui/update.h" #include "gui/update.h"
#include "gui/user_menue.h"
#include "gui/vfd_setup.h" #include "gui/vfd_setup.h"
#include <driver/record.h> #include <driver/record.h>
//#include "gui/widget/stringinput.h"
//#include "gui/widget/stringinput_ext.h"
extern CPlugins * g_PluginList; extern CPlugins * g_PluginList;
extern CRemoteControl * g_RemoteControl; extern CRemoteControl * g_RemoteControl;
@@ -275,330 +271,3 @@ void CNeutrinoApp::InitServiceSettings(CMenuWidget &service)
#define MAINMENU_RECORDING_OPTION_COUNT 2
const CMenuOptionChooser::keyval MAINMENU_RECORDING_OPTIONS[MAINMENU_RECORDING_OPTION_COUNT] =
{
{ 0, LOCALE_MAINMENU_RECORDING_START },
{ 1, LOCALE_MAINMENU_RECORDING_STOP }
};
// USERMENU
bool CNeutrinoApp::showUserMenu(int button)
{
if (button < 0 || button >= COL_BUTTONMAX)
return false;
CMenuItem* menu_item = NULL;
CColorKeyHelper keyhelper;
neutrino_msg_t key = CRCInput::RC_nokey;
const char * icon = NULL;
int dummy;
int menu_items = 0;
int menu_prev = -1;
// define classes
CFavorites* tmpFavorites = NULL;
CPauseSectionsdNotifier* tmpPauseSectionsdNotifier = NULL;
CAudioSelectMenuHandler* tmpAudioSelectMenuHandler = NULL;
CMenuWidget* tmpNVODSelector = NULL;
CSubChannelSelectMenu subchanselect;
CStreamInfo2Handler* tmpStreamInfo2Handler = NULL;
CEventListHandler* tmpEventListHandler = NULL;
CEPGplusHandler* tmpEPGplusHandler = NULL;
CEPGDataHandler* tmpEPGDataHandler = NULL;
std::string txt = g_settings.usermenu_text[button];
neutrino_locale_t caption = user_menu[button].caption;
//ensure correct caption for yellow menue
if ( button == SNeutrinoSettings::BUTTON_YELLOW)
caption = g_RemoteControl->are_subchannels ? LOCALE_INFOVIEWER_SUBSERVICE : LOCALE_INFOVIEWER_SELECTTIME;
if ( txt.empty() )
txt = g_Locale->getText(caption);
CMenuWidget *menu = new CMenuWidget(txt.c_str() , user_menu[button].menu_icon_def, 35);
if (menu == NULL)
return 0;
menu->setSelected(user_menu[button].selected);
//menu->addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL);
menu->addItem(GenericMenuSeparator);
// go through any postition number
for (int pos = 0; pos < SNeutrinoSettings::ITEM_MAX ; pos++) {
// now compare pos with the position of any item. Add this item if position is the same
switch (g_settings.usermenu[button][pos]) {
case SNeutrinoSettings::ITEM_NONE:
// do nothing
break;
case SNeutrinoSettings::ITEM_BAR:
if (menu_prev == -1 || menu_prev == SNeutrinoSettings::ITEM_BAR )
break;
menu->addItem(GenericMenuSeparatorLine);
menu_prev = SNeutrinoSettings::ITEM_BAR;
break;
case SNeutrinoSettings::ITEM_FAVORITS:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_FAVORITS;
tmpFavorites = new CFavorites;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_FAVORITES_MENUEADD, true, NULL, tmpFavorites, "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_RECORD:
if (g_settings.recording_type == RECORDING_OFF)
break;
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_RECORD;
keyhelper.get(&key,&icon,CRCInput::RC_red);
#if 1 //NEW, show menu, how better ?
menu_item = new CMenuForwarder(LOCALE_MAINMENU_RECORDING, true, NULL, CRecordManager::getInstance(), "-1", key, icon);
#else //OLD, show start/stop chooser
menu_item = new CMenuOptionChooser(LOCALE_MAINMENU_RECORDING, &CRecordManager::getInstance()->recordingstatus,
MAINMENU_RECORDING_OPTIONS, MAINMENU_RECORDING_OPTION_COUNT, true,
CRecordManager::getInstance(), key, icon);
#endif
menu->addItem(menu_item, false);
//if(has_hdd)
// menu->addItem(new CMenuForwarder(LOCALE_EXTRA_AUTO_TO_RECORD, autoshift, NULL, this, "autolink"), false);
break;
case SNeutrinoSettings::ITEM_MOVIEPLAYER_MB:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_MOVIEPLAYER_MB;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_MOVIEBROWSER_HEAD, true, NULL, &CMoviePlayerGui::getInstance(), "tsmoviebrowser", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_TIMERLIST:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_TIMERLIST;
keyhelper.get(&key,&icon,CRCInput::RC_yellow);
menu_item = new CMenuForwarder(LOCALE_TIMERLIST_NAME, true, NULL, Timerlist, "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_REMOTE:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_REMOTE;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(LOCALE_RCLOCK_MENUEADD, true, NULL, this->rcLock, "-1" , key, icon );
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_SUPER:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_SUPER;
tmpEPGplusHandler = new CEPGplusHandler();
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EPGPLUS , true, NULL, tmpEPGplusHandler , "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_LIST:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_LIST;
tmpEventListHandler = new CEventListHandler();
keyhelper.get(&key,&icon,CRCInput::RC_red);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EVENTLIST , true, NULL, tmpEventListHandler, "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_INFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_INFO;
tmpEPGDataHandler = new CEPGDataHandler();
keyhelper.get(&key,&icon,CRCInput::RC_yellow);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_EVENTINFO , true, NULL, tmpEPGDataHandler , "-1", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_EPG_MISC:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_EPG_MISC;
dummy = g_Sectionsd->getIsScanningActive();
//dummy = sectionsd_scanning;
tmpPauseSectionsdNotifier = new CPauseSectionsdNotifier;
keyhelper.get(&key,&icon);
menu_item = new CMenuOptionChooser(LOCALE_MAINMENU_PAUSESECTIONSD, &dummy, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, tmpPauseSectionsdNotifier , key, icon );
menu->addItem(menu_item, false);
menu_items++;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(LOCALE_MAINMENU_CLEARSECTIONSD, true, NULL, this, "clearSectionsd", key,icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_AUDIO_SELECT:
//g_settings.audio_left_right_selectable || g_RemoteControl->current_PIDs.APIDs.size() > 1)
if (1) {
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_AUDIO_SELECT;
tmpAudioSelectMenuHandler = new CAudioSelectMenuHandler;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(LOCALE_AUDIOSELECTMENUE_HEAD, true, NULL, tmpAudioSelectMenuHandler, "-1", key,icon);
menu->addItem(menu_item, false);
}
break;
case SNeutrinoSettings::ITEM_SUBCHANNEL:
if (!(g_RemoteControl->subChannels.empty())) {
// NVOD/SubService- Kanal!
tmpNVODSelector = new CMenuWidget(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_HEAD, NEUTRINO_ICON_VIDEO);
if (subchanselect.getNVODMenu(tmpNVODSelector)) {
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_SUBCHANNEL;
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarder(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_HEAD, true, NULL, tmpNVODSelector, "-1", key,icon);
menu->addItem(menu_item, false);
}
}
break;
case SNeutrinoSettings::ITEM_TECHINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_TECHINFO;
tmpStreamInfo2Handler = new CStreamInfo2Handler();
keyhelper.get(&key,&icon,CRCInput::RC_blue);
menu_item = new CMenuForwarder(LOCALE_EPGMENU_STREAMINFO, true, NULL, tmpStreamInfo2Handler , "-1", key, icon );
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_PLUGIN:
{
char id[5];
int cnt = 0;
for (unsigned int count = 0; count < (unsigned int) g_PluginList->getNumberOfPlugins(); count++)
{
std::string tmp = g_PluginList->getName(count);
if (g_PluginList->getType(count)== CPlugins::P_TYPE_TOOL && !g_PluginList->isHidden(count) && tmp.find("Teletext") == std::string::npos)
{
sprintf(id, "%d", count);
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_PLUGIN;
//keyhelper.get(&key,&icon,CRCInput::RC_blue);
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarderNonLocalized(g_PluginList->getName(count), true, NULL, StreamFeaturesChanger, id, key, icon);
//menu->addItem(menu_item, (cnt == 0));
menu->addItem(menu_item, 0);
cnt++;
}
}
}
break;
case SNeutrinoSettings::ITEM_VTXT:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_VTXT;
keyhelper.get(&key,&icon,CRCInput::RC_blue);
menu_item = new CMenuForwarder(LOCALE_USERMENU_ITEM_VTXT, true, NULL, StreamFeaturesChanger, "teletext", key, icon);
menu->addItem(menu_item, 0);
break;
case SNeutrinoSettings::ITEM_IMAGEINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_IMAGEINFO;
keyhelper.get(&key,&icon);
menu->addItem(new CMenuForwarder(LOCALE_SERVICEMENU_IMAGEINFO, true, NULL, new CImageInfo(), NULL, key, icon ), false);
break;
case SNeutrinoSettings::ITEM_BOXINFO:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_BOXINFO;
keyhelper.get(&key,&icon);
menu->addItem( new CMenuForwarder(LOCALE_EXTRA_DBOXINFO, true, NULL, new CDBoxInfoWidget, NULL, key, icon));
break;
case SNeutrinoSettings::ITEM_CAM:
//if(cs_get_revision() != 10)
{
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_CAM;
keyhelper.get(&key,&icon);
menu->addItem(new CMenuForwarder(LOCALE_CI_SETTINGS, true, NULL, g_CamHandler, NULL, key, icon));
}
break;
#if 0 // FIXME not supported yet
case SNeutrinoSettings::ITEM_MOVIEPLAYER_TS:
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_MOVIEPLAYER_TS;
keyhelper.get(&key,&icon,CRCInput::RC_green);
menu_item = new CMenuForwarder(LOCALE_MOVIEPLAYER_TSPLAYBACK, true, NULL, moviePlayerGui, "tsplayback", key, icon);
menu->addItem(menu_item, false);
break;
case SNeutrinoSettings::ITEM_VTXT:
for (unsigned int count = 0; count < (unsigned int) g_PluginList->getNumberOfPlugins(); count++)
{
std::string tmp = g_PluginList->getName(count);
if (g_PluginList->getType(count)== CPlugins::P_TYPE_TOOL && !g_PluginList->isHidden(count) && tmp.find("Teletext") != std::string::npos)
{
sprintf(id, "%d", count);
menu_items++;
menu_prev = SNeutrinoSettings::ITEM_VTXT;
//keyhelper.get(&key,&icon,CRCInput::RC_blue);
keyhelper.get(&key,&icon);
menu_item = new CMenuForwarderNonLocalized(g_PluginList->getName(count), true, NULL, StreamFeaturesChanger, id, key, icon);
menu->addItem(menu_item, 0);
}
}
break;
#endif
default:
printf("[neutrino] WARNING! menu wrong item!!\n");
break;
}
}
// Allow some tailoring for privat image bakers ;)
if (button == SNeutrinoSettings::BUTTON_RED) {
}
else if ( button == SNeutrinoSettings::BUTTON_GREEN) {
}
else if ( button == SNeutrinoSettings::BUTTON_YELLOW) {
}
else if ( button == SNeutrinoSettings::BUTTON_BLUE) {
#ifdef _EXPERIMENTAL_SETTINGS_
//Experimental Settings
if (menu_prev != -1)
menu->addItem(GenericMenuSeparatorLine);
menu_items ++;
menu_key++;
// FYI: there is a memory leak with 'new CExperimentalSettingsMenuHandler()
menu_item = new CMenuForwarder(LOCALE_EXPERIMENTALSETTINGS, true, NULL, new CExperimentalSettingsMenuHandler(), "-1", CRCInput::convertDigitToKey(menu_key));
menu->addItem(menu_item, false);
#endif
}
// show menu if there are more than 2 items only
// otherwise, we start the item directly (must be the last one)
if (menu_items > 1 ) {
menu->exec(NULL,"");
}
else if (menu_item != NULL)
menu_item->exec( NULL );
user_menu[button].selected = menu->getSelected();
// restore mute symbol
//AudioMute(current_muted, true);
// clear the heap
if (tmpFavorites) delete tmpFavorites;
if (tmpPauseSectionsdNotifier) delete tmpPauseSectionsdNotifier;
if (tmpAudioSelectMenuHandler) delete tmpAudioSelectMenuHandler;
if (tmpNVODSelector) delete tmpNVODSelector;
if (tmpStreamInfo2Handler) delete tmpStreamInfo2Handler;
if (tmpEventListHandler) delete tmpEventListHandler;
if (tmpEPGplusHandler) delete tmpEPGplusHandler;
if (tmpEPGDataHandler) delete tmpEPGDataHandler;
if (menu) delete menu;
return 0;
}