/* Neutrino graphlcd menue (c) 2012 by martii 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define __USE_FILE_OFFSET64 1 #include "filebrowser.h" #include #include #include #include #include #include #include #include #include #include #include "glcdsetup.h" #include #include #include #include "glcdthemes.h" static const CMenuOptionChooser::keyval STANDBY_CLOCK_OPTIONS[] = { { cGLCD::CLOCK_OFF, LOCALE_OPTIONS_OFF }, { cGLCD::CLOCK_SIMPLE, LOCALE_GLCD_STANDBY_CLOCK_SIMPLE }, { cGLCD::CLOCK_LED, LOCALE_GLCD_STANDBY_CLOCK_LED }, { cGLCD::CLOCK_LCD, LOCALE_GLCD_STANDBY_CLOCK_LCD }, { cGLCD::CLOCK_DIGITAL, LOCALE_GLCD_STANDBY_CLOCK_DIGITAL }, { cGLCD::CLOCK_ANALOG, LOCALE_GLCD_STANDBY_CLOCK_ANALOG } }; #define STANDBY_CLOCK_OPTION_COUNT (sizeof(STANDBY_CLOCK_OPTIONS)/sizeof(CMenuOptionChooser::keyval)) static const CMenuOptionChooser::keyval ALIGNMENT_OPTIONS[] = { { cGLCD::ALIGN_NONE, LOCALE_GLCD_ALIGN_NONE }, { cGLCD::ALIGN_LEFT, LOCALE_GLCD_ALIGN_LEFT }, { cGLCD::ALIGN_CENTER, LOCALE_GLCD_ALIGN_CENTER }, { cGLCD::ALIGN_RIGHT, LOCALE_GLCD_ALIGN_RIGHT } }; #define ALIGNMENT_OPTION_COUNT (sizeof(ALIGNMENT_OPTIONS)/sizeof(CMenuOptionChooser::keyval)) #if 0 #define KEY_GLCD_BLACK 0 #define KEY_GLCD_WHITE 1 #define KEY_GLCD_RED 2 #define KEY_GLCD_PINK 3 #define KEY_GLCD_PURPLE 4 #define KEY_GLCD_DEEPPURPLE 5 #define KEY_GLCD_INDIGO 6 #define KEY_GLCD_BLUE 7 #define KEY_GLCD_LIGHTBLUE 8 #define KEY_GLCD_CYAN 9 #define KEY_GLCD_TEAL 10 #define KEY_GLCD_GREEN 11 #define KEY_GLCD_LIGHTGREEN 12 #define KEY_GLCD_LIME 13 #define KEY_GLCD_YELLOW 14 #define KEY_GLCD_AMBER 15 #define KEY_GLCD_ORANGE 16 #define KEY_GLCD_DEEPORANGE 17 #define KEY_GLCD_BROWN 18 #define KEY_GLCD_GRAY 19 #define KEY_GLCD_BLUEGRAY 20 #define GLCD_COLOR_OPTION_COUNT 21 static const CMenuOptionChooser::keyval GLCD_COLOR_OPTIONS[GLCD_COLOR_OPTION_COUNT] = { { KEY_GLCD_BLACK, LOCALE_GLCD_COLOR_BLACK }, { KEY_GLCD_WHITE, LOCALE_GLCD_COLOR_WHITE }, { KEY_GLCD_RED, LOCALE_GLCD_COLOR_RED }, { KEY_GLCD_PINK, LOCALE_GLCD_COLOR_PINK }, { KEY_GLCD_PURPLE, LOCALE_GLCD_COLOR_PURPLE }, { KEY_GLCD_DEEPPURPLE, LOCALE_GLCD_COLOR_DEEPPURPLE }, { KEY_GLCD_INDIGO, LOCALE_GLCD_COLOR_INDIGO }, { KEY_GLCD_BLUE, LOCALE_GLCD_COLOR_BLUE }, { KEY_GLCD_LIGHTBLUE, LOCALE_GLCD_COLOR_LIGHTBLUE }, { KEY_GLCD_CYAN, LOCALE_GLCD_COLOR_CYAN }, { KEY_GLCD_TEAL, LOCALE_GLCD_COLOR_TEAL }, { KEY_GLCD_GREEN, LOCALE_GLCD_COLOR_GREEN }, { KEY_GLCD_LIGHTGREEN, LOCALE_GLCD_COLOR_LIGHTGREEN }, { KEY_GLCD_LIME, LOCALE_GLCD_COLOR_LIME }, { KEY_GLCD_YELLOW, LOCALE_GLCD_COLOR_YELLOW }, { KEY_GLCD_AMBER, LOCALE_GLCD_COLOR_AMBER }, { KEY_GLCD_ORANGE, LOCALE_GLCD_COLOR_ORANGE }, { KEY_GLCD_DEEPORANGE, LOCALE_GLCD_COLOR_DEEPORANGE }, { KEY_GLCD_BROWN, LOCALE_GLCD_COLOR_BROWN }, { KEY_GLCD_GRAY, LOCALE_GLCD_COLOR_GRAY }, { KEY_GLCD_BLUEGRAY, LOCALE_GLCD_COLOR_BLUEGRAY }, }; static const uint32_t colormap[GLCD_COLOR_OPTION_COUNT] = { GLCD::cColor::Black, GLCD::cColor::White, GLCD::cColor::Red, GLCD::cColor::Pink, GLCD::cColor::Purple, GLCD::cColor::DeepPurple, GLCD::cColor::Indigo, GLCD::cColor::Blue, GLCD::cColor::LightBlue, GLCD::cColor::Cyan, GLCD::cColor::Teal, GLCD::cColor::Green, GLCD::cColor::LightGreen, GLCD::cColor::Lime, GLCD::cColor::Yellow, GLCD::cColor::Amber, GLCD::cColor::Orange, GLCD::cColor::DeepOrange, GLCD::cColor::Brown, GLCD::cColor::Gray, GLCD::cColor::BlueGray }; int GLCD_Menu::color2index(uint32_t color) { for (int i = 0; i < GLCD_COLOR_OPTION_COUNT; i++) if (colormap[i] == color) return i; return KEY_GLCD_BLACK; } uint32_t GLCD_Menu::index2color(int i) { return (i < GLCD_COLOR_OPTION_COUNT) ? colormap[i] : GLCD::cColor::ERRCOL; } #endif GLCD_Menu::GLCD_Menu() { width = 40; select_driver = NULL; cdy = NULL; csh = NULL; csy = NULL; } int GLCD_Menu::exec(CMenuTarget *parent, const std::string &actionKey) { int res = menu_return::RETURN_REPAINT; cGLCD *cglcd = cGLCD::getInstance(); SNeutrinoGlcdTheme &t = g_settings.glcd_theme; if (parent) parent->hide(); if (actionKey == "rescan") { cglcd->Rescan(); return res; } else if (actionKey == "select_font") { CFileBrowser fileBrowser; CFileFilter fileFilter; fileFilter.addFilter("ttf"); fileBrowser.Filter = &fileFilter; if (fileBrowser.exec(FONTDIR) == true) { t.glcd_font = fileBrowser.getSelectedFile()->Name; cglcd->ReInitFont(); } return res; } else if (actionKey == "select_background") { CFileBrowser fileBrowser; CFileFilter fileFilter; fileFilter.addFilter("jpg"); fileFilter.addFilter("jpeg"); fileFilter.addFilter("png"); fileBrowser.Filter = &fileFilter; if (fileBrowser.exec(THEMESDIR"/oled") == true) t.glcd_background_image = fileBrowser.getSelectedFile()->Name; else t.glcd_background_image = ""; return res; } else if (actionKey == "brightness_default") { g_settings.glcd_brightness = GLCD_DEFAULT_BRIGHTNESS; g_settings.glcd_brightness_standby = GLCD_DEFAULT_BRIGHTNESS_STANDBY; g_settings.glcd_brightness_dim = GLCD_DEFAULT_BRIGHTNESS_DIM; g_settings.glcd_brightness_dim_time = GLCD_DEFAULT_BRIGHTNESS_DIM_TIME; cglcd->UpdateBrightness(); return res; } else if (actionKey == "select_driver") { return GLCD_Menu_Select_Driver(); } else if (actionKey == "theme_settings") { return GLCD_Theme_Settings(); } else if (actionKey == "brightness_settings") { return GLCD_Brightness_Settings(); } else if (actionKey == "standby_settings") { return GLCD_Standby_Settings(); } else if (actionKey == "glcd_logodir") { const char *action_str = "glcd_logodir"; chooserDir(g_settings.glcd_logodir, false, action_str); return menu_return::RETURN_REPAINT; } else { return GLCD_Menu_Settings(); } return res; } void GLCD_Menu::hide() { } bool GLCD_Menu::changeNotify(const neutrino_locale_t OptionName, void *Data) { if (!Data) return false; cGLCD *cglcd = cGLCD::getInstance(); cglcd->unlockChannel(); SNeutrinoGlcdTheme &t = g_settings.glcd_theme; ChannelLogoActivate.Activate(t.glcd_logo); TimeActivate.Activate(t.glcd_time); DurationActivate.Activate(t.glcd_duration); StartActivate.Activate(t.glcd_start); EndActivate.Activate(t.glcd_end); ProgressActivate.Activate(t.glcd_progressbar); WeatherActivate.Activate(t.glcd_weather); WeatherSBActivate.Activate(t.glcd_standby_weather); switch (OptionName) { case LOCALE_GLCD_CHANNEL_X_POSITION: case LOCALE_GLCD_CHANNEL_Y_POSITION: case LOCALE_GLCD_CHANNEL_SIZE: case LOCALE_GLCD_CHANNEL_ALIGN: cglcd->lockChannel(CNeutrinoApp::getInstance()->channelList->getActiveChannelName()); break; case LOCALE_GLCD_STANDBY_CLOCK: cdy->setActive(t.glcd_standby_clock == cGLCD::CLOCK_DIGITAL); csh->setActive(t.glcd_standby_clock == cGLCD::CLOCK_SIMPLE); csy->setActive(t.glcd_standby_clock == cGLCD::CLOCK_SIMPLE); break; case LOCALE_GLCD_ENABLE: if (g_settings.glcd_enable) cglcd->Resume(); else cglcd->Suspend(); return true; case LOCALE_GLCD_MIRROR_OSD: cglcd->MirrorOSD(*((int *) Data)); break; default: cglcd->Update(); break; } cglcd->Update(); return true; } int GLCD_Menu::GLCD_Menu_Settings() { int shortcut = 1; CMenuWidget *gms = new CMenuWidget(LOCALE_MAINSETTINGS_LCD, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_GLCD_SETTINGS); gms->addIntroItems(LOCALE_GLCD_HEAD); //sigc::slot0 slot_repaint = sigc::mem_fun(gms, &CMenuWidget::paint); // we want to repaint after changed Option gms->addItem(new CMenuOptionChooser(LOCALE_GLCD_ENABLE, &g_settings.glcd_enable, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::RC_red)); select_driver = new CMenuForwarder(LOCALE_GLCD_DISPLAY, (cGLCD::getInstance()->GetConfigSize() > 1), cGLCD::getInstance()->GetConfigName(g_settings.glcd_selected_config).c_str(), this, "select_driver", CRCInput::RC_green); gms->addItem(select_driver); gms->addItem(new CMenuForwarder(LOCALE_GLCD_THEME_SETTINGS, true, NULL, this, "theme_settings", CRCInput::RC_yellow)); gms->addItem(GenericMenuSeparatorLine); gms->addItem(new CMenuForwarder(LOCALE_GLCD_LOGODIR, true, g_settings.glcd_logodir, this, "glcd_logodir", CRCInput::convertDigitToKey(shortcut++))); gms->addItem(GenericMenuSeparator); gms->addItem(new CMenuForwarder(LOCALE_GLCD_BRIGHTNESS_SETTINGS, true, NULL, this, "brightness_settings", CRCInput::convertDigitToKey(shortcut++))); gms->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_SCROLL_SPEED, &g_settings.glcd_scroll_speed, true, 1, 63, this)); gms->addItem(new CMenuOptionChooser(LOCALE_GLCD_MIRROR_OSD, &g_settings.glcd_mirror_osd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::convertDigitToKey(shortcut++))); gms->addItem(new CMenuOptionChooser(LOCALE_GLCD_MIRROR_VIDEO, &g_settings.glcd_mirror_video, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this, CRCInput::convertDigitToKey(shortcut++))); gms->addItem(GenericMenuSeparatorLine); gms->addItem(new CMenuForwarder(LOCALE_GLCD_RESTART, true, NULL, this, "rescan", CRCInput::RC_blue)); int res = gms->exec(NULL, ""); delete gms; cGLCD::getInstance()->StandbyMode(false); return res; } int GLCD_Menu::GLCD_Standby_Settings() { cGLCD::getInstance()->StandbyMode(true); WeatherSBActivate.Clear(); CMenuOptionNumberChooser *nc; int oled_width = cGLCD::getInstance()->lcd->Width(); int oled_height = cGLCD::getInstance()->lcd->Height(); CMenuWidget *gss = new CMenuWidget(LOCALE_GLCD_HEAD, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_GLCD_STANDBY_SETTINGS); gss->addIntroItems(LOCALE_GLCD_STANDBY_SETTINGS); SNeutrinoGlcdTheme &t = g_settings.glcd_theme; CMenuOptionChooser *mc; mc = new CMenuOptionChooser(LOCALE_GLCD_STANDBY_CLOCK, &t.glcd_standby_clock, STANDBY_CLOCK_OPTIONS, STANDBY_CLOCK_OPTION_COUNT, true, this); //mc->setHint("", LOCALE_TODO); gss->addItem(mc); cdy = new CMenuOptionNumberChooser(LOCALE_GLCD_CLOCK_DIGITAL_Y_POSITION, &t.glcd_standby_clock_digital_y_position, (t.glcd_position_settings && t.glcd_standby_clock == cGLCD::CLOCK_DIGITAL), 0, 500, this); //cdy->setHint("", LOCALE_TODO); gss->addItem(cdy); csh = new CMenuOptionNumberChooser(LOCALE_GLCD_CLOCK_SIMPLE_SIZE, &t.glcd_standby_clock_simple_size, (t.glcd_position_settings && t.glcd_standby_clock == cGLCD::CLOCK_SIMPLE), 0, 100, this); //csh->setHint("", LOCALE_TODO); gss->addItem(csh); csy = new CMenuOptionNumberChooser(LOCALE_GLCD_CLOCK_SIMPLE_Y_POSITION, &t.glcd_standby_clock_simple_y_position, (t.glcd_position_settings && t.glcd_standby_clock == cGLCD::CLOCK_SIMPLE), 0, 500, this); //csy->setHint("", LOCALE_TODO); gss->addItem(csy); gss->addItem(GenericMenuSeparatorLine); mc = new CMenuOptionChooser(LOCALE_GLCD_STANDBY_WEATHER, &t.glcd_standby_weather, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); //mc->setHint("", LOCALE_TODO); gss->addItem(mc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_PERCENT, &t.glcd_standby_weather_percent, t.glcd_standby_weather, 0, 100, this); gss->addItem(nc); WeatherSBActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_CURR_TEMP_X_POSITION, &t.glcd_standby_weather_curr_temp_x_position, t.glcd_standby_weather, 0, oled_width, this); gss->addItem(nc); WeatherSBActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_CURR_ICON_X_POSITION, &t.glcd_standby_weather_curr_icon_x_position, t.glcd_standby_weather, 0, oled_width, this); gss->addItem(nc); WeatherSBActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_NEXT_TEMP_X_POSITION, &t.glcd_standby_weather_next_temp_x_position, t.glcd_standby_weather, 0, oled_width, this); gss->addItem(nc); WeatherSBActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_NEXT_ICON_X_POSITION, &t.glcd_standby_weather_next_icon_x_position, t.glcd_standby_weather, 0, oled_width, this); gss->addItem(nc); WeatherSBActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_STANDBY_WEATHER_Y_POSITION, &t.glcd_standby_weather_y_position, t.glcd_standby_weather, 0, oled_height, this); gss->addItem(nc); WeatherSBActivate.Add(nc); int res = gss->exec(NULL, ""); delete gss; cGLCD::getInstance()->StandbyMode(false); return res; } int GLCD_Menu::GLCD_Brightness_Settings() { CMenuWidget *gbs = new CMenuWidget(LOCALE_GLCD_HEAD, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_GLCD_BRIGHTNESS_SETTINGS); gbs->addIntroItems(LOCALE_GLCD_BRIGHTNESS_SETTINGS); CMenuOptionNumberChooser *mn; CMenuForwarder *mf; mn = new CMenuOptionNumberChooser(LOCALE_GLCD_BRIGHTNESS, &g_settings.glcd_brightness, true, 0, 10, this, CRCInput::RC_nokey, NULL, 0, 0, NONEXISTANT_LOCALE, true); //mn->setHint("", LOCALE_TODO); gbs->addItem(mn); mn = new CMenuOptionNumberChooser(LOCALE_GLCD_BRIGHTNESS_STANDBY, &g_settings.glcd_brightness_standby, !g_settings.shutdown_real, 0, 10, this, CRCInput::RC_nokey, NULL, 0, 0, NONEXISTANT_LOCALE, true); //mn->setHint("", LOCALE_TODO); gbs->addItem(mn); gbs->addItem(GenericMenuSeparatorLine); mn = new CMenuOptionNumberChooser(LOCALE_GLCD_BRIGHTNESS_DIM, &g_settings.glcd_brightness_dim, true, 0, 10, this, CRCInput::RC_nokey, NULL, 0, 0, NONEXISTANT_LOCALE, true); //mn->setHint("", LOCALE_TODO); gbs->addItem(mn); CStringInput *dim_time = new CStringInput(LOCALE_GLCD_BRIGHTNESS_DIM_TIME, &g_settings.glcd_brightness_dim_time, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789 "); mf = new CMenuForwarder(LOCALE_GLCD_BRIGHTNESS_DIM_TIME, true, g_settings.glcd_brightness_dim_time, dim_time); //mf->setHint("", LOCALE_TODO); gbs->addItem(mf); gbs->addItem(GenericMenuSeparatorLine); mf = new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, "brightness_default", CRCInput::RC_nokey); //mf->setHint("", LOCALE_TODO); gbs->addItem(mf); int res = gbs->exec(NULL, ""); delete dim_time; delete gbs; cGLCD::getInstance()->StandbyMode(false); return res; } int GLCD_Menu::GLCD_Theme_Settings() { CMenuWidget *gts = new CMenuWidget(LOCALE_GLCD_HEAD, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_GLCD_THEME_SETTINGS); gts->addIntroItems(LOCALE_GLCD_THEME_SETTINGS); ChannelLogoActivate.Clear(); TimeActivate.Clear(); DurationActivate.Clear(); StartActivate.Clear(); EndActivate.Clear(); ProgressActivate.Clear(); WeatherActivate.Clear(); CMenuOptionNumberChooser *nc; CMenuOptionChooser *oc; CMenuDForwarder *mf; CColorSetupNotifier *colorSetupNotifier = new CColorSetupNotifier(); cGLCD::getInstance()->SetCfgMode(true); SNeutrinoGlcdTheme &t = g_settings.glcd_theme; int oled_width = cGLCD::getInstance()->lcd->Width(); int oled_height = cGLCD::getInstance()->lcd->Height(); // choose theme gts->addItem(new CMenuForwarder(LOCALE_GLCD_THEME, true, NULL, CGLCDThemes::getInstance(), NULL, CRCInput::RC_red)); gts->addItem(GenericMenuSeparatorLine); // standby settings gts->addItem(new CMenuForwarder(LOCALE_GLCD_STANDBY_SETTINGS, true, NULL, this, "standby_settings", CRCInput::RC_green)); gts->addItem(GenericMenuSeparatorLine); // font, background image gts->addItem(new CMenuForwarder(LOCALE_GLCD_FONT, true, t.glcd_font, this, "select_font", CRCInput::RC_yellow)); gts->addItem(new CMenuForwarder(LOCALE_GLCD_BACKGROUND, true, t.glcd_background_image, this, "select_background", CRCInput::RC_blue)); gts->addItem(GenericMenuSeparatorLine); // colors CColorChooser *fg = new CColorChooser(LOCALE_GLCD_COLOR_FG, &t.glcd_foreground_color_red, &t.glcd_foreground_color_green, &t.glcd_foreground_color_blue, NULL, colorSetupNotifier); gts->addItem(new CMenuDForwarder(LOCALE_GLCD_COLOR_FG, true, NULL, fg)); CColorChooser *bg = new CColorChooser(LOCALE_GLCD_COLOR_BG, &t.glcd_background_color_red, &t.glcd_background_color_green, &t.glcd_background_color_blue, NULL, colorSetupNotifier); gts->addItem(new CMenuDForwarder(LOCALE_GLCD_COLOR_BG, true, NULL, bg)); gts->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_GLCD_POSITION_SETTINGS)); // channel name gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_CHANNEL_SIZE, &t.glcd_channel_percent, true, 0, 100, this)); gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_CHANNEL_ALIGN, &t.glcd_channel_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, true, NULL)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_CHANNEL_X_POSITION, &t.glcd_channel_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_CHANNEL_Y_POSITION, &t.glcd_channel_y_position, true, 0, oled_height, this)); gts->addItem(GenericMenuSeparator); // channel logo gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_LOGO_SHOW, &t.glcd_logo, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_LOGO_SIZE, &t.glcd_logo_percent, t.glcd_logo, 0, 100, this); gts->addItem(nc); ChannelLogoActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_LOGO_WIDTH, &t.glcd_logo_width_percent, t.glcd_logo, 0, 100, this); gts->addItem(nc); ChannelLogoActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_LOGO_X_POSITION, &t.glcd_logo_x_position, t.glcd_logo, 0, oled_width, this); gts->addItem(nc); ChannelLogoActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_LOGO_Y_POSITION, &t.glcd_logo_y_position, t.glcd_logo, 0, oled_height, this); gts->addItem(nc); ChannelLogoActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // event gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_EPG_SIZE, &t.glcd_epg_percent, true, 0, 100, this)); gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_EPG_ALIGN, &t.glcd_epg_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, true, NULL)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_EPG_X_POSITION, &t.glcd_epg_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_EPG_Y_POSITION, &t.glcd_epg_y_position, true, 0, oled_height, this)); gts->addItem(GenericMenuSeparatorLine); // event duration gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_DURATION_SHOW, &t.glcd_duration, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_DURATION_SIZE, &t.glcd_duration_percent, t.glcd_duration, 0, 100, this); gts->addItem(nc); DurationActivate.Add(nc); oc = new CMenuOptionChooser(LOCALE_GLCD_DURATION_ALIGN, &t.glcd_duration_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, t.glcd_duration, NULL); gts->addItem(oc); DurationActivate.Add(oc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_DURATION_X_POSITION, &t.glcd_duration_x_position, t.glcd_duration, 0, oled_width, this); gts->addItem(nc); DurationActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_DURATION_Y_POSITION, &t.glcd_duration_y_position, t.glcd_duration, 0, oled_height, this); gts->addItem(nc); DurationActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // event start gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_START_SHOW, &t.glcd_start, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_START_SIZE, &t.glcd_start_percent, t.glcd_start, 0, 100, this); gts->addItem(nc); StartActivate.Add(nc); oc = new CMenuOptionChooser(LOCALE_GLCD_START_ALIGN, &t.glcd_start_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, t.glcd_start, NULL); gts->addItem(oc); StartActivate.Add(oc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_START_X_POSITION, &t.glcd_start_x_position, t.glcd_start, 0, oled_width, this); gts->addItem(nc); StartActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_START_Y_POSITION, &t.glcd_start_y_position, t.glcd_start, 0, oled_height, this); gts->addItem(nc); StartActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // event end gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_END_SHOW, &t.glcd_end, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_END_SIZE, &t.glcd_end_percent, t.glcd_end, 0, 100, this); gts->addItem(nc); EndActivate.Add(nc); oc = new CMenuOptionChooser(LOCALE_GLCD_END_ALIGN, &t.glcd_end_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, t.glcd_end, NULL); gts->addItem(oc); EndActivate.Add(oc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_END_X_POSITION, &t.glcd_end_x_position, t.glcd_end, 0, oled_width, this); gts->addItem(nc); EndActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_END_Y_POSITION, &t.glcd_end_y_position, t.glcd_end, 0, oled_height, this); gts->addItem(nc); EndActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // progress bar gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_PROGRESSBAR_SHOW, &t.glcd_progressbar, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_PROGRESSBAR_SIZE, &t.glcd_progressbar_percent, t.glcd_progressbar, 0, 100, this); gts->addItem(nc); ProgressActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_PROGRESSBAR_WIDTH, &t.glcd_progressbar_width, t.glcd_progressbar, 0, oled_width, this); gts->addItem(nc); ProgressActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_PROGRESSBAR_X_POSITION, &t.glcd_progressbar_x_position, t.glcd_progressbar, 0, oled_width, this); gts->addItem(nc); ProgressActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_PROGRESSBAR_Y_POSITION, &t.glcd_progressbar_y_position, t.glcd_progressbar, 0, oled_height, this); gts->addItem(nc); ProgressActivate.Add(nc); CColorChooser *bar = new CColorChooser(LOCALE_GLCD_PROGRESSBAR_COLOR, &t.glcd_progressbar_color_red, &t.glcd_progressbar_color_green, &t.glcd_progressbar_color_blue, NULL, colorSetupNotifier); mf = new CMenuDForwarder(LOCALE_GLCD_PROGRESSBAR_COLOR, t.glcd_progressbar, NULL, bar); gts->addItem(mf); ProgressActivate.Add(mf); gts->addItem(GenericMenuSeparatorLine); // time gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_TIME_SHOW, &t.glcd_time, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_TIME_SIZE, &t.glcd_time_percent, t.glcd_time, 0, 100, this); gts->addItem(nc); TimeActivate.Add(nc); oc = new CMenuOptionChooser(LOCALE_GLCD_TIME_ALIGN, &t.glcd_time_align, ALIGNMENT_OPTIONS, ALIGNMENT_OPTION_COUNT, t.glcd_time, NULL); gts->addItem(oc); TimeActivate.Add(oc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_TIME_X_POSITION, &t.glcd_time_x_position, t.glcd_time, 0, oled_width, this); gts->addItem(nc); TimeActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_TIME_Y_POSITION, &t.glcd_time_y_position, t.glcd_time, 0, oled_height, this); gts->addItem(nc); TimeActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // weather gts->addItem(new CMenuOptionChooser(LOCALE_GLCD_WEATHER_SHOW, &t.glcd_weather, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_PERCENT, &t.glcd_weather_percent, t.glcd_weather, 0, 100, this); gts->addItem(nc); WeatherActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_CURR_TEMP_X_POSITION, &t.glcd_weather_curr_temp_x_position, t.glcd_weather, 0, oled_width, this); gts->addItem(nc); WeatherActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_CURR_ICON_X_POSITION, &t.glcd_weather_curr_icon_x_position, t.glcd_weather, 0, oled_width, this); gts->addItem(nc); WeatherActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_NEXT_TEMP_X_POSITION, &t.glcd_weather_next_temp_x_position, t.glcd_weather, 0, oled_width, this); gts->addItem(nc); WeatherActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_NEXT_ICON_X_POSITION, &t.glcd_weather_next_icon_x_position, t.glcd_weather, 0, oled_width, this); gts->addItem(nc); WeatherActivate.Add(nc); nc = new CMenuOptionNumberChooser(LOCALE_GLCD_WEATHER_Y_POSITION, &t.glcd_weather_y_position, t.glcd_weather, 0, oled_height, this); gts->addItem(nc); WeatherActivate.Add(nc); gts->addItem(GenericMenuSeparatorLine); // status markers gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_Y_PERCENT, &t.glcd_icons_percent, true, 0, 100, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_Y_POSITION, &t.glcd_icons_y_position, true, 0, oled_height, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_CAM_X_POSITION, &t.glcd_icon_cam_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_DD_X_POSITION, &t.glcd_icon_dd_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_ECM_X_POSITION, &t.glcd_icon_ecm_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_MUTE_X_POSITION, &t.glcd_icon_mute_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_REC_X_POSITION, &t.glcd_icon_rec_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_TIMER_X_POSITION, &t.glcd_icon_timer_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_TS_X_POSITION, &t.glcd_icon_ts_x_position, true, 0, oled_width, this)); gts->addItem(new CMenuOptionNumberChooser(LOCALE_GLCD_ICON_TXT_X_POSITION, &t.glcd_icon_txt_x_position, true, 0, oled_width, this)); int res = gts->exec(NULL, ""); delete colorSetupNotifier; delete gts; cGLCD::getInstance()->StandbyMode(false); cGLCD::getInstance()->SetCfgMode(false); return res; } int GLCD_Menu::GLCD_Menu_Select_Driver() { int select = 0; int res = menu_return::RETURN_NONE; if (cGLCD::getInstance()->GetConfigSize() > 1) { CMenuWidget *m = new CMenuWidget(LOCALE_GLCD_HEAD, NEUTRINO_ICON_SETTINGS); m->addIntroItems(LOCALE_GLCD_DISPLAY); CMenuSelectorTarget *selector = new CMenuSelectorTarget(&select); CMenuForwarder *mf; for (int i = 0; i < cGLCD::getInstance()->GetConfigSize(); i++) { mf = new CMenuForwarder(cGLCD::getInstance()->GetConfigName(i), true, NULL, selector, to_string(i).c_str()); mf->setInfoIconRight(i == g_settings.glcd_selected_config ? NEUTRINO_ICON_MARKER_DIALOG_OK : NULL); m->addItem(mf); } m->enableSaveScreen(); res = m->exec(NULL, ""); delete selector; if (!m->gotAction() || g_settings.glcd_selected_config == select) return res; } g_settings.glcd_selected_config = select; select_driver->setOption(cGLCD::getInstance()->GetConfigName(g_settings.glcd_selected_config).c_str()); cGLCD::getInstance()->Respawn(); return menu_return::RETURN_REPAINT; }