From dbe50dc9c434a66c5b6134603797e01e0be79e54 Mon Sep 17 00:00:00 2001 From: thilo Date: Wed, 2 Feb 2011 21:42:40 +0000 Subject: [PATCH] neutrino: fix audio shortcut, - moved subtitle handling to audioplayer, - neutrino_menue: changed object handling in mediaplayer forwarder - mediaplayer: usage modes added user can now open the mediaplayer menu with audio button, repeatedly pressing as usual the audio button starts up the audio player, button 'W' starts the internet player. git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@1106 e54a6e83-5905-42d5-8d5c-058d10e6a962 --- src/gui/audioplayer.cpp | 4 +++ src/gui/mediaplayer.cpp | 72 +++++++++++++++++++++++++++++++++-------- src/gui/mediaplayer.h | 14 ++++++-- src/neutrino.cpp | 13 +++++--- src/neutrino_menue.cpp | 3 +- 5 files changed, 84 insertions(+), 22 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index f51f4b733..7878f1618 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -244,6 +244,8 @@ CAudioPlayerGui::~CAudioPlayerGui() //------------------------------------------------------------------------ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &) { + CNeutrinoApp::getInstance()->StopSubtitles(); + CAudioPlayer::getInstance()->init(); m_state = CAudioPlayerGui::STOP; @@ -334,6 +336,8 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &) CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , m_LastMode ); g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR, 0 ); + CNeutrinoApp::getInstance()->StartSubtitles(); + // always exit all return menu_return::RETURN_EXIT_ALL; } diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index c8d819ea6..08a1d8da1 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -52,16 +52,31 @@ CMediaPlayerMenu::CMediaPlayerMenu() { frameBuffer = CFrameBuffer::getInstance(); + + setMenuTitel(); + setUsageMode(); width = w_max (40, 10); //% hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); height = hheight+13*mheight+ 10; selected = -1; + x = getScreenStartX (width); y = getScreenStartY (height); } +CMediaPlayerMenu* CMediaPlayerMenu::getInstance() +{ + static CMediaPlayerMenu* mpm = NULL; + + if(!mpm) { + mpm = new CMediaPlayerMenu(); + printf("[neutrino] mediaplayer menu instance created\n"); + } + return mpm; +} + CMediaPlayerMenu::~CMediaPlayerMenu() { @@ -69,13 +84,13 @@ CMediaPlayerMenu::~CMediaPlayerMenu() int CMediaPlayerMenu::exec(CMenuTarget* parent, const std::string &/*actionKey*/) { - dprintf(DEBUG_DEBUG, "init mediaplayer menu\n"); + printf("init mediaplayer menu in usage mode %d\n", usage_mode); int res = menu_return::RETURN_REPAINT; if (parent) parent->hide(); - showMenu(); + showMenu(); return res; } @@ -89,32 +104,63 @@ void CMediaPlayerMenu::hide() void CMediaPlayerMenu::showMenu() { //menue init - CMenuWidget *media = new CMenuWidget(LOCALE_MAINMENU_MEDIA, NEUTRINO_ICON_MULTIMEDIA, width); - + CMenuWidget *media = new CMenuWidget(menu_title, NEUTRINO_ICON_MULTIMEDIA, width); media->setSelected(selected); - media->addIntroItems(); //audio player - media->addItem(new CMenuForwarder(LOCALE_MAINMENU_AUDIOPLAYER, true, NULL, new CAudioPlayerGui(), NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); + neutrino_msg_t audio_rc = usage_mode == MODE_AUDIO ? CRCInput::RC_audio:CRCInput::RC_red; + const char* audio_btn = usage_mode == MODE_AUDIO ? "" : NEUTRINO_ICON_BUTTON_RED; + CMenuForwarder * fw_audio = new CMenuForwarder(LOCALE_MAINMENU_AUDIOPLAYER, true, NULL, new CAudioPlayerGui(), NULL, audio_rc, audio_btn); //internet player - media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, new CAudioPlayerGui(true), NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - + neutrino_msg_t inet_rc = usage_mode == MODE_AUDIO ? CRCInput::RC_www : CRCInput::RC_green; + const char* inet_btn = usage_mode == MODE_AUDIO ? "" : NEUTRINO_ICON_BUTTON_GREEN; + CMenuForwarder * fw_inet = new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, new CAudioPlayerGui(true), NULL, inet_rc, inet_btn); + //movieplayer CMenuWidget *moviePlayer = new CMenuWidget(LOCALE_MAINMENU_MEDIA, NEUTRINO_ICON_MULTIMEDIA, width); - showMoviePlayer(moviePlayer); - media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); + CMenuForwarder * fw_mp = new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); //pictureviewer - media->addItem(new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); - + CMenuForwarder * fw_pviewer = new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + //upnp browser - media->addItem(new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, new CUpnpBrowserGui(), NULL, CRCInput::RC_0, NEUTRINO_ICON_BUTTON_0)); + CMenuForwarder * fw_upnp = new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, new CUpnpBrowserGui(), NULL, CRCInput::RC_0, NEUTRINO_ICON_BUTTON_0); + + media->addIntroItems(NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, usage_mode == MODE_AUDIO ? CMenuWidget::BTN_TYPE_CANCEL : CMenuWidget::BTN_TYPE_BACK); + + if (usage_mode == MODE_AUDIO) + { + //audio player + media->addItem(fw_audio); + + //internet player + media->addItem(fw_inet); + } + else + { + //audio player + media->addItem(fw_audio); + + //internet player + media->addItem(fw_inet); + + //movieplayer + showMoviePlayer(moviePlayer); + media->addItem(fw_mp); + + //pictureviewer + media->addItem(fw_pviewer); + + //upnp browser + media->addItem(fw_upnp); + } media->exec(NULL, ""); media->hide(); selected = media->getSelected(); delete media; + setUsageMode();//set default usage_mode } //show movieplayer submenu with selectable items for moviebrowser or filebrowser diff --git a/src/gui/mediaplayer.h b/src/gui/mediaplayer.h index e30f715bb..2a491b2e7 100644 --- a/src/gui/mediaplayer.h +++ b/src/gui/mediaplayer.h @@ -40,17 +40,27 @@ class CMediaPlayerMenu : public CMenuTarget private: CFrameBuffer *frameBuffer; - int x, y, width, height, hheight, mheight, selected; + int x, y, width, height, hheight, mheight, selected, usage_mode; + neutrino_locale_t menu_title; void hide(); void showMenu(); void showMoviePlayer(CMenuWidget *menu_movieplayer); - public: + enum MM_MENU_MODES + { + MODE_DEFAULT, + MODE_AUDIO, + }; + CMediaPlayerMenu(); ~CMediaPlayerMenu(); + static CMediaPlayerMenu* getInstance(); + int exec(CMenuTarget* parent, const std::string & actionKey); + void setMenuTitel(const neutrino_locale_t title = LOCALE_MAINMENU_MEDIA){menu_title = title;}; + void setUsageMode(const int& mm_mode = MODE_DEFAULT){usage_mode = mm_mode;}; }; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 70ff2e7fd..c8e898c49 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -94,6 +94,7 @@ #include "gui/osd_setup.h" #include "gui/color.h" #include "gui/customcolor.h" +#include "gui/mediaplayer.h" #include "gui/bedit/bouqueteditor_bouquets.h" #include "gui/bouquetlist.h" @@ -1747,7 +1748,6 @@ void CNeutrinoApp::SetupTiming() sprintf(g_settings.timing_string[i], "%d", g_settings.timing[i]); } -CAudioPlayerGui * audioPlayer; bool sectionsd_getActualEPGServiceKey(const t_channel_id uniqueServiceKey, CEPGData * epgdata); bool sectionsd_getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata); @@ -2550,10 +2550,11 @@ printf("[neutrino] direct record\n"); StartSubtitles(); } else if( (msg == CRCInput::RC_audio) && g_settings.audio_run_player) { - StopSubtitles(); - fprintf(stderr, "dbt broke the audioplayershortcut! :-)\n"); - //audioPlayer->exec(NULL, ""); - StartSubtitles(); + //open mediaplayer menu in audio mode, user can select between audioplayer and internetradio + CMediaPlayerMenu * media = CMediaPlayerMenu::getInstance(); + media->setMenuTitel(LOCALE_MAINMENU_AUDIOPLAYER); + media->setUsageMode(CMediaPlayerMenu::MODE_AUDIO); + media->exec(NULL, ""); } else if( msg == CRCInput::RC_video || msg == CRCInput::RC_play ) { bool show = true; @@ -4752,6 +4753,7 @@ void CNeutrinoApp::saveKeys(const char * fname) void CNeutrinoApp::StopSubtitles() { + printf("[neutrino] %s\n", __FUNCTION__); int ttx, dvbpid, ttxpid, ttxpage; dvbpid = dvbsub_getpid(); @@ -4767,6 +4769,7 @@ void CNeutrinoApp::StopSubtitles() void CNeutrinoApp::StartSubtitles() { + printf("[neutrino] %s\n", __FUNCTION__); dvbsub_start(0); tuxtx_pause_subtitle(false); } diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 0c6b9ba7f..827b48a92 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -194,8 +194,7 @@ void CNeutrinoApp::InitMainMenu(CMenuWidget &mainMenu, CMenuWidget &mainSettings mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_GAMES, true, NULL, new CPluginList(LOCALE_MAINMENU_GAMES,CPlugins::P_TYPE_GAME), "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); //multimedia menu - mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_MEDIA, true, NULL, new CMediaPlayerMenu(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); - + mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_MEDIA, true, NULL, CMediaPlayerMenu::getInstance(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE)); if (g_PluginList->hasPlugin(CPlugins::P_TYPE_SCRIPT)) mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_SCRIPTS, true, NULL, new CPluginList(LOCALE_MAINMENU_SCRIPTS,CPlugins::P_TYPE_SCRIPT), "",