From 11b33072510851f4e8f80cc9f58ede1e20098d6a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 4 Apr 2016 21:57:17 +0200 Subject: [PATCH 01/85] CMsgBox: rework msgbox classes with Window class implementation Replacing messagebox, hintbox_ext and some derivated parts with basic class hintbox and derivated class CMsgBox. This should unify window handling and avoids maintain of multiple classes with quasi same purpose and adds more functionality. TODO: fix and optimize details Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/dde298b1b72f11c67df276672e3860971b2896e9 Author: Thilo Graf Date: 2016-04-04 (Mon, 04 Apr 2016) --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + data/locale/nederlands.locale | 1 + src/driver/moviecut.cpp | 4 +- src/driver/record.cpp | 10 +- src/driver/screenshot.cpp | 2 +- src/gui/audioplayer.cpp | 6 +- src/gui/bedit/bouqueteditor_bouquets.cpp | 12 +- src/gui/bedit/bouqueteditor_channels.cpp | 4 +- src/gui/bookmarkmanager.cpp | 2 +- src/gui/bouquetlist.cpp | 6 +- src/gui/buildinfo.cpp | 2 +- src/gui/channellist.cpp | 12 +- src/gui/components/cc_frm.cpp | 59 +- src/gui/components/cc_frm.h | 27 +- src/gui/components/cc_frm_button.cpp | 18 +- src/gui/components/cc_frm_button.h | 27 +- src/gui/components/cc_frm_footer.cpp | 53 +- src/gui/components/cc_frm_footer.h | 38 +- src/gui/components/cc_frm_window.h | 5 + src/gui/components/cc_signals.h | 2 +- src/gui/components/cc_types.h | 4 +- src/gui/epgplus.cpp | 6 +- src/gui/epgview.cpp | 12 +- src/gui/eventlist.cpp | 6 +- src/gui/favorites.cpp | 8 +- src/gui/filebrowser.cpp | 4 +- src/gui/hdd_menu.cpp | 16 +- src/gui/keybind_setup.cpp | 4 +- src/gui/lua/lua_hintbox.cpp | 2 +- src/gui/lua/lua_menue.cpp | 2 +- src/gui/lua/lua_messagebox.cpp | 36 +- src/gui/lua/lua_messagebox.h | 2 +- src/gui/lua/lua_misc.cpp | 2 +- src/gui/lua/lua_video.cpp | 2 +- src/gui/miscsettings_menu.cpp | 4 +- src/gui/motorcontrol.cpp | 4 +- src/gui/moviebrowser/mb.cpp | 30 +- src/gui/moviebrowser/mb_help.h | 40 +- src/gui/movieplayer.cpp | 4 +- src/gui/network_setup.cpp | 28 +- src/gui/opkg_manager.cpp | 16 +- src/gui/personalize.cpp | 16 +- src/gui/pictureviewer.cpp | 57 +- src/gui/pipsetup.cpp | 2 +- src/gui/pluginlist.cpp | 6 +- src/gui/rc_lock.cpp | 9 +- src/gui/record_setup.cpp | 4 +- src/gui/scan.cpp | 4 +- src/gui/scan_setup.cpp | 2 +- src/gui/screensetup.cpp | 4 +- src/gui/settings_manager.cpp | 8 +- src/gui/start_wizard.cpp | 6 +- src/gui/test_menu.cpp | 171 +++- src/gui/test_menu.h | 2 +- src/gui/themes.cpp | 4 +- src/gui/timerlist.cpp | 14 +- src/gui/update.cpp | 34 +- src/gui/update_ext.cpp | 8 +- src/gui/upnpbrowser.cpp | 8 +- src/gui/user_menue_setup.cpp | 2 +- src/gui/videosettings.cpp | 4 +- src/gui/widget/Makefile.am | 2 - src/gui/widget/colorchooser.cpp | 4 +- src/gui/widget/helpbox.cpp | 216 ++-- src/gui/widget/helpbox.h | 111 +- src/gui/widget/hintbox.cpp | 615 ++++++----- src/gui/widget/hintbox.h | 220 ++-- src/gui/widget/keyboard_input.cpp | 4 +- src/gui/widget/messagebox.cpp | 38 +- src/gui/widget/messagebox.h | 2 + src/gui/widget/msgbox.cpp | 1176 ++++++++-------------- src/gui/widget/msgbox.h | 336 ++++--- src/gui/widget/shellwindow.cpp | 2 +- src/gui/widget/stringinput.cpp | 4 +- src/gui/widget/stringinput_ext.cpp | 10 +- src/neutrino.cpp | 40 +- src/neutrino_menue.h | 1 + src/system/locals.h | 1 + src/system/locals_intern.h | 1 + src/system/setting_helpers.cpp | 6 +- 81 files changed, 1981 insertions(+), 1697 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 7f9468a2a..b9b67613b 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -780,6 +780,7 @@ hdd_statfs_recording nur während Aufnahme hdd_umount Aushängen hdd_umount_warn Laufwerk aushängen hdd_umounted Laufwerk entfernt +help_box_title Hilfe imageinfo.api API: imageinfo.creator Ersteller: imageinfo.date Datum: diff --git a/data/locale/english.locale b/data/locale/english.locale index b9bd319b0..acf01b734 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -780,6 +780,7 @@ hdd_statfs_recording while recording only hdd_umount Unmount hdd_umount_warn unmount device hdd_umounted Device removed +help_box_title Help imageinfo.api API: imageinfo.creator Creator: imageinfo.date Date: diff --git a/data/locale/nederlands.locale b/data/locale/nederlands.locale index 0deb34b3c..5c81c018d 100644 --- a/data/locale/nederlands.locale +++ b/data/locale/nederlands.locale @@ -725,6 +725,7 @@ hdd_statfs_recording alleen tijdens opname hdd_umount Unmount hdd_umount_warn Apparaat ontkoppelen hdd_umounted Device verwijderd +help_box_title Help imageinfo.api API: imageinfo.creator Ontwikkelaar: imageinfo.date Datum: diff --git a/src/driver/moviecut.cpp b/src/driver/moviecut.cpp index a4f8890cf..749053023 100644 --- a/src/driver/moviecut.cpp +++ b/src/driver/moviecut.cpp @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include #include @@ -295,7 +295,7 @@ int CMovieCut::getInput() int retval = 0; g_RCInput->getMsg(&msg, &data, 1, false); if (msg == CRCInput::RC_home) { - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIECUT_CANCEL, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIECUT_CANCEL, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes) retval |= 4; } if (msg != CRCInput::RC_timeout) diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 7dd3183ab..042cf1ad4 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include #include @@ -1385,7 +1385,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_ASK_STOP_ALL)); snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records); if(ShowMsg(LOCALE_SHUTDOWN_RECORDING_QUERY, rec_msg, - CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) + CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrYes) { snprintf(rec_msg1, sizeof(rec_msg1)-1, "%s", g_Locale->getText(LOCALE_RECORDINGMENU_MULTIMENU_INFO_STOP_ALL)); @@ -1418,7 +1418,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) inst->GetRecordString(title, duration); title += duration; tostart = (ShowMsg(LOCALE_RECORDING_IS_RUNNING, title.c_str(), - CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes); + CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrYes); } if (tostart) { CRecordManager::getInstance()->Record(live_channel_id); @@ -1565,7 +1565,7 @@ bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid) return false; if(ShowMsg(LOCALE_SHUTDOWN_RECORDING_QUERY, title.c_str(), - CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { + CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrYes) { mutex.lock(); if (recid) inst = FindInstanceID(recid); @@ -1858,7 +1858,7 @@ bool CRecordManager::MountDirectory(const char *recordingDir) strcat(msg,recordingDir); ShowMsg(LOCALE_MESSAGEBOX_ERROR, msg, - CMessageBox::mbrBack, CMessageBox::mbBack,NEUTRINO_ICON_ERROR, 450, 10); // UTF-8 + CMsgBox::mbrBack, CMsgBox::mbBack,NEUTRINO_ICON_ERROR, 450, 10); // UTF-8 ret = false; } break; diff --git a/src/driver/screenshot.cpp b/src/driver/screenshot.cpp index 5b32b1e7a..e438f924b 100644 --- a/src/driver/screenshot.cpp +++ b/src/driver/screenshot.cpp @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 1561a8616..c96652ac9 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -61,7 +61,7 @@ #include #include #include -#include +#include #include #include #include @@ -2653,8 +2653,8 @@ bool CAudioPlayerGui::askToOverwriteFile(const std::string& filename) g_Locale->getText(LOCALE_AUDIOPLAYER_PLAYLIST_FILEOVERWRITE_MSG), filename.c_str()); bool res = (ShowMsg(LOCALE_AUDIOPLAYER_PLAYLIST_FILEOVERWRITE_TITLE, - msg,CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo) - == CMessageBox::mbrYes); + msg,CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo) + == CMsgBox::mbrYes); this->paint(); return res; } diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 4138c987d..28223aa4a 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include #include @@ -245,19 +245,19 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* { if (bouquetsChanged) { - int result = ShowMsg(LOCALE_BOUQUETEDITOR_NAME, LOCALE_BOUQUETEDITOR_SAVECHANGES, CMessageBox::mbrYes, CMessageBox::mbAll); + int result = ShowMsg(LOCALE_BOUQUETEDITOR_NAME, LOCALE_BOUQUETEDITOR_SAVECHANGES, CMsgBox::mbrYes, CMsgBox::mbYesNoCancel, NULL, 600); switch( result ) { - case CMessageBox::mbrYes : + case CMsgBox::mbrYes : loop=false; saveChanges(); break; - case CMessageBox::mbrNo : + case CMsgBox::mbrNo : loop=false; discardChanges(); break; - case CMessageBox::mbrCancel : + case CMsgBox::mbrCancel : paintHead(); paint(); paintFoot(); @@ -394,7 +394,7 @@ void CBEBouquetWidget::deleteBouquet() if (selected >= Bouquets->size()) /* Bouquets->size() might be 0 */ return; - if (ShowMsg(LOCALE_FILEBROWSER_DELETE, (*Bouquets)[selected]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : (*Bouquets)[selected]->Name, CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)!=CMessageBox::mbrYes) + if (ShowMsg(LOCALE_FILEBROWSER_DELETE, (*Bouquets)[selected]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : (*Bouquets)[selected]->Name, CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)!=CMsgBox::mbrYes) return; g_bouquetManager->deleteBouquet(selected); diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 874096dd7..38310c319 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -28,7 +28,7 @@ #include #endif -#include +#include #include "bouqueteditor_channels.h" #include @@ -470,7 +470,7 @@ void CBEChannelWidget::deleteChannel() if (selected >= Channels->size()) /* Channels.size() might be 0 */ return; - if (ShowMsg(LOCALE_FILEBROWSER_DELETE, (*Channels)[selected]->getName(), CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)!=CMessageBox::mbrYes) + if (ShowMsg(LOCALE_FILEBROWSER_DELETE, (*Channels)[selected]->getName(), CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)!=CMsgBox::mbrYes) return; g_bouquetManager->Bouquets[bouquet]->removeService((*Channels)[selected]->getChannelID()); diff --git a/src/gui/bookmarkmanager.cpp b/src/gui/bookmarkmanager.cpp index cad6d739d..8d7f21453 100644 --- a/src/gui/bookmarkmanager.cpp +++ b/src/gui/bookmarkmanager.cpp @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp index 6570b0cb3..49c0cbd1b 100644 --- a/src/gui/bouquetlist.cpp +++ b/src/gui/bouquetlist.cpp @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -346,8 +346,8 @@ int CBouquetList::doMenu() if(select >= 0) { old_selected = select; - int result = ShowMsg ( LOCALE_BOUQUETEDITOR_DELETE, Bouquets[selected]->channelList->getName(), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); - if(result != CMessageBox::mbrYes) + int result = ShowMsg ( LOCALE_BOUQUETEDITOR_DELETE, Bouquets[selected]->channelList->getName(), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo ); + if(result != CMsgBox::mbrYes) return 0; if (zapitBouquet) { diff --git a/src/gui/buildinfo.cpp b/src/gui/buildinfo.cpp index f89f933d3..3cc94094a 100644 --- a/src/gui/buildinfo.cpp +++ b/src/gui/buildinfo.cpp @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include using namespace std; diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index c6c9bafa3..176f34315 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -59,10 +59,14 @@ #include #include #include -#include -#include #include #include +#if 0 +#include +#include +#else +#include +#endif #include #include @@ -2627,7 +2631,7 @@ void CChannelList::deleteChannel(bool ask) if (!bouquet || !bouquet->zapitBouquet) return; - if (ask && ShowMsg(LOCALE_FILEBROWSER_DELETE, (*chanlist)[selected]->getName(), CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)!=CMessageBox::mbrYes) + if (ask && ShowMsg(LOCALE_FILEBROWSER_DELETE, (*chanlist)[selected]->getName(), CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)!=CMsgBox::mbrYes) return; bouquet->zapitBouquet->removeService((*chanlist)[selected]->getChannelID()); @@ -2718,7 +2722,7 @@ bool CChannelList::addChannelToBouquet() } } } else { - ShowMsg(LOCALE_EXTRA_ADD_TO_BOUQUET, LOCALE_EXTRA_CHALREADYINBQ, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_EXTRA_ADD_TO_BOUQUET, LOCALE_EXTRA_CHALREADYINBQ, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); return false; } } diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index 69d1fb7d3..29ab9ba9e 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -57,6 +57,10 @@ CComponentsForm::CComponentsForm( const int x_pos, const int y_pos, const int w, corner_type = CORNER_ALL; cc_item_index = 0; + //add default exit keys for exec handler + v_exit_keys.push_back(CRCInput::RC_home); + v_exit_keys.push_back(CRCInput::RC_setup); + v_cc_items.clear(); append_x_offset = 0; @@ -69,7 +73,7 @@ CComponentsForm::CComponentsForm( const int x_pos, const int y_pos, const int w, page_scroll_mode = PG_SCROLL_M_UP_DOWN_KEY; //connect page scroll slot - sigc::slot3 sl = sigc::mem_fun(*this, &CComponentsForm::execPageScroll); + sigc::slot4 sl = sigc::mem_fun(*this, &CComponentsForm::execPageScroll); this->OnExec.connect(sl); } @@ -91,74 +95,65 @@ CComponentsForm::~CComponentsForm() int CComponentsForm::exec() { dprintf(DEBUG_NORMAL, "[CComponentsForm] [%s - %d] \n", __func__, __LINE__); - OnBeforeExec(); + + //basic values neutrino_msg_t msg; neutrino_msg_data_t data; - int res = menu_return::RETURN_REPAINT; - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(-1); - //required exit keys - msg_list_t exit_keys[2]; - exit_keys[0].msg = CRCInput::RC_setup; - exit_keys[1].msg = CRCInput::RC_home; + //allow exec loop + bool cancel_exec = false; - bool exit_loop = false; - while (!exit_loop) + //signal before exec + OnBeforeExec(); + + while (!cancel_exec) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); //execute connected slots - OnExec(msg, data, res); - + OnExec(msg, data, res, cancel_exec); //exit loop - execExit(msg, data, res, exit_loop, exit_keys, 2); + execExit(msg, data, res, cancel_exec, v_exit_keys); if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { dprintf(DEBUG_INFO, "[CComponentsForm] [%s - %d] messages_return::cancel_all\n", __func__, __LINE__); res = menu_return::RETURN_EXIT_ALL; - exit_loop = EXIT; + cancel_exec = EXIT; } } + //signal after exec OnAfterExec(); + return res; } -void CComponentsForm::execKey(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& exit_loop, const struct msg_list_t * const msg_list, const size_t& key_count, bool force_exit) -{ - for(size_t i = 0; i < key_count; i++){ - if (execKey(msg, data, res, exit_loop, msg_list[i].msg, force_exit)){ - break; - } - } -} - -void CComponentsForm::execKey(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& exit_loop, const std::vector& v_msg_list, bool force_exit) +void CComponentsForm::execKey(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& cancel_exec, const std::vector& v_msg_list, bool force_exit) { for(size_t i = 0; i < v_msg_list.size(); i++){ - if (execKey(msg, data, res, exit_loop, v_msg_list[i], force_exit)){ + if (execKey(msg, data, res, cancel_exec, v_msg_list[i], force_exit)){ break; } } } -inline bool CComponentsForm::execKey(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& exit_loop, const neutrino_msg_t& msg_val, bool force_exit) +inline bool CComponentsForm::execKey(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& cancel_exec, const neutrino_msg_t& msg_val, bool force_exit) { if (msg == msg_val){ OnExecMsg(msg, data, res); if (force_exit) - exit_loop = EXIT; + cancel_exec = EXIT; return true; } return false; } -void CComponentsForm::execPageScroll(neutrino_msg_t& msg, neutrino_msg_data_t& /*data*/, int& /*res*/) +void CComponentsForm::execPageScroll(neutrino_msg_t& msg, neutrino_msg_data_t& /*data*/, int& /*res*/, bool& /*cancel_exec*/) { if (page_scroll_mode == PG_SCROLL_M_OFF) return; @@ -178,9 +173,9 @@ void CComponentsForm::execPageScroll(neutrino_msg_t& msg, neutrino_msg_data_t& / } } -void CComponentsForm::execExit(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& exit_loop, const struct msg_list_t * const msg_list, const size_t& key_count) +void CComponentsForm::execExit(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& cancel_exec, const std::vector& v_msg_list) { - execKey(msg, data, res, exit_loop, msg_list, key_count, true); + execKey(msg, data, res, cancel_exec, v_msg_list, true); } @@ -558,14 +553,14 @@ void CComponentsForm::setPageCount(const u_int8_t& pageCount) u_int8_t CComponentsForm::getPageCount() { - u_int8_t num = 1; + u_int8_t num = 0; for(size_t i=0; igetPageNumber(); num = max(item_num, num); } //convert type, possible -Wconversion warnings! - page_count = static_cast(num); + page_count = static_cast(num+1); return page_count; } diff --git a/src/gui/components/cc_frm.h b/src/gui/components/cc_frm.h index 2efc89bf5..82a1a4df2 100644 --- a/src/gui/components/cc_frm.h +++ b/src/gui/components/cc_frm.h @@ -56,6 +56,9 @@ class CComponentsForm : public CComponentsItem ///enable/disable page scrolling, default enabled with page scroll mode up/down keys, see also enablePageScroll() int page_scroll_mode; + ///container for exit keys, default exit keys are CRCInput::RC_home and CRCInput::RC_setup + std::vector v_exit_keys; + ///initialize basic properties virtual void Init( const int& x_pos, const int& y_pos, const int& w, const int& h, const fb_pixel_t& color_frame, @@ -149,6 +152,11 @@ class CComponentsForm : public CComponentsItem ///exec main method, see also sub exec methods virtual int exec(); + ///adds additional exec key to current collection, default exit keys are CRCInput::RC_home and CRCInput::RC_setup + virtual void addExitKey(const neutrino_msg_t& key){v_exit_keys.push_back(key);} + ///remove all current exec keys from current collection, NOTE: use addExitKey() if new exec key is required + virtual void removeExitKeys(){v_exit_keys.clear();} + ///enum exec loop control enum { @@ -156,38 +164,29 @@ class CComponentsForm : public CComponentsItem EXIT = 1 }; ///execKey() methods handle events for defined neutrino messages, see class CRCInput::, this methodes contains a signal handler named OnExecMsg, so it is possible to connect with any common function or method - ///exec sub method for pressed keys, parameters1/2 by rev, parameter3 msg_list as struct contains a list of possible RC-messages for defined message, parameter4 defines size of struct, parameter5 force_exit default = false - virtual void execKey( neutrino_msg_t& msg, - neutrino_msg_data_t& data, - int& res, - bool& exit_loop, - const struct msg_list_t * const msg_list, - const size_t& key_count, - bool force_exit = false); ///exec sub method for pressed keys, parameters1/2 by rev, parameter3 msg_list as vector contains a list of possible RC-messages for defined message, parameter4 force_exit default = false virtual void execKey( neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, - bool& exit_loop, + bool& cancel_exec, const std::vector& msg_list, bool force_exit = false); ///exec sub method for pressed key, parameters1/2 by rev, parameter3 force_exit default = false virtual bool execKey( neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, - bool& exit_loop, + bool& cancel_exec, const neutrino_msg_t& msg_val, bool force_exit = false); ///exec sub method for page scroll, parameter1 neutrino_msg_t by rev - virtual void execPageScroll(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res); + virtual void execPageScroll(neutrino_msg_t& msg, neutrino_msg_data_t& data, int& res, bool& cancel_exec); ///exec sub method for exit loop, parameters by rev virtual void execExit( neutrino_msg_t& msg, neutrino_msg_data_t& data, - int& res, bool& exit_loop, - const struct msg_list_t * const msg_list, - const size_t& key_count); + int& res, bool& cancel_exec, + const std::vector& v_msg_list); ///enum scroll direction enum diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index b5fd5ddef..5986bf888 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -124,7 +124,8 @@ void CComponentsButton::initVarButton( const int& x_pos, const int& y_pos, const cc_btn_font = NULL; cc_btn_icon = icon_name; cc_btn_capt = caption; - cc_btn_msg = CRCInput::RC_nokey; + cc_directKey = CRCInput::RC_nokey; + cc_directKeyAlt = cc_directKey; cc_btn_result = -1; cc_btn_alias = -1; @@ -187,12 +188,13 @@ void CComponentsButton::initCaption() } //set basic properties + int w_frame = max(fr_thickness, fr_thickness_sel); if (cc_btn_capt_obj){ //position and size - int x_cap = fr_thickness; + int x_cap = w_frame; x_cap += cc_btn_icon_obj ? cc_btn_icon_obj->getWidth() : 0; - int w_cap = width - fr_thickness - append_x_offset - x_cap - fr_thickness; + int w_cap = width - w_frame - append_x_offset - x_cap - w_frame; int h_cap = height*65/100 /*- 2*fr_thickness*/; /*NOTE: @@ -201,7 +203,7 @@ void CComponentsButton::initCaption() but text render isn't wrong here, because capitalized chars or long chars like e. 'q', 'y' are considered! Therefore we here need other icons or a hack, that considers some different height values. */ - int y_cap = height/2 - h_cap/2 + fr_thickness/2; + int y_cap = height/2 - h_cap/2 + w_frame/2; cc_btn_capt_obj->setDimensionsAll(x_cap, y_cap, w_cap, h_cap); @@ -216,14 +218,14 @@ void CComponentsButton::initCaption() cc_btn_capt_obj->setTextColor(this->cc_item_enabled ? cc_btn_capt_col : cc_btn_capt_disable_col); //corner of text item - cc_btn_capt_obj->setCorner(corner_rad-fr_thickness, corner_type); + cc_btn_capt_obj->setCorner(corner_rad-w_frame, corner_type); } //handle common position of icon and text inside container required for alignment - int w_required = fr_thickness + append_x_offset; + int w_required = w_frame + append_x_offset; w_required += cc_btn_icon_obj ? cc_btn_icon_obj->getWidth() + append_x_offset : 0; w_required += cc_btn_font ? cc_btn_font->getRenderWidth(cc_btn_capt) : 0; - w_required += append_x_offset + fr_thickness; + w_required += append_x_offset + w_frame; //dynamic width if (w_required > width){ @@ -235,7 +237,7 @@ void CComponentsButton::initCaption() int x_icon = width/2 - w_required/2 /*+ fr_thickness + append_x_offset*/; int w_icon = 0; if (cc_btn_icon_obj){ - x_icon += fr_thickness + append_x_offset; + x_icon += w_frame + append_x_offset; cc_btn_icon_obj->setXPos(x_icon); w_icon = cc_btn_icon_obj->getWidth(); /*in case of dynamic changed height of caption or button opbject itself, diff --git a/src/gui/components/cc_frm_button.h b/src/gui/components/cc_frm_button.h index 1b9123b41..80653e2be 100644 --- a/src/gui/components/cc_frm_button.h +++ b/src/gui/components/cc_frm_button.h @@ -70,8 +70,10 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen ///property: icon name, only icons supported, to find in gui/widget/icons.h std::string cc_btn_icon; - ///property: assigned event message value, see driver/rcinput.h for possible values, default value = CRCInput::RC_nokey, see also setButtonEventMsg(), getButtonEventMsg() - neutrino_msg_t cc_btn_msg; + ///property: assigned event message value, see driver/rcinput.h for possible values, default value = CRCInput::RC_nokey, see also setButtonDirectKey(), getButtonDirectKey() + neutrino_msg_t cc_directKey; + ///property: assigned an alternate event message value, see driver/rcinput.h for possible values, default value = CRCInput::RC_nokey, see also setButtonDirectKeyAlt(), getButtonDirectKeyAlt() + neutrino_msg_t cc_directKeyAlt; ///property: assigned return value, see also setButtonResult(), getButtonResult(), default value = -1 (not defined) int cc_btn_result; ///property: assigned alias value, see also setButtonAlias(), getButtonAlias(), default value = -1 (not defined) @@ -133,7 +135,7 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen fb_pixel_t color_frame = COL_SHADOW_PLUS_0, fb_pixel_t color_body = COL_BUTTON_BODY, fb_pixel_t color_shadow = COL_SHADOW_PLUS_0); ///set text color - virtual void setButtonTextColor(fb_pixel_t text_color, fb_pixel_t text_color_disabled = COL_MENUCONTENTINACTIVE_TEXT){cc_btn_capt_col = text_color; cc_btn_capt_disable_col = text_color_disabled;} + inline virtual void setButtonTextColor(fb_pixel_t caption_color){cc_btn_capt_col = caption_color;}; /**Member to modify background behavior of embeded caption object. * @param[in] mode @@ -162,9 +164,9 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen virtual void setCaption(const neutrino_locale_t locale_text); ///get caption, type as std::string - virtual std::string getCaptionString(){return cc_btn_capt;}; + inline virtual std::string getCaptionString(){return cc_btn_capt;}; ///get loacalized caption id, type = neutrino_locale_t - virtual neutrino_locale_t getCaptionLocale(){return cc_btn_capt_locale;}; + inline virtual neutrino_locale_t getCaptionLocale(){return cc_btn_capt_locale;}; ///property: set font for label caption, parameter as font object, value NULL causes usaage of dynamic font virtual void setButtonFont(Font* font){cc_btn_font = font; initCCBtnItems();}; @@ -176,17 +178,21 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); ///assigns an event msg value to button object, parameter1 as neutrino_msg_t, see driver/rcinput.h for possible values - virtual void setButtonEventMsg(const neutrino_msg_t& msg){cc_btn_msg = msg;}; - ///return an event msg value to button object, see driver/rcinput.h for possible values - inline virtual neutrino_msg_t getButtonEventMsg(){return cc_btn_msg;}; + inline virtual void setButtonDirectKey(const neutrino_msg_t& msg){cc_directKey = msg;}; + ///assigns an alternate event msg value to button object, parameter1 as neutrino_msg_t, see driver/rcinput.h for possible values + inline virtual void setButtonDirectKeyA(const neutrino_msg_t& msg){cc_directKeyAlt = msg;}; + ///returns an event msg value to button object, see driver/rcinput.h for possible values + inline virtual neutrino_msg_t getButtonDirectKey(){return cc_directKey;}; + ///returns an alternate event msg value to button object, but returns the primary direct key if no key was defined, see driver/rcinput.h for possible values + inline virtual neutrino_msg_t getButtonDirectKeyA(){return cc_directKeyAlt != CRCInput::RC_nokey ? cc_directKeyAlt : cc_directKey ;}; ///assigns an return value to button object, parameter1 as int - virtual void setButtonResult(const int& result_value){cc_btn_result = result_value;}; + inline virtual void setButtonResult(const int& result_value){cc_btn_result = result_value;}; ///returns current result value of button object inline virtual int getButtonResult(){return cc_btn_result;}; ///assigns an alias value to button object, parameter1 as int, e.g. previous known as mbYes, mbNo... from message boxes - virtual void setButtonAlias(const int& alias_value){cc_btn_alias = alias_value;}; + inline virtual void setButtonAlias(const int& alias_value){cc_btn_alias = alias_value;}; ///returns an alias value from button object, see also cc_btn_alias inline virtual int getButtonAlias(){return cc_btn_alias;}; }; @@ -239,6 +245,7 @@ class CComponentsButtonGreen : public CComponentsButton :CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_GREEN, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow) { cc_item_type = CC_ITEMTYPE_BUTTON_GREEN; + }; CComponentsButtonGreen( const int& x_pos, const int& y_pos, const int& w, const int& h, const neutrino_locale_t& caption_locale, diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 0eec2443c..5b6da399e 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -144,9 +144,8 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (btn_contour ? height-2*fr_thickness : height), txt, icon_name); btn->setButtonFont(ccf_btn_font); btn->doPaintBg(btn_contour); - btn->enableFrame(btn_contour); - btn->setButtonTextColor(COL_MENUFOOT_TEXT); - btn->setButtonEventMsg(content[i].btn_msg); + btn->setButtonDirectKey(content[i].directKey); + btn->setButtonDirectKeyA(content[i].directKeyAlt); btn->setButtonResult(content[i].btn_result); btn->setButtonAlias(content[i].btn_alias); @@ -164,6 +163,9 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont btn->setColorFrame(f_col); } + if (btn_contour) + btn->setFrameThickness(3, 3); + chain->addCCItem(btn); //set x position of next button object @@ -200,7 +202,8 @@ void CComponentsFooter::setButtonLabels(const struct button_label_l * const cont for (size_t i= 0; i< label_count; i++){ buttons[i].button = content[i].button; buttons[i].text = content[i].locale != NONEXISTANT_LOCALE ? g_Locale->getText(content[i].locale) : ""; - buttons[i].btn_msg = content[i].btn_msg; + buttons[i].directKey = content[i].directKey; + buttons[i].directKeyAlt = content[i].directKeyAlt; buttons[i].btn_result = content[i].btn_result; buttons[i].btn_alias = content[i].btn_alias; } @@ -217,7 +220,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label * const conten buttons[i].locale = content[i].locale; //NOTE: here are used default values, because old button label struct don't know about this, //if it possible, don't use this methode! - buttons[i].btn_msg = CRCInput::RC_nokey; + buttons[i].directKey = buttons[i].directKeyAlt = CRCInput::RC_nokey; buttons[i].btn_result = -1; buttons[i].btn_alias = -1; } @@ -232,7 +235,8 @@ void CComponentsFooter::setButtonLabels(const vector &v_content, for (size_t i= 0; i< label_count; i++){ buttons[i].button = v_content[i].button; buttons[i].locale = v_content[i].locale; - buttons[i].btn_msg = v_content[i].btn_msg; + buttons[i].directKey = v_content[i].directKey; + buttons[i].directKeyAlt = v_content[i].directKeyAlt; buttons[i].btn_result = v_content[i].btn_result; buttons[i].btn_alias = v_content[i].btn_alias; } @@ -248,7 +252,8 @@ void CComponentsFooter::setButtonLabels(const vector &v_content, for (size_t i= 0; i< label_count; i++){ buttons[i].button = v_content[i].button; buttons[i].text = v_content[i].text; - buttons[i].btn_msg = v_content[i].btn_msg; + buttons[i].directKey = v_content[i].directKey; + buttons[i].directKeyAlt = v_content[i].directKeyAlt; buttons[i].btn_result = v_content[i].btn_result; buttons[i].btn_alias = v_content[i].btn_alias; } @@ -256,24 +261,39 @@ void CComponentsFooter::setButtonLabels(const vector &v_content, setButtonLabels(buttons, label_count, chain_width, label_width); } -void CComponentsFooter::setButtonLabel(const char *button_icon, const std::string& text, const int& chain_width, const int& label_width, const neutrino_msg_t& msg, const int& result_value, const int& alias_value) +void CComponentsFooter::setButtonLabel( const char *button_icon, + const std::string& text, + const int& chain_width, + const int& label_width, + const neutrino_msg_t& msg, + const int& result_value, + const int& alias_value, + const neutrino_msg_t& directKeyAlt) { button_label_s button[1]; button[0].button = button_icon; button[0].text = text; - button[0].btn_msg = msg; + button[0].directKey = msg; + button[0].directKeyAlt = directKeyAlt; button[0].btn_result = result_value; button[0].btn_alias = alias_value; setButtonLabels(button, 1, chain_width, label_width); } -void CComponentsFooter::setButtonLabel(const char *button_icon, const neutrino_locale_t& locale, const int& chain_width, const int& label_width, const neutrino_msg_t& msg, const int& result_value, const int& alias_value) +void CComponentsFooter::setButtonLabel( const char *button_icon, + const neutrino_locale_t& locale, + const int& chain_width, + const int& label_width, + const neutrino_msg_t& msg, + const int& result_value, + const int& alias_value, + const neutrino_msg_t& directKeyAlt) { string txt = locale != NONEXISTANT_LOCALE ? g_Locale->getText(locale) : ""; - setButtonLabel(button_icon, txt, chain_width, label_width, msg, result_value, alias_value); + setButtonLabel(button_icon, txt, chain_width, label_width, msg, result_value, alias_value, directKeyAlt); } void CComponentsFooter::showButtonContour(bool show) @@ -325,3 +345,14 @@ void CComponentsFooter::paintButtons(const int& x_pos, this->paint(do_save_bg); } + +void CComponentsFooter::setButtonText(const uint& btn_id, const std::string& text) +{ + CComponentsItem *item = getButtonChainObject()->getCCItem(btn_id); + if (item){ + CComponentsButton *button = static_cast(item); + button->setCaption(text); + } + else + dprintf(DEBUG_NORMAL, "[CComponentsForm] [%s - %d] Error: can't set button text, possible wrong btn_id=%u, item=%p...\n", __func__, __LINE__, btn_id, item); +} diff --git a/src/gui/components/cc_frm_footer.h b/src/gui/components/cc_frm_footer.h index bf9a16e2a..053a6d3da 100644 --- a/src/gui/components/cc_frm_footer.h +++ b/src/gui/components/cc_frm_footer.h @@ -34,7 +34,8 @@ typedef struct button_label_s { const char * button; std::string text; - neutrino_msg_t btn_msg; + neutrino_msg_t directKey; + neutrino_msg_t directKeyAlt; int btn_result; int btn_alias; } button_label_s_struct; @@ -43,7 +44,8 @@ typedef struct button_label_l { const char * button; neutrino_locale_t locale; - neutrino_msg_t btn_msg; + neutrino_msg_t directKey; + neutrino_msg_t directKeyAlt; int btn_result; int btn_alias; } button_label_l_struct; @@ -106,9 +108,23 @@ class CComponentsFooter : public CComponentsHeader void setButtonLabels(const struct button_label * const content, const size_t& label_count, const int& chain_width = 0, const int& label_width = 0); ///add single button label with string label type as content, chain_width as int, label width as int - void setButtonLabel(const char *button_icon, const std::string& text, const int& chain_width = 0, const int& label_width = 0, const neutrino_msg_t& msg = CRCInput::RC_nokey, const int& result_value = -1, const int& alias_value = -1); + void setButtonLabel( const char *button_icon, + const std::string& text, + const int& chain_width = 0, + const int& label_width = 0, + const neutrino_msg_t& msg = CRCInput::RC_nokey, + const int& result_value = -1, + const int& alias_value = -1, + const neutrino_msg_t& directKeyAlt = CRCInput::RC_nokey); ///add single button label with locale label type as content, chain_width as int, label width as int - void setButtonLabel(const char *button_icon, const neutrino_locale_t& locale, const int& chain_width = 0, const int& label_width = 0, const neutrino_msg_t& msg = CRCInput::RC_nokey, const int& result_value = -1, const int& alias_value = -1); + void setButtonLabel( const char *button_icon, + const neutrino_locale_t& locale, + const int& chain_width = 0, + const int& label_width = 0, + const neutrino_msg_t& msg = CRCInput::RC_nokey, + const int& result_value = -1, + const int& alias_value = -1, + const neutrino_msg_t& directKeyAlt = CRCInput::RC_nokey); ///causes show/hide countour of button frame and background, parameter bool show, default= true void showButtonContour(bool show = true); @@ -120,12 +136,26 @@ class CComponentsFooter : public CComponentsHeader ///returns selected button object, return value as pointer to object, NULL means nothing is selected CComponentsButton* getSelectedButtonObject(); + /*! + Sets a new text to an already predefined button. + 1st parameter 'btn_id' accepts current id of an already defined button. 2nd parameter sets the new text as std::string + Usage: + Buttons come with any text eg. 'Ok', 'No', 'Yes' ...whatever and this member allows to manipulate the text via button id. + Button id means the showed button begins from the left position of button chain, starts with value=0, also to get via getButtonChainObject()->getCCItemId([CComponentsButton*]) + example: 1st buttons text is 'Hello', 2nd Button's text is 'You!', + Now we want to change the text of 2nd button to 'World", so we must do this: + setButtonText(1, "World"); + Wrong id's will be ignored. + */ + void setButtonText(const uint& btn_id, const std::string& text); + ///property: set font for label caption, parameter as font object, value NULL causes usage of dynamic font void setButtonFont(Font* font){ccf_btn_font = font;}; ///returns pointer to internal button container CComponentsFrmChain* getButtonChainObject(){return chain;}; + ///this is a nearly methode similar with the older button handler find in gui/widget/buttons.h, some parameters are different, but require minimalized input ///this member sets some basic parameters and will paint concurrently on execute, explicit call of paint() is not required void paintButtons( const int& x_pos, diff --git a/src/gui/components/cc_frm_window.h b/src/gui/components/cc_frm_window.h index 212db8ef7..6d1807798 100644 --- a/src/gui/components/cc_frm_window.h +++ b/src/gui/components/cc_frm_window.h @@ -222,6 +222,11 @@ class CComponentsWindow : public CComponentsForm ///paint all window items, this overwriting paint() from CComponentsForm void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + + ///adds additional exec key to current collection, default exit keys are CRCInput::RC_home and CRCInput::RC_setup + virtual void addExitKey(const neutrino_msg_t& key){getBodyObject()->addExitKey(key);} + ///remove all current exec keys from current collection, NOTE: use addExitKey() if new exec key is required + virtual void removeExitKeys(){getBodyObject()->removeExitKeys();} }; class CComponentsWindowMax : public CComponentsWindow diff --git a/src/gui/components/cc_signals.h b/src/gui/components/cc_signals.h index feee1ef67..da6a6d8b2 100644 --- a/src/gui/components/cc_signals.h +++ b/src/gui/components/cc_signals.h @@ -102,7 +102,7 @@ class CComponentsSignals : public sigc::trackable sigc::signal OnAfterExec; ///signal on execute of CComponentsForm::exec() - sigc::signal OnExec; + sigc::signal OnExec; ///signal on received message in CComponentsForm::execKey() sigc::signal OnExecMsg; diff --git a/src/gui/components/cc_types.h b/src/gui/components/cc_types.h index 549bf2c30..6a3490a6a 100644 --- a/src/gui/components/cc_types.h +++ b/src/gui/components/cc_types.h @@ -125,9 +125,9 @@ typedef struct cc_screen_data_t //combination of rc messages with related icon typedef struct msg_list_t { - neutrino_msg_t msg; + neutrino_msg_t directKey; const char* icon; -} key_list_t; +} msg_list_struct_t; //align types enum diff --git a/src/gui/epgplus.cpp b/src/gui/epgplus.cpp index 4cd2ef8a3..9b2f2026b 100644 --- a/src/gui/epgplus.cpp +++ b/src/gui/epgplus.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include "bouquetlist.h" @@ -1293,7 +1293,7 @@ int EpgPlus::MenuTargetAddReminder::exec (CMenuTarget * /*parent*/, const std::s g_Timerd->addZaptoTimerEvent (this->epgPlus->selectedChannelEntry->channel->getChannelID(), (*It)->channelEvent.startTime - (g_settings.zapto_pre_time * 60), (*It)->channelEvent.startTime - ANNOUNCETIME - (g_settings.zapto_pre_time * 60), 0, (*It)->channelEvent.eventID, (*It)->channelEvent.startTime, 0); ShowMsg (LOCALE_TIMER_EVENTTIMED_TITLE, g_Locale->getText (LOCALE_TIMER_EVENTTIMED_MSG) - , CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 + , CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 } else printf ("timerd not available\n"); } @@ -1330,7 +1330,7 @@ int EpgPlus::MenuTargetAddRecordTimer::exec (CMenuTarget * /*parent*/, const std printf("already found in moviebrowser: %s\n", rec_title); char message[1024]; snprintf(message, sizeof(message)-1, g_Locale->getText(LOCALE_RECORDING_ALREADY_FOUND), rec_title); - doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes); + doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes); } } if (g_Timerd->isTimerdAvailable() && doRecord) diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index 521d9b3d7..9133b56bd 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -1101,7 +1101,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start printf("already found in moviebrowser: %s\n", rec_title); char message[1024]; snprintf(message, sizeof(message)-1, g_Locale->getText(LOCALE_RECORDING_ALREADY_FOUND), rec_title); - doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes); + doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes); } } if (doRecord && !call_fromfollowlist) @@ -1131,11 +1131,11 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start epgData.eventID, epgData.epg_times.startzeit, epgData.epg_times.startzeit - (ANNOUNCETIME + 120 ), TIMERD_APIDS_CONF, true, epgData.epg_times.startzeit - (ANNOUNCETIME + 120) > time(NULL), recDir, true); - ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); } } else { - ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); } } @@ -1165,7 +1165,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start stars = tmdb->getStars(); showText(showPos, sy + toph, tmdb_active); } else { - ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_EPGVIEWER_NODETAILED, CMessageBox::mbrOk , CMessageBox::mbrOk); + ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_EPGVIEWER_NODETAILED, CMsgBox::mbrOk , CMsgBox::mbrOk); } delete tmdb; } else { @@ -1194,7 +1194,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start epgData.epg_times.startzeit - (g_settings.zapto_pre_time * 60), epgData.epg_times.startzeit - ANNOUNCETIME - (g_settings.zapto_pre_time * 60), 0, epgData.eventID, epgData.epg_times.startzeit, 0); - ShowMsg(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); } diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp index ddb63f8cb..9ebeeba47 100644 --- a/src/gui/eventlist.cpp +++ b/src/gui/eventlist.cpp @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include @@ -475,7 +475,7 @@ int CEventList::exec(const t_channel_id channel_id, const std::string& channelna printf("already found in moviebrowser: %s\n", rec_title); char message[1024]; snprintf(message, sizeof(message)-1, g_Locale->getText(LOCALE_RECORDING_ALREADY_FOUND), rec_title); - doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes); + doRecord = (ShowMsg(LOCALE_RECORDING_ALREADY_FOUND_CHECK, message, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes); } } t_channel_id used_id = IS_WEBTV(channel_id) ? channel_id : evtlist[selected].channelID; @@ -511,7 +511,7 @@ int CEventList::exec(const t_channel_id channel_id, const std::string& channelna evtlist[selected].startTime - (g_settings.zapto_pre_time * 60), evtlist[selected].startTime - ANNOUNCETIME - (g_settings.zapto_pre_time * 60), 0, evtlist[selected].eventID, evtlist[selected].startTime, 0); - //ShowMsg(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + //ShowMsg(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); timerlist.clear(); g_Timerd->getTimerList (timerlist); paint(evtlist[selected].channelID ); diff --git a/src/gui/favorites.cpp b/src/gui/favorites.cpp index c3d978f99..041cf35d1 100644 --- a/src/gui/favorites.cpp +++ b/src/gui/favorites.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include @@ -122,7 +122,7 @@ int CFavorites::exec(CMenuTarget* parent, const std::string & actionKey) #if 0 if (!bouquetList) { - ShowMsg(LOCALE_FAVORITES_BOUQUETNAME, LOCALE_FAVORITES_NOBOUQUETS, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_FAVORITES_BOUQUETNAME, LOCALE_FAVORITES_NOBOUQUETS, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); return res; } #endif @@ -147,7 +147,7 @@ int CFavorites::exec(CMenuTarget* parent, const std::string & actionKey) { if (status & 2) str += g_Locale->getText(LOCALE_EXTRA_CHADDED); else str += g_Locale->getText(LOCALE_EXTRA_CHALREADYINBQ); - ShowMsg(LOCALE_EXTRA_ADD_TO_BOUQUET, str, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 + ShowMsg(LOCALE_EXTRA_ADD_TO_BOUQUET, str, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 } else { @@ -155,7 +155,7 @@ int CFavorites::exec(CMenuTarget* parent, const std::string & actionKey) if (status & 2) str += g_Locale->getText(LOCALE_FAVORITES_CHADDED); else str += g_Locale->getText(LOCALE_FAVORITES_CHALREADYINBQ); if (status) str += g_Locale->getText(LOCALE_FAVORITES_FINALHINT); - ShowMsg(LOCALE_FAVORITES_BOUQUETNAME, str, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 + ShowMsg(LOCALE_FAVORITES_BOUQUETNAME, str, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 } diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 8a0f84f26..736fc6b0f 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include @@ -800,7 +800,7 @@ bool CFileBrowser::exec(const char * const dirname) _msg << filelist[selected].getFileName(); _msg << " " << g_Locale->getText(LOCALE_FILEBROWSER_DODELETE2); - if (ShowMsg(LOCALE_FILEBROWSER_DELETE, _msg.str(), CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes) + if (ShowMsg(LOCALE_FILEBROWSER_DELETE, _msg.str(), CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)==CMsgBox::mbrYes) { std::string n = filelist[selected].Name; recursiveDelete(n.c_str()); diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index a8afb2431..dcb79167e 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -46,7 +46,7 @@ #include #include -#include +#include #include #include @@ -375,8 +375,8 @@ void CHDDMenuHandler::setRecordPath(std::string &dev) } bool old_menu = in_menu; in_menu = false; - int res = ShowMsg(LOCALE_RECORDINGMENU_DEFDIR, LOCALE_HDD_SET_RECDIR, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo); - if(res == CMessageBox::mbrYes) { + int res = ShowMsg(LOCALE_RECORDINGMENU_DEFDIR, LOCALE_HDD_SET_RECDIR, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); + if(res == CMsgBox::mbrYes) { g_settings.network_nfs_recordingdir = newpath; CRecordManager::getInstance()->SetDirectory(g_settings.network_nfs_recordingdir); if(g_settings.timeshiftdir.empty()) @@ -426,8 +426,8 @@ int CHDDMenuHandler::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t dat if (added && !mounted && tmp != "sr") { std::string message = dev + ": " + g_Locale->getText(LOCALE_HDD_MOUNT_FAILED); message += std::string(" ") + g_Locale->getText(LOCALE_HDD_FORMAT) + std::string(" ?"); - int res = ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo); - if(res == CMessageBox::mbrYes) { + int res = ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); + if(res == CMsgBox::mbrYes) { unsigned char * p = new unsigned char[dev.size() + 1]; if (p) { sprintf((char *)p, "%s", dev.c_str()); @@ -778,7 +778,7 @@ _show_menu: void CHDDMenuHandler::showError(neutrino_locale_t err) { - ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(err), CMessageBox::mbrOk, CMessageBox::mbOk); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(err), CMsgBox::mbrOk, CMsgBox::mbOk); } int CHDDMenuHandler::formatDevice(std::string dev) @@ -809,8 +809,8 @@ int CHDDMenuHandler::formatDevice(std::string dev) std::string mkfscmd = devtool->mkfs + " " + devtool->mkfs_options + " " + partname; printf("mkfs cmd: [%s]\n", mkfscmd.c_str()); - res = ShowMsg(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_WARN), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo ); - if(res != CMessageBox::mbrYes) + res = ShowMsg(LOCALE_HDD_FORMAT, g_Locale->getText(LOCALE_HDD_FORMAT_WARN), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo ); + if(res != CMsgBox::mbrYes) return menu_return::RETURN_REPAINT; bool srun = my_system(3, "killall", "-9", "smbd"); diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 3db50e64c..4985536fa 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include @@ -330,7 +330,7 @@ int CKeybindSetup::showKeySetup() strcat(RC_HW_msg, g_Locale->getText(LOCALE_KEYBINDINGMENU_REMOTECONTROL_HARDWARE_MSG_PART2)); strcat(RC_HW_msg, RC_HW_str[g_settings.remote_control_hardware]); strcat(RC_HW_msg, g_Locale->getText(LOCALE_KEYBINDINGMENU_REMOTECONTROL_HARDWARE_MSG_PART3)); - if(ShowMsg(LOCALE_MESSAGEBOX_INFO, RC_HW_msg, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_INFO, 450, 15, true) == CMessageBox::mbrNo) { + if(ShowMsg(LOCALE_MESSAGEBOX_INFO, RC_HW_msg, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_INFO, 450, 15) == CMsgBox::mbrNo) { g_settings.remote_control_hardware = org_remote_control_hardware; g_RCInput->CRCInput::set_rc_hw(); } diff --git a/src/gui/lua/lua_hintbox.cpp b/src/gui/lua/lua_hintbox.cpp index cfa25f203..eec52f441 100644 --- a/src/gui/lua/lua_hintbox.cpp +++ b/src/gui/lua/lua_hintbox.cpp @@ -149,7 +149,7 @@ int CLuaInstHintbox::HintboxExec(lua_State *L) res = messages_return::cancel_info; else if (msg == CRCInput::RC_home) res = messages_return::cancel_all; - else if ((D->b->has_scrollbar()) && ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down))) { + else if (/*(D->b->has_scrollbar()) &&*/ ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down))) { if (msg == CRCInput::RC_up) D->b->scroll_up(); else diff --git a/src/gui/lua/lua_menue.cpp b/src/gui/lua/lua_menue.cpp index b704b56c8..c8f0fbf5c 100644 --- a/src/gui/lua/lua_menue.cpp +++ b/src/gui/lua/lua_menue.cpp @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/gui/lua/lua_messagebox.cpp b/src/gui/lua/lua_messagebox.cpp index 303db0541..9611a1254 100644 --- a/src/gui/lua/lua_messagebox.cpp +++ b/src/gui/lua/lua_messagebox.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include "luainstance.h" @@ -74,10 +74,10 @@ int CLuaInstMessagebox::MessageboxExec(lua_State *L) std::string tmp; if (tableLookup(L, "align", tmp)) { table_key mb[] = { - { "center1", CMessageBox::mbBtnAlignCenter1 }, - { "center2", CMessageBox::mbBtnAlignCenter2 }, - { "left", CMessageBox::mbBtnAlignLeft }, - { "right", CMessageBox::mbBtnAlignRight }, + { "center1", CMsgBox::mbBtnAlignCenter1 }, + { "center2", CMsgBox::mbBtnAlignCenter2 }, + { "left", CMsgBox::mbBtnAlignLeft }, + { "right", CMsgBox::mbBtnAlignRight }, { NULL, 0 } }; for (int i = 0; mb[i].name; i++) @@ -93,12 +93,12 @@ int CLuaInstMessagebox::MessageboxExec(lua_State *L) lua_pushvalue(L, -2); const char *val = lua_tostring(L, -2); table_key mb[] = { - { "yes", CMessageBox::mbYes }, - { "no", CMessageBox::mbNo }, - { "cancel", CMessageBox::mbCancel }, - { "all", CMessageBox::mbAll }, - { "back", CMessageBox::mbBack }, - { "ok", CMessageBox::mbOk }, + { "yes", CMsgBox::mbYes }, + { "no", CMsgBox::mbNo }, + { "cancel", CMsgBox::mbCancel }, + { "all", CMsgBox::mbAll }, + { "back", CMsgBox::mbBack }, + { "ok", CMsgBox::mbOk }, { NULL, 0 } }; for (int i = 0; mb[i].name; i++) @@ -109,14 +109,14 @@ int CLuaInstMessagebox::MessageboxExec(lua_State *L) } lua_pop(L, 1); if ((show_buttons & 0xFF) == 0) - show_buttons |= CMessageBox::mbAll; + show_buttons |= CMsgBox::mbAll; table_key mbr[] = { - { "yes", CMessageBox::mbrYes }, - { "no", CMessageBox::mbrNo }, - { "cancel", CMessageBox::mbrCancel }, - { "back", CMessageBox::mbrBack }, - { "ok", CMessageBox::mbrOk }, + { "yes", CMsgBox::mbrYes }, + { "no", CMsgBox::mbrNo }, + { "cancel", CMsgBox::mbrCancel }, + { "back", CMsgBox::mbrBack }, + { "ok", CMsgBox::mbrOk }, { NULL, 0 } }; if (tableLookup(L, "default", tmp)) { @@ -127,7 +127,7 @@ int CLuaInstMessagebox::MessageboxExec(lua_State *L) } } - int res = ShowMsg(name, text, (CMessageBox::result_) default_button, (CMessageBox::buttons_) show_buttons, icon.empty() ? NULL : icon.c_str(), width, timeout, return_default_on_timeout); + int res = ShowMsg(name, text, (CMsgBox::msg_result_t) default_button, (CMsgBox::button_define_t) show_buttons, icon.empty() ? NULL : icon.c_str(), width, timeout, return_default_on_timeout); tmp = "cancel"; for (int i = 0; mbr[i].name; i++) diff --git a/src/gui/lua/lua_messagebox.h b/src/gui/lua/lua_messagebox.h index 83d2114e2..1269f8332 100644 --- a/src/gui/lua/lua_messagebox.h +++ b/src/gui/lua/lua_messagebox.h @@ -25,7 +25,7 @@ class CLuaMessagebox { public: - CMessageBox *b; + CMsgBox *b; CLuaMessagebox(); ~CLuaMessagebox(); }; diff --git a/src/gui/lua/lua_misc.cpp b/src/gui/lua/lua_misc.cpp index 9b965ae5d..739f7a568 100644 --- a/src/gui/lua/lua_misc.cpp +++ b/src/gui/lua/lua_misc.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/gui/lua/lua_video.cpp b/src/gui/lua/lua_video.cpp index dfef5c7e5..9e1b6774c 100644 --- a/src/gui/lua/lua_video.cpp +++ b/src/gui/lua/lua_video.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index b76adc465..0adee6672 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -46,7 +46,7 @@ #include #include -#include +#include #include #include @@ -125,7 +125,7 @@ int CMiscMenue::exec(CMenuTarget* parent, const std::string &actionKey) unsigned num = CEitManager::getInstance()->getEventsCount(); char str[128]; sprintf(str, "Event count: %d", num); - ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack); + ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMsgBox::mbrBack, CMsgBox::mbBack); return menu_return::RETURN_REPAINT; } else if(actionKey == "energy") diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index 50a5ed1f8..438e3eebe 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include #include @@ -230,7 +230,7 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) buf += " "; buf += satname; buf += " ?"; - store = (ShowMsg(LOCALE_MESSAGEBOX_INFO, buf,CMessageBox::mbrNo,CMessageBox::mbNo|CMessageBox::mbYes) == CMessageBox::mbrYes); + store = (ShowMsg(LOCALE_MESSAGEBOX_INFO, buf,CMsgBox::mbrNo,CMsgBox::mbNo|CMsgBox::mbYes) == CMsgBox::mbrYes); } } if(store) diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index 11f4c5156..147db2845 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -55,7 +55,7 @@ #include #include #include -#include +#include #include #include #include @@ -798,7 +798,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) else if (actionKey == "copy_onefile" || actionKey == "copy_several") { bool onefile = (actionKey == "copy_onefile"); - if ((show_mode == MB_SHOW_RECORDS) && (ShowMsg(LOCALE_MESSAGEBOX_INFO, onefile ? LOCALE_MOVIEBROWSER_COPY : LOCALE_MOVIEBROWSER_COPIES, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes)) + if ((show_mode == MB_SHOW_RECORDS) && (ShowMsg(LOCALE_MESSAGEBOX_INFO, onefile ? LOCALE_MOVIEBROWSER_COPY : LOCALE_MOVIEBROWSER_COPIES, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes)) { CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_COPYING); hintBox->paint(); @@ -810,7 +810,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) bool res = mc.copyMovie(m_movieSelectionHandler, onefile); //g_RCInput->clearRCMsg(); if (res == 0) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_COPY_FAILED, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_COPY_FAILED, CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else m_doLoadMovies = true; m_doRefresh = true; @@ -820,10 +820,10 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) { #if 0 if ((m_movieSelectionHandler == playing_info) && (NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode())) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, "Impossible to cut playing movie.", CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, "Impossible to cut playing movie.", CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else #endif - if ((show_mode == MB_SHOW_RECORDS) && (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_CUT, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes)) + if ((show_mode == MB_SHOW_RECORDS) && (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_CUT, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes)) { CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_CUTTING); hintBox->paint(); @@ -835,7 +835,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) bool res = mc.cutMovie(m_movieSelectionHandler); //g_RCInput->clearRCMsg(); if (!res) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_CUT_FAILED, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_CUT_FAILED, CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else m_doLoadMovies = true; m_doRefresh = true; @@ -846,12 +846,12 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) if ((show_mode == MB_SHOW_RECORDS) && m_movieSelectionHandler != NULL) { if ((m_movieSelectionHandler == playing_info) && (NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode())) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_TRUNCATE_FAILED_PLAYING, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_TRUNCATE_FAILED_PLAYING, CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else if (m_movieSelectionHandler->bookmarks.end == 0) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_BOOK_NO_END, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_BOOK_NO_END, CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else { - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_TRUNCATE, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_TRUNCATE, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes) { CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_TRUNCATING); hintBox->paint(); @@ -861,7 +861,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) delete hintBox; g_RCInput->clearRCMsg(); if (!res) - ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_TRUNCATE_FAILED, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_MOVIEBROWSER_TRUNCATE_FAILED, CMsgBox::mbrCancel, CMsgBox::mbCancel, NEUTRINO_ICON_ERROR); else m_doLoadMovies = true; m_doRefresh = true; @@ -1745,7 +1745,7 @@ bool CMovieBrowser::onButtonPressMainFrame(neutrino_msg_t msg) if (!fname.empty()) { //delete Cover - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_DELETE_SCREENSHOT, CMessageBox::mbrNo, CMessageBox:: mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_MOVIEBROWSER_DELETE_SCREENSHOT, CMsgBox::mbrNo, CMsgBox:: mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes) { unlink(fname.c_str()); refresh(); @@ -2169,7 +2169,7 @@ bool CMovieBrowser::onDeleteFile(MI_MOVIE_INFO *movieinfo, bool skipAsk) int msgBoxWidth = 450; std::string msg = formatDeleteMsg(movieinfo, msgFont, msgBoxWidth); - if ((skipAsk || !movieinfo->delAsk) || (ShowMsg(LOCALE_FILEBROWSER_DELETE, msg, CMessageBox::mbrYes, CMessageBox::mbYes|CMessageBox::mbNo, NULL, msgBoxWidth)==CMessageBox::mbrYes)) + if ((skipAsk || !movieinfo->delAsk) || (ShowMsg(LOCALE_FILEBROWSER_DELETE, msg, CMsgBox::mbrYes, CMsgBox::mbYes|CMsgBox::mbNo, NULL, msgBoxWidth)==CMsgBox::mbrYes)) { CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_MOVIEBROWSER_DELETE_INFO)); hintBox->paint(); @@ -2245,7 +2245,7 @@ bool CMovieBrowser::onDelete(bool cursor_only) char buf1[1024]; snprintf(buf1, sizeof(buf1), g_Locale->getText(LOCALE_MOVIEBROWSER_ASK_REC_TO_DELETE), delName.c_str()); if (ShowMsg(LOCALE_RECORDINGMENU_RECORD_IS_RUNNING, buf1, - CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrNo) + CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30, false) == CMsgBox::mbrNo) toDelete = false; else { CTimerd::RecordingStopInfo recinfo; @@ -2266,7 +2266,7 @@ bool CMovieBrowser::onDelete(bool cursor_only) if (!dellist.empty()) { bool skipAsk = false; if (dellist_cnt > 1) - skipAsk = (ShowMsg(LOCALE_FILEBROWSER_DELETE, LOCALE_MOVIEBROWSER_DELETE_ALL, CMessageBox::mbrNo, CMessageBox:: mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes); + skipAsk = (ShowMsg(LOCALE_FILEBROWSER_DELETE, LOCALE_MOVIEBROWSER_DELETE_ALL, CMsgBox::mbrNo, CMsgBox:: mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes); for (dellist_it = dellist.begin(); dellist_it != dellist.end(); ++dellist_it) result |= onDeleteFile((MI_MOVIE_INFO *)&(*dellist_it), skipAsk); dellist.clear(); @@ -3608,7 +3608,7 @@ int CYTCacheSelectorTarget::exec(CMenuTarget* /*parent*/, const std::string & ac cYTCache::getInstance()->remove(&movieBrowser->yt_completed[selected - movieBrowser->yt_completed_offset]); } else if (actionKey.empty()) { if (movieBrowser->yt_pending_offset && selected >= movieBrowser->yt_pending_offset && selected < movieBrowser->yt_pending_end) { - if (ShowMsg (LOCALE_MOVIEBROWSER_YT_CACHE, g_Locale->getText(LOCALE_MOVIEBROWSER_YT_CANCEL_TRANSFER), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes) + if (ShowMsg (LOCALE_MOVIEBROWSER_YT_CACHE, g_Locale->getText(LOCALE_MOVIEBROWSER_YT_CANCEL_TRANSFER), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes) cYTCache::getInstance()->cancel(&movieBrowser->yt_pending[selected - movieBrowser->yt_pending_offset]); else return menu_return::RETURN_NONE; diff --git a/src/gui/moviebrowser/mb_help.h b/src/gui/moviebrowser/mb_help.h index dc77e86d1..b16a1dd47 100644 --- a/src/gui/moviebrowser/mb_help.h +++ b/src/gui/moviebrowser/mb_help.h @@ -51,21 +51,31 @@ class CMovieHelp : public CMenuTarget int exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) { - Helpbox helpbox; - helpbox.addLine(NEUTRINO_ICON_BUTTON_RED, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_RED)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_GREEN, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_GREEN)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_YELLOW, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_YELLOW)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_BLUE, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_BLUE)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_MENU_SMALL,g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_MENU)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_PLAY)); - helpbox.addLine(""); - helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_OKAY)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_MUTE_SMALL,g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_MUTE)); - helpbox.addLine(""); - helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_LEFT)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_RIGHT)); - helpbox.show(LOCALE_MESSAGEBOX_INFO); - return(0); + Helpbox helpbox(g_Locale->getText(LOCALE_HELP_BOX_TITLE)); + helpbox.addLine("Standard functions", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addSeparatorLine(); + helpbox.addLine(NEUTRINO_ICON_BUTTON_RED, "Change sort", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_GREEN, "Show filter window", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_YELLOW, "Changing the active window", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_BLUE, "Reload recording info", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_MENU, "Open Moviebrowser menue", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine("+/- Change view", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addSeparator(); +#if 0 + helpbox.addPagebreak(); +#endif + helpbox.addLine("During playback", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addSeparatorLine(); + helpbox.addLine(NEUTRINO_ICON_BUTTON_BLUE, "Marking menu", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_0, "Not perform marking action", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + + helpbox.addExitKey(CRCInput::RC_ok); + + helpbox.show(); + int ret = helpbox.exec(); + helpbox.hide(); + + return ret; } }; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 12e74be70..960022af5 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -2187,7 +2187,7 @@ void CMoviePlayerGui::UpdatePosition() void CMoviePlayerGui::showHelpTS() { - Helpbox helpbox; + Helpbox helpbox(g_Locale->getText(LOCALE_MESSAGEBOX_INFO)); helpbox.addLine(NEUTRINO_ICON_BUTTON_RED, g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP1)); helpbox.addLine(NEUTRINO_ICON_BUTTON_GREEN, g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP2)); helpbox.addLine(NEUTRINO_ICON_BUTTON_YELLOW, g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP3)); @@ -2200,7 +2200,7 @@ void CMoviePlayerGui::showHelpTS() helpbox.addLine(NEUTRINO_ICON_BUTTON_7, g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP10)); helpbox.addLine(NEUTRINO_ICON_BUTTON_9, g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP11)); helpbox.addLine(g_Locale->getText(LOCALE_MOVIEPLAYER_TSHELP12)); - helpbox.show(LOCALE_MESSAGEBOX_INFO); + helpbox.show(); } void CMoviePlayerGui::selectChapter() diff --git a/src/gui/network_setup.cpp b/src/gui/network_setup.cpp index 717ee4098..a3b652e36 100644 --- a/src/gui/network_setup.cpp +++ b/src/gui/network_setup.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include @@ -132,13 +132,13 @@ int CNetworkSetup::exec(CMenuTarget* parent, const std::string &actionKey) } else if(actionKey=="restore") { - int result = ShowMsg(LOCALE_MAINSETTINGS_NETWORK, g_Locale->getText(LOCALE_NETWORKMENU_RESET_SETTINGS_NOW), CMessageBox::mbrNo, - CMessageBox::mbYes | - CMessageBox::mbNo , + int result = ShowMsg(LOCALE_MAINSETTINGS_NETWORK, g_Locale->getText(LOCALE_NETWORKMENU_RESET_SETTINGS_NOW), CMsgBox::mbrNo, + CMsgBox::mbYes | + CMsgBox::mbNo , NEUTRINO_ICON_QUESTION, width); - if (result == CMessageBox::mbrYes) { + if (result == CMsgBox::mbrYes) { restoreNetworkSettings(); } return res; @@ -552,7 +552,7 @@ bool CNetworkSetup::checkForIP() printf("[network setup] empty address %s\n", g_Locale->getText(n_settings[i].addr_name)); char msg[64]; snprintf(msg, 64, g_Locale->getText(LOCALE_NETWORKMENU_ERROR_NO_ADDRESS), g_Locale->getText(n_settings[i].addr_name)); - ShowMsg(LOCALE_MAINSETTINGS_NETWORK, msg, CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_ERROR, width); + ShowMsg(LOCALE_MAINSETTINGS_NETWORK, msg, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR, width); return false; } } @@ -595,21 +595,21 @@ void CNetworkSetup::applyNetworkSettings() int CNetworkSetup::saveChangesDialog() { // Save the settings after changes, if user wants to! - int result = ShowMsg(LOCALE_MAINSETTINGS_NETWORK, g_Locale->getText(LOCALE_NETWORKMENU_APPLY_SETTINGS_NOW), CMessageBox::mbrYes, - CMessageBox::mbYes | - CMessageBox::mbNo , + int result = ShowMsg(LOCALE_MAINSETTINGS_NETWORK, g_Locale->getText(LOCALE_NETWORKMENU_APPLY_SETTINGS_NOW), CMsgBox::mbrYes, + CMsgBox::mbYes | + CMsgBox::mbNo , NEUTRINO_ICON_QUESTION, width); switch(result) { - case CMessageBox::mbrYes: + case CMsgBox::mbrYes: if (!checkForIP()) return menu_return::RETURN_REPAINT; return exec(NULL, "networkapply"); break; - case CMessageBox::mbrNo: //no + case CMsgBox::mbrNo: //no return exec(NULL, "restore"); break; } @@ -694,7 +694,7 @@ void CNetworkSetup::showCurrentNetworkSettings() + g_Locale->getText(LOCALE_NETWORKMENU_NAMESERVER) + ": " + nameserver + '\n' + g_Locale->getText(LOCALE_NETWORKMENU_GATEWAY ) + ": " + router; } - ShowMsg(LOCALE_NETWORKMENU_SHOW, text, CMessageBox::mbrBack, CMessageBox::mbBack); // UTF-8 + ShowMsg(LOCALE_NETWORKMENU_SHOW, text, CMsgBox::mbrBack, CMsgBox::mbBack); // UTF-8 } const char * CNetworkSetup::mypinghost(std::string &host) @@ -790,7 +790,7 @@ void CNetworkSetup::testNetworkSettings() } } - ShowMsg(LOCALE_NETWORKMENU_TEST, text, CMessageBox::mbrBack, CMessageBox::mbBack); // UTF-8 + ShowMsg(LOCALE_NETWORKMENU_TEST, text, CMsgBox::mbrBack, CMsgBox::mbBack); // UTF-8 } int CNetworkSetup::showWlanList() @@ -804,7 +804,7 @@ int CNetworkSetup::showWlanList() bool found = get_wlan_list(g_settings.ifname, networks); hintBox.hide(); if (!found) { - ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_NETWORKMENU_SSID_SCAN_ERROR), CMessageBox::mbrBack, CMessageBox::mbBack); // UTF-8 + ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_NETWORKMENU_SSID_SCAN_ERROR), CMsgBox::mbrBack, CMsgBox::mbBack); // UTF-8 return res; } diff --git a/src/gui/opkg_manager.cpp b/src/gui/opkg_manager.cpp index a0605f430..b3df893e8 100644 --- a/src/gui/opkg_manager.cpp +++ b/src/gui/opkg_manager.cpp @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include @@ -158,7 +158,7 @@ int COPKGManager::exec(CMenuTarget* parent, const string &actionKey) char loc[200]; snprintf(loc, sizeof(loc), g_Locale->getText(LOCALE_OPKG_MESSAGEBOX_REMOVE), pkg_vec[selected]->name.c_str()); - if (ShowMsg(LOCALE_OPKG_TITLE, loc, CMessageBox::mbrCancel, CMessageBox::mbYes | CMessageBox::mbCancel) != CMessageBox::mbrCancel) { + if (ShowMsg(LOCALE_OPKG_TITLE, loc, CMsgBox::mbrCancel, CMsgBox::mbYes | CMsgBox::mbCancel) != CMsgBox::mbrCancel) { if (parent) parent->hide(); execCmd(pkg_types[OM_REMOVE] + pkg_vec[selected]->name, CShellWindow::VERBOSE | CShellWindow::ACKNOWLEDGE_EVENT); @@ -239,7 +239,7 @@ int COPKGManager::exec(CMenuTarget* parent, const string &actionKey) char l[200]; snprintf(l, sizeof(l), g_Locale->getText(LOCALE_OPKG_MESSAGEBOX_REINSTALL), actionKey.c_str()); l[sizeof(l) - 1] = 0; - if (ShowMsg(LOCALE_OPKG_TITLE, l, CMessageBox::mbrCancel, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel) + if (ShowMsg(LOCALE_OPKG_TITLE, l, CMsgBox::mbrCancel, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel) return res; force = "--force-reinstall "; } @@ -577,11 +577,11 @@ int COPKGManager::showMenu() */ //restart neutrino: user decision if(!access( "/tmp/.restart", F_OK)){ - int msg = ShowMsg(LOCALE_OPKG_TITLE, g_Locale->getText(LOCALE_OPKG_SUCCESS_INSTALL), CMessageBox::mbrNo, - CMessageBox::mbYes | CMessageBox::mbNo, + int msg = ShowMsg(LOCALE_OPKG_TITLE, g_Locale->getText(LOCALE_OPKG_SUCCESS_INSTALL), CMsgBox::mbrNo, + CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_QUESTION, width); - if (msg == CMessageBox::mbrYes) + if (msg == CMsgBox::mbrYes) exit_action = "restart"; } //restart neutrino: forced @@ -971,8 +971,8 @@ bool COPKGManager::installPackage(const string& pkg_name, string options, bool f DisplayErrorMessage("Can't download package. Check network!"); break; case OM_UNSATISFIED_DEPS_ERR:{ - int msgRet = ShowMsg("Installation", "Unsatisfied deps while installation! Try to repeat to force dependencies!", CMessageBox::mbrCancel, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 600, -1); - if (msgRet == CMessageBox::mbrYes) + int msgRet = ShowMsg("Installation", "Unsatisfied deps while installation! Try to repeat to force dependencies!", CMsgBox::mbrCancel, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 600, -1); + if (msgRet == CMsgBox::mbrYes) return installPackage(pkg_name, "--force-depends"); break; } diff --git a/src/gui/personalize.cpp b/src/gui/personalize.cpp index ff36b8ef7..243f1584e 100644 --- a/src/gui/personalize.cpp +++ b/src/gui/personalize.cpp @@ -170,7 +170,7 @@ #include #include #include -#include "widget/messagebox.h" +#include "widget/msgbox.h" #include "widget/hintbox.h" #include "widget/keychooser.h" #include "color.h" @@ -734,13 +734,15 @@ bool CPersonalizeGui::changeNotify(const neutrino_locale_t locale, void *data) //shows a short help message void CPersonalizeGui::ShowHelpPersonalize() { - Helpbox helpbox; + Helpbox helpbox(g_Locale->getText(LOCALE_PERSONALIZE_HELP)); for (int i = (int)LOCALE_PERSONALIZE_HELP_LINE1; i<= (int)LOCALE_PERSONALIZE_HELP_LINE8; i++) - helpbox.addLine(g_Locale->getText((neutrino_locale_t)i)); + helpbox.addLine(g_Locale->getText((neutrino_locale_t)i), CTextBox::CENTER); - - helpbox.show(LOCALE_PERSONALIZE_HELP); + helpbox.addExitKey(CRCInput::RC_ok); + helpbox.show(); + helpbox.exec(); + helpbox.hide(); } void CPersonalizeGui::ApplySettings() @@ -763,7 +765,7 @@ void CPersonalizeGui::SaveAndExit() ApplySettings(); return; } - if (ShowMsg(LOCALE_PERSONALIZE_HEAD, g_Locale->getText(LOCALE_PERSONALIZE_APPLY_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_QUESTION) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_PERSONALIZE_HEAD, g_Locale->getText(LOCALE_PERSONALIZE_APPLY_SETTINGS), CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_QUESTION) == CMsgBox::mbrYes) { CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_MAINSETTINGS_SAVESETTINGSNOW_HINT)); // UTF-8 hintBox.paint(); @@ -772,7 +774,7 @@ void CPersonalizeGui::SaveAndExit() } else { - if (ShowMsg(LOCALE_PERSONALIZE_HEAD, g_Locale->getText(LOCALE_MESSAGEBOX_DISCARD), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_QUESTION) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_PERSONALIZE_HEAD, g_Locale->getText(LOCALE_MESSAGEBOX_DISCARD), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_QUESTION) == CMsgBox::mbrYes) exec(NULL, "restore"); } } diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index dc4344012..d7cc78419 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -56,7 +56,7 @@ #include #include #include -#include +#include // remove this #include @@ -845,7 +845,7 @@ void CPictureViewerGui::endView() void CPictureViewerGui::deletePicFile(unsigned int index, bool mode) { CVFD::getInstance()->showMenuText(0, playlist[index].Name.c_str()); - if (ShowMsg(LOCALE_FILEBROWSER_DELETE, playlist[index].Filename, CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo)==CMessageBox::mbrYes) + if (ShowMsg(LOCALE_FILEBROWSER_DELETE, playlist[index].Filename, CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)==CMsgBox::mbrYes) { unlink(playlist[index].Filename.c_str()); printf("[ %s ] delete file: %s\r\n",__FUNCTION__,playlist[index].Filename.c_str()); @@ -860,7 +860,7 @@ void CPictureViewerGui::deletePicFile(unsigned int index, bool mode) void CPictureViewerGui::showHelp() { - Helpbox helpbox; + Helpbox helpbox(g_Locale->getText(LOCALE_MESSAGEBOX_INFO)); helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP1)); helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP2)); helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); @@ -871,30 +871,29 @@ void CPictureViewerGui::showHelp() helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP7)); helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); - helpbox.addPagebreak(); - helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP9)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP10)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP11)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP12)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_1, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP13)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_3, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP14)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_2, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP15)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_4, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP16)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_6, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP17)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_8, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP18)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP19)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); - if(audioplayer) - { - helpbox.addPagebreak(); - helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP30)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP31)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_PAUSE, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP32)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_STOP, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP33)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_FORWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP34)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_BACKWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP35)); - } - hide(); - helpbox.show(LOCALE_MESSAGEBOX_INFO); +// helpbox.addPagebreak(); +// helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP9)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP10)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP11)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP12)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_1, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP13)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_3, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP14)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_2, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP15)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_4, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP16)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_6, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP17)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_8, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP18)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP19)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); +// if(audioplayer) +// { +// helpbox.addPagebreak(); +// helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP30)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP31)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_PAUSE, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP32)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_STOP, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP33)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_FORWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP34)); +// helpbox.addLine(NEUTRINO_ICON_BUTTON_BACKWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP35)); +// } + helpbox.show(); } diff --git a/src/gui/pipsetup.cpp b/src/gui/pipsetup.cpp index 6be220ec7..d6120cec2 100644 --- a/src/gui/pipsetup.cpp +++ b/src/gui/pipsetup.cpp @@ -3,7 +3,7 @@ #endif #include -#include +#include #include #include diff --git a/src/gui/pluginlist.cpp b/src/gui/pluginlist.cpp index 4e5dcaabc..18db834ec 100644 --- a/src/gui/pluginlist.cpp +++ b/src/gui/pluginlist.cpp @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include @@ -77,7 +77,7 @@ int CPluginList::run() g_PluginList->startPlugin(number); if (!g_PluginList->getScriptOutput().empty()) { hide(); - ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_SHELL); + ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_SHELL); } return menu_return::RETURN_REPAINT; } @@ -168,7 +168,7 @@ int CPluginsExec::exec(CMenuTarget* parent, const std::string & actionKey) g_PluginList->startPlugin(sel); if (!g_PluginList->getScriptOutput().empty()) - ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_SHELL); + ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_SHELL); if (g_PluginList->getIntegration(sel) == CPlugins::I_TYPE_DISABLED) return menu_return::RETURN_EXIT; diff --git a/src/gui/rc_lock.cpp b/src/gui/rc_lock.cpp index 354a89caa..add7f0463 100644 --- a/src/gui/rc_lock.cpp +++ b/src/gui/rc_lock.cpp @@ -31,7 +31,8 @@ #include #include -#include +#include + const std::string CRCLock::NO_USER_INPUT = "NO_USER_INPUT"; @@ -74,15 +75,15 @@ int CRCLock::exec(CMenuTarget* parent, const std::string &actionKey) char lock_msg[1024]; snprintf(lock_msg, sizeof(lock_msg)-1, g_Locale->getText(LOCALE_RCLOCK_LOCKMSG), key_unlock.c_str()); - if (ShowMsg(LOCALE_RCLOCK_TITLE, lock_msg, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel, - NEUTRINO_ICON_INFO, 450, no_input ? 5 : -1, no_input) == CMessageBox::mbrCancel) + if (ShowMsg(LOCALE_RCLOCK_TITLE, lock_msg, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel, + NEUTRINO_ICON_INFO, 450, no_input ? 5 : -1, no_input) == CMsgBox::mbrCancel) return menu_return::RETURN_EXIT_ALL; locked = true; lockRC(); locked = false; - ShowMsg(LOCALE_RCLOCK_TITLE, LOCALE_RCLOCK_UNLOCKMSG, CMessageBox::mbrBack, CMessageBox::mbBack, + ShowMsg(LOCALE_RCLOCK_TITLE, LOCALE_RCLOCK_UNLOCKMSG, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO, 450, no_input ? 5 : -1); return menu_return::RETURN_EXIT_ALL; } diff --git a/src/gui/record_setup.cpp b/src/gui/record_setup.cpp index 89a5c714d..00ef84383 100644 --- a/src/gui/record_setup.cpp +++ b/src/gui/record_setup.cpp @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include #include @@ -85,7 +85,7 @@ int CRecordSetup::exec(CMenuTarget* parent, const std::string &actionKey) } else if(actionKey == "help_recording") { - ShowMsg(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMessageBox::mbrBack, CMessageBox::mbBack); + ShowMsg(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMsgBox::mbrBack, CMsgBox::mbBack); return res; } else if(actionKey == "recordingdir") diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index f3b48ea68..e22733be7 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include @@ -327,7 +327,7 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) else if(msg == CRCInput::RC_home) { if(manual && !scansettings.scan_nit_manual) continue; - if (ShowMsg(LOCALE_SCANTS_ABORT_HEADER, LOCALE_SCANTS_ABORT_BODY, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo) == CMessageBox::mbrYes) { + if (ShowMsg(LOCALE_SCANTS_ABORT_HEADER, LOCALE_SCANTS_ABORT_BODY, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo) == CMsgBox::mbrYes) { g_Zapit->stopScan(); } } diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 5ad95d794..6cfb80c05 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -371,7 +371,7 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) else if(actionKey == "reloadchannels") { printf("[neutrino] CScanSetup::%s reloadchannels...\n", __FUNCTION__); - CHintBox chb(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SERVICEMENU_RELOAD_HINT)); + CHint chb(LOCALE_SERVICEMENU_RELOAD_HINT); chb.paint(); /* save if changed, to make sure NEW/REMOVED/... flags are updated */ CServiceManager::getInstance()->SaveServices(true, true); diff --git a/src/gui/screensetup.cpp b/src/gui/screensetup.cpp index 9b446f0cd..b1327fed2 100644 --- a/src/gui/screensetup.cpp +++ b/src/gui/screensetup.cpp @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include @@ -136,7 +136,7 @@ int CScreenSetup::exec(CMenuTarget* parent, const std::string &) ( g_settings.screen_EndX != x_coord[1] ) || ( g_settings.screen_StartY != y_coord[0] ) || ( g_settings.screen_EndY != y_coord[1] ) ) && - (ShowMsg(LOCALE_VIDEOMENU_SCREENSETUP, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel)) + (ShowMsg(LOCALE_VIDEOMENU_SCREENSETUP, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) break; case CRCInput::RC_timeout: diff --git a/src/gui/settings_manager.cpp b/src/gui/settings_manager.cpp index ebb1d8515..5c5ff7a4f 100644 --- a/src/gui/settings_manager.cpp +++ b/src/gui/settings_manager.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include @@ -116,7 +116,7 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) my_system(2, backup_sh, fileBrowser.getSelectedFile()->Name.c_str()); } else - ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_SETTINGS_BACKUP_FAILED),CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_SETTINGS_BACKUP_FAILED),CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_ERROR); } return res; } @@ -126,8 +126,8 @@ int CSettingsManager::exec(CMenuTarget* parent, const std::string &actionKey) fileBrowser.Filter = &fileFilter; if (fileBrowser.exec("/media") == true) { - int result = ShowMsg(LOCALE_SETTINGS_RESTORE, g_Locale->getText(LOCALE_SETTINGS_RESTORE_WARN), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo); - if(result == CMessageBox::mbrYes) + int result = ShowMsg(LOCALE_SETTINGS_RESTORE, g_Locale->getText(LOCALE_SETTINGS_RESTORE_WARN), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); + if(result == CMsgBox::mbrYes) { const char restore_sh[] = "/bin/restore.sh"; printf("restore: executing [%s %s]\n", restore_sh, fileBrowser.getSelectedFile()->Name.c_str()); diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index dddbc7ece..ffe812ca8 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -51,7 +51,7 @@ #include #include -#include +#include #include @@ -92,7 +92,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) CSettingsManager settingsManager(SNeutrinoSettings::WIZARD_START); settingsManager.exec(NULL, ""); - if(ShowMsg (LOCALE_WIZARD_WELCOME_HEAD, g_Locale->getText(LOCALE_WIZARD_WELCOME_TEXT), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbrCancel) == CMessageBox::mbrYes) + if(ShowMsg (LOCALE_WIZARD_WELCOME_HEAD, g_Locale->getText(LOCALE_WIZARD_WELCOME_TEXT), CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbrCancel) == CMsgBox::mbrYes) { int advanced = 1; #ifdef ENABLE_FASTSCAN @@ -132,7 +132,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) if(advanced && init_settings && (res != menu_return::RETURN_EXIT_ALL)) { if (ShowMsg(LOCALE_WIZARD_INITIAL_SETTINGS, g_Locale->getText(LOCALE_WIZARD_INSTALL_SETTINGS), - CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { + CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrYes) { system("/bin/cp " CONFIGDIR "/initial/* " CONFIGDIR "/zapit/"); CFEManager::getInstance()->loadSettings(); CFEManager::getInstance()->saveSettings(); diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 8769c4120..332489810 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -47,13 +48,13 @@ #include #include -#include +#include #include #include #include #include #include -#include + #include #include #include @@ -145,7 +146,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) text[12*len] = 0; CVFD::getInstance()->ShowText(text); - ShowMsg(LOCALE_MESSAGEBOX_INFO, "VFD test, Press OK to return", CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "VFD test, Press OK to return", CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); CVFD::getInstance()->Clear(); return res; @@ -185,7 +186,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) close(fd); - ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); return res; } @@ -196,17 +197,17 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) switch(ret) { case 0: - ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMsgBox::mbrBack, CMsgBox::mbBack, "info.raw"); break; case -1: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 ATR read failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 ATR read failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; case -2: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 reset failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 reset failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; default: case -3: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 open failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 open failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; } @@ -219,17 +220,17 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) switch(ret) { case 0: - ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, str, CMsgBox::mbrBack, CMsgBox::mbBack, "info.raw"); break; case -1: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 ATR read failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 ATR read failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; case -2: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 reset failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 reset failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; default: case -3: - ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 open failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); + ShowMsg(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 open failed", CMsgBox::mbrBack, CMsgBox::mbBack, "info"); break; } @@ -252,7 +253,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) sprintf(buffer, "HDD: /dev/sda1 is %s", mounted ? "mounted" : "NOT mounted"); printf("%s\n", buffer); - ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); return res; } @@ -273,7 +274,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) sprintf(buffer, "MMC: /dev/mmcblk0p1 is %s", mounted ? "mounted" : "NOT mounted"); printf("%s\n", buffer); - ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); return res; } @@ -631,10 +632,11 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) else if (actionKey == "window"){ if (window == NULL){ window = new CComponentsWindow(); - window->setWindowCaption("|.....................|"); + window->setWindowCaption("|........HEADER........|", CTextBox::CENTER); window->setDimensionsAll(50, 50, 500, 500); window->setWindowIcon(NEUTRINO_ICON_INFO); window->enableShadow(); + window->getFooterObject()->setCaption("|........FOOTER........|", CTextBox::CENTER); CComponentsShapeCircle *c10 = new CComponentsShapeCircle(0, 0, 28); CComponentsShapeCircle *c11 = new CComponentsShapeCircle(0, CC_APPEND, 28); @@ -655,10 +657,20 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) c14->setColorBody(COL_RED); c14->setPageNumber(1); window->addWindowItem(c14); - } - else{ - window->setWindowIcon(NEUTRINO_ICON_LOCK); - window->setWindowCaption("Test"); + + CComponentsExtTextForm *text_1 = new CComponentsExtTextForm(); + text_1->setDimensionsAll(10, CC_CENTERED, 380, 48); + text_1->setLabelAndText("Page", "Number 1", g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + text_1->setFrameThickness(2); + text_1->setPageNumber(0); + window->addWindowItem(text_1); + + CComponentsExtTextForm *text_2 = new CComponentsExtTextForm(); + text_2->setDimensionsAll(10, 200, 380, 48); + text_2->setLabelAndText("Page", "Number 2", g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + text_2->setFrameThickness(2); + text_2->setPageNumber(1); + window->addWindowItem(text_2); } #if 0 if (!window->isPainted()){ @@ -666,10 +678,12 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } else{ #endif //or paint direct a defined page - if (window->getCurrentPage() == 1) - window->paintPage(0); - else - window->paintPage(1); +// if (window->getCurrentPage() == 1) + window->enablePageScroll(CComponentsWindow::PG_SCROLL_M_UP_DOWN_KEY | CComponentsWindow::PG_SCROLL_M_LEFT_RIGHT_KEY); + window->enableSidebar(); + window->paint(); + window->getBodyObject()->exec(); + window->hide(); #if 0 } #endif @@ -711,17 +725,104 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } return res; } + else if (actionKey == "hintbox_test") + { + ShowHint("Testmenu: Hintbox popup test", "Test for HintBox,\nPlease press any key or wait some seconds! ...", 700, 10, NULL, NEUTRINO_ICON_HINT_IMAGEINFO, CComponentsHeader::CC_BTN_EXIT); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_yes_no") + { + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press key! ...", CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 500, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_cancel"){ + CMsgBox * msgBox = new CMsgBox("Testmenu: MsgBox exit test", "Please press key"); +// msgBox->setTimeOut(g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR]); + msgBox->paint(); + res = msgBox->exec(); + msgBox->hide(); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgBox->getResult()); + delete msgBox; + + ShowHint("MsgBox test returns", msg_txt.c_str(), 700, 10, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); + + return res; + } + else if (actionKey == "msgbox_test_all"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press key! ...", CMsgBox::mbrOk, CMsgBox::mbAll, NULL, 700, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_yes_no_cancel"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press key! ...", CMsgBox::mbrCancel, CMsgBox::mbYes | CMsgBox::mbNo | CMsgBox::mbCancel, NULL, 500, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_ok_cancel"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press key! ...", CMsgBox::mbrOk, CMsgBox::mbOk | CMsgBox::mbCancel, NULL, 500, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_ok"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press ok key! ...", CMsgBox::mbrOk, CMsgBox::mbOk, NULL, 500, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_test_cancel_timeout"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press ok key or wait! ...", CMsgBox::mbrCancel, CMsgBox::mbOKCancel, NULL, 500, 6, true); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_error"){ + DisplayErrorMessage("Error Test!"); + return menu_return::RETURN_REPAINT; + } + else if (actionKey == "msgbox_info"){ + DisplayInfoMessage("Info Test!"); + return menu_return::RETURN_REPAINT; + } else if (actionKey == "footer_key"){ neutrino_msg_t msg; neutrino_msg_data_t data; - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Footer-Key pressed. Press EXIT to return"); + CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Footer-Key pressed. Press EXIT to return", 350, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); + + //optional: it is also possible to add more items into the hint box + //here some examples: + hintBox->addHintItem(new CComponentsShapeSquare(CC_CENTERED, CC_APPEND, 330, 2, NULL, false, COL_MENUCONTENT_PLUS_6, COL_RED)); + hintBox->addHintItem("- text with left icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, NEUTRINO_ICON_HINT_INFO); + hintBox->addHintItem("- text right without an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT); + hintBox->addHintItem("- text right with an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT, NEUTRINO_ICON_HINT_INFO); + hintBox->paint(); while (1) { g_RCInput->getMsg(&msg, &data, 100); if (msg == CRCInput::RC_home) + hintBox->hide(); break; } + hintBox->hide(); delete hintBox; return res; @@ -760,6 +861,11 @@ int CTestMenu::showTestMenu() f_bi->setHint(NEUTRINO_ICON_HINT_IMAGEINFO, LOCALE_MENU_HINT_BUILDINFO); w_test.addItem(f_bi); + //msg/hintbox + CMenuWidget * w_msg = new CMenuWidget("MsgBox/Hint-Tests", NEUTRINO_ICON_INFO, width, MN_WIDGET_ID_TESTMENU_HINT_MSG_TESTS); + w_test.addItem(new CMenuForwarder(w_msg->getName(), true, NULL, w_msg)); + showMsgTests(w_msg); + //footer buttons static const struct button_label footerButtons[2] = { { NEUTRINO_ICON_BUTTON_RED, LOCALE_COLORCHOOSER_RED }, @@ -852,3 +958,20 @@ void CTestMenu::showHWTests(CMenuWidget *widget) CFEManager::getInstance()->linkFrontends(true); #endif } + +void CTestMenu::showMsgTests(CMenuWidget *widget) +{ + widget->addIntroItems(); + widget->addItem(new CMenuForwarder("HintBox test!", true, NULL, this, "hintbox_test")); + widget->addItem(new CMenuSeparator(CMenuSeparator::STRING | CMenuSeparator::LINE, "MsgBox")); + widget->addItem(new CMenuForwarder("cancel on timeout", true, NULL, this, "msgbox_test_cancel_timeout")); + widget->addItem(new CMenuForwarder("yes no", true, NULL, this, "msgbox_test_yes_no")); + widget->addItem(new CMenuForwarder("cancel", true, NULL, this, "msgbox_test_cancel")); + widget->addItem(new CMenuForwarder("ok", true, NULL, this, "msgbox_test_ok")); + widget->addItem(new CMenuForwarder("ok cancel", true, NULL, this, "msgbox_test_ok_cancel")); + widget->addItem(new CMenuForwarder("yes no cancel", true, NULL, this, "msgbox_test_yes_no_cancel")); + widget->addItem(new CMenuForwarder("all", true, NULL, this, "msgbox_test_all")); + widget->addItem(new CMenuSeparator(CMenuSeparator::STRING | CMenuSeparator::LINE, "Error/Info")); + widget->addItem(new CMenuForwarder("Error Message!", true, NULL, this, "msgbox_error")); + widget->addItem(new CMenuForwarder("Info Message!", true, NULL, this, "msgbox_info")); +} diff --git a/src/gui/test_menu.h b/src/gui/test_menu.h index e7196d29f..1b09192b0 100644 --- a/src/gui/test_menu.h +++ b/src/gui/test_menu.h @@ -59,7 +59,7 @@ class CTestMenu : public CMenuTarget int showTestMenu(); void showHWTests(CMenuWidget *widget); void showCCTests(CMenuWidget *widget); - + void showMsgTests(CMenuWidget *widget); public: CTestMenu(); ~CTestMenu(); diff --git a/src/gui/themes.cpp b/src/gui/themes.cpp index cd611c9a0..eba23ef63 100644 --- a/src/gui/themes.cpp +++ b/src/gui/themes.cpp @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include @@ -182,7 +182,7 @@ int CThemes::Show() } if (hasThemeChanged) { - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_COLORTHEMEMENU_QUESTION, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_SETTINGS) != CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_COLORTHEMEMENU_QUESTION, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_SETTINGS) != CMsgBox::mbrYes) rememberOldTheme( false ); else hasThemeChanged = false; diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 70d603a02..7500f3267 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -61,7 +61,7 @@ #include #include #include -#include +#include #include #include #include @@ -679,7 +679,7 @@ bool CTimerList::remoteChanExists(t_channel_id channel_id) if (r_url == "false") ShowMsg(LOCALE_REMOTEBOX_CHANNEL_NA, convertChannelId2String(channel_id), - CMessageBox::mbrOk, CMessageBox::mbOk, NULL, 450, 30, false); + CMsgBox::mbrOk, CMsgBox::mbOk, NULL, 450, 30, false); return (r_url == "true"); } @@ -879,7 +879,7 @@ int CTimerList::show() title = "(" + epgdata.title + ")\n"; snprintf(buf1, sizeof(buf1)-1, g_Locale->getText(LOCALE_TIMERLIST_ASK_TO_DELETE), title.c_str()); if(ShowMsg(LOCALE_RECORDINGMENU_RECORD_IS_RUNNING, buf1, - CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrNo) { + CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrNo) { killTimer = false; update = false; } @@ -1529,7 +1529,7 @@ int CTimerList::modifyTimer() } if (modified) { - if (ShowMsg(LOCALE_TIMERLIST_SAVE, LOCALE_PERSONALIZE_APPLY_SETTINGS, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 20, true) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_TIMERLIST_SAVE, LOCALE_PERSONALIZE_APPLY_SETTINGS, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 20, true) == CMsgBox::mbrYes) exec(NULL, "modifytimer"); } @@ -1729,8 +1729,8 @@ bool CTimerList::askUserOnRemoteTimerConflict(time_t announceTime, time_t stopTi struct tm *sTime = localtime(&(it->stopTime)); timerbuf += strftime("%d.%m. %H:%M\n",sTime); } - if (overlappingTimers.size() > 0) - return (ShowMsg(LOCALE_MESSAGEBOX_INFO,timerbuf,CMessageBox::mbrNo,CMessageBox::mbNo|CMessageBox::mbYes) == CMessageBox::mbrYes); + if (!overlappingTimers.empty()) + return (ShowMsg(LOCALE_MESSAGEBOX_INFO,timerbuf,CMsgBox::mbrNo,CMsgBox::mbNo|CMsgBox::mbYes) == CMsgBox::mbrYes); else return true; } @@ -1787,7 +1787,7 @@ bool askUserOnTimerConflict(time_t announceTime, time_t stopTime, t_channel_id c // todo: localize message //g_Locale->getText(TIMERLIST_OVERLAPPING_MESSAGE); - return (ShowMsg(LOCALE_MESSAGEBOX_INFO,timerbuf,CMessageBox::mbrNo,CMessageBox::mbNo|CMessageBox::mbYes) == CMessageBox::mbrYes); + return (ShowMsg(LOCALE_MESSAGEBOX_INFO,timerbuf,CMsgBox::mbrNo,CMsgBox::mbNo|CMsgBox::mbYes) == CMsgBox::mbrYes); } else return true; diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 0d0aa41fc..503b6be55 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #include @@ -300,14 +300,16 @@ bool CFlashUpdate::selectHttpImage(void) if (urls.empty()) { - ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_FLASHUPDATE_GETINFOFILEERROR), CMessageBox::mbrOk, CMessageBox::mbOk); // UTF-8 + ShowMsg(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_FLASHUPDATE_GETINFOFILEERROR), CMsgBox::mbrOk, CMsgBox::mbOk); // UTF-8 return false; } if (notify) { - if(newfound) - ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_NEW_FOUND), CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); + if(!newfound) + ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_FLASHUPDATE_NEW_FOUND, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_INFO, MSGBOX_MIN_WIDTH, 6 ); +#if 0 else - ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_NEW_NOTFOUND), CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_FLASHUPDATE_NEW_NOTFOUND, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_INFO, MSGBOX_MIN_WIDTH, 6); +#endif } menu_ret = SelectionWidget.exec(NULL, ""); @@ -385,7 +387,7 @@ printf("[update] mode is %d\n", softupdate_mode); if(fileType < '3') { if ((strncmp(RELEASE_CYCLE, versionInfo->getReleaseCycle(), 2) != 0) && - (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_WRONGBASE), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes)) + (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_WRONGBASE), CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) != CMsgBox::mbrYes)) { delete versionInfo; //ShowHint(LOCALE_MESSAGEBOX_ERROR, g_Locale->getText(LOCALE_FLASHUPDATE_WRONGBASE)); // UTF-8 @@ -393,8 +395,8 @@ printf("[update] mode is %d\n", softupdate_mode); } if ((strcmp("Release", versionInfo->getType()) != 0) && - //(ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_EXPERIMENTALIMAGE), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes)) // UTF-8 - (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_FLASHUPDATE_EXPERIMENTALIMAGE, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes)) + //(ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_EXPERIMENTALIMAGE), CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) != CMsgBox::mbrYes)) // UTF-8 + (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_FLASHUPDATE_EXPERIMENTALIMAGE, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) != CMsgBox::mbrYes)) { delete versionInfo; return false; @@ -445,8 +447,8 @@ printf("[update] mode is %d\n", softupdate_mode); if (file_selected->getType() == CFile::FILE_PKG_PACKAGE){ COPKGManager opkg; if (opkg.hasOpkgSupport()){ - int msgres = ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_OPKG_WARNING_3RDPARTY_PACKAGES, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE, 700); // UTF-8 - if (msgres == CMessageBox::mbrYes){ + int msgres = ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_OPKG_WARNING_3RDPARTY_PACKAGES, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE, 700); // UTF-8 + if (msgres == CMsgBox::mbrYes){ if (!opkg.installPackage(UpdatesBrowser.getSelectedFile()->Name)) DisplayErrorMessage(g_Locale->getText(LOCALE_OPKG_FAILURE_INSTALL)); } @@ -476,7 +478,7 @@ printf("[update] mode is %d\n", softupdate_mode); strcpy(msg, g_Locale->getText(LOCALE_FLASHUPDATE_NOVERSION)); //never read msg_body = LOCALE_FLASHUPDATE_MSGBOX_MANUAL; } - return (ShowMsg(LOCALE_MESSAGEBOX_INFO, msg, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) == CMessageBox::mbrYes); // UTF-8 + return (ShowMsg(LOCALE_MESSAGEBOX_INFO, msg, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) == CMsgBox::mbrYes); // UTF-8 } int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) @@ -540,7 +542,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) return menu_return::RETURN_REPAINT; } if(softupdate_mode==1) { //internet-update - if ( ShowMsg(LOCALE_MESSAGEBOX_INFO, (fileType < '3') ? LOCALE_FLASHUPDATE_INSTALL_IMAGE : LOCALE_FLASHUPDATE_INSTALL_PACKAGE, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes) // UTF-8 + if ( ShowMsg(LOCALE_MESSAGEBOX_INFO, (fileType < '3') ? LOCALE_FLASHUPDATE_INSTALL_IMAGE : LOCALE_FLASHUPDATE_INSTALL_PACKAGE, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) != CMsgBox::mbrYes) // UTF-8 { hide(); return menu_return::RETURN_REPAINT; @@ -556,7 +558,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) //flash it... #ifndef BOXMODEL_APOLLO if (g_settings.apply_settings) { - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_APPLY_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) == CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_APPLY_SETTINGS), CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) == CMsgBox::mbrYes) if (!CExtUpdate::getInstance()->applySettings(filename, CExtUpdate::MODE_SOFTUPDATE)) { hide(); return menu_return::RETURN_REPAINT; @@ -593,7 +595,7 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) fread(buffer, (uint32_t)filesize, 1, fd); fclose(fd); buffer[filesize] = 0; - ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMessageBox::mbrBack, CMessageBox::mbBack); // UTF-8 + ShowMsg(LOCALE_MESSAGEBOX_INFO, buffer, CMsgBox::mbrBack, CMsgBox::mbBack); // UTF-8 free(buffer); } } @@ -861,7 +863,7 @@ void CFlashExpert::writemtd(const std::string & filename, int mtdNumber) FILESYSTEM_ENCODING_TO_UTF8_STRING(filename).c_str(), CMTDInfo::getInstance()->getMTDName(mtdNumber).c_str()); - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes) // UTF-8 + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE) != CMsgBox::mbrYes) // UTF-8 return; #ifdef VFD_UPDATE CVFD::getInstance()->showProgressBar2(0,"checking",0,"Update Neutrino"); @@ -1051,7 +1053,7 @@ int CFlashExpertSetup::exec(CMenuTarget* parent, const std::string &actionKey) // create image warning const char *box = (mtdInfo->getMTDEraseSize(mtdInfo->findMTDsystem()) == 0x40000) ? "Trinity" : "Tank"; snprintf(message, sizeof(message)-1, g_Locale->getText(LOCALE_FLASHUPDATE_CREATEIMAGE_WARNING), box, box); - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_UPDATE) != CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, message, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_UPDATE, 600) != CMsgBox::mbrYes) skipImage = true; } if (!skipImage) { diff --git a/src/gui/update_ext.cpp b/src/gui/update_ext.cpp index 3e6246d36..f92df2c7d 100644 --- a/src/gui/update_ext.cpp +++ b/src/gui/update_ext.cpp @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include #include @@ -549,7 +549,7 @@ bool CExtUpdate::checkSpecialFolders(std::string line, bool copy) neutrino_locale_t msg = (copy) ? LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_SKIPPED : LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_DEL_SKIPPED; snprintf(buf, sizeof(buf), g_Locale->getText(msg), line.c_str()); WRITE_UPDATE_LOG("%s%s", buf, "\n"); - ShowMsg(LOCALE_MESSAGEBOX_INFO, buf, CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_INFO); + ShowMsg(LOCALE_MESSAGEBOX_INFO, buf, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_INFO); return true; } return false; @@ -719,13 +719,13 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) memset(buf1, '\0', sizeof(buf1)); if (free3 <= flashError) { snprintf(buf1, sizeof(buf1)-1, g_Locale->getText(LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_ERROR), free3, total); - ShowMsg(LOCALE_MESSAGEBOX_ERROR, buf1, CMessageBox::mbrOk, CMessageBox::mbOk, NEUTRINO_ICON_ERROR); + ShowMsg(LOCALE_MESSAGEBOX_ERROR, buf1, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR); flashErrorFlag = true; return false; } else if (free3 <= flashWarning) { snprintf(buf1, sizeof(buf1)-1, g_Locale->getText(LOCALE_FLASHUPDATE_UPDATE_WITH_SETTINGS_WARNING), free3, total); - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, buf1, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_INFO) != CMessageBox::mbrYes) { + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, buf1, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_INFO) != CMsgBox::mbrYes) { flashErrorFlag = true; return false; } diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index faf85ed8b..f6c34630a 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include @@ -254,13 +254,13 @@ bool CUpnpBrowserGui::discoverDevices() catch (std::runtime_error error) { delete scanBox; - ShowMsg(LOCALE_MESSAGEBOX_INFO, error.what(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + DisplayErrorMessage(error.what()); return false; } delete scanBox; if (m_devices.empty()) { - ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_UPNPBROWSER_NOSERVERS, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + DisplayInfoMessage(g_Locale->getText(LOCALE_UPNPBROWSER_NOSERVERS)); return false; } return true; @@ -288,7 +288,7 @@ bool CUpnpBrowserGui::getResults(std::string id, unsigned int start, unsigned in } catch (std::runtime_error error) { - ShowMsg(LOCALE_MESSAGEBOX_INFO, error.what(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); + DisplayErrorMessage(error.what()); return false; } return true; diff --git a/src/gui/user_menue_setup.cpp b/src/gui/user_menue_setup.cpp index ac39d1393..8db4e8306 100644 --- a/src/gui/user_menue_setup.cpp +++ b/src/gui/user_menue_setup.cpp @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 144d6bfa1..5bfeeabe4 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include @@ -419,7 +419,7 @@ void CVideoSettings::setupVideoSystem(bool do_ask) if (prev_video_mode != g_settings.video_Mode) { frameBuffer->paintBackground(); - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_VIDEO_MODE_OK), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_INFO) != CMessageBox::mbrYes) + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_VIDEO_MODE_OK), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_INFO) != CMsgBox::mbrYes) { g_settings.video_Mode = prev_video_mode; videoDecoder->SetVideoSystem(g_settings.video_Mode); diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 0788d0319..17a932b04 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -20,14 +20,12 @@ libneutrino_gui_widget_a_SOURCES = \ drawable.cpp \ helpbox.cpp \ hintbox.cpp \ - hintboxext.cpp \ keychooser.cpp \ keyboard_input.cpp \ listbox.cpp \ listframe.cpp \ listhelpers.cpp \ menue.cpp \ - messagebox.cpp \ mountchooser.cpp \ msgbox.cpp \ shellwindow.cpp \ diff --git a/src/gui/widget/colorchooser.cpp b/src/gui/widget/colorchooser.cpp index a1eef250c..f7b90b371 100644 --- a/src/gui/widget/colorchooser.cpp +++ b/src/gui/widget/colorchooser.cpp @@ -43,7 +43,7 @@ #include #include -#include +#include #include @@ -218,7 +218,7 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &) } case CRCInput::RC_home: if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_ALPHA]) && (*(value[VALUE_ALPHA]) != a_alt))) && - (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel)) + (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) break; // sonst abbruch... diff --git a/src/gui/widget/helpbox.cpp b/src/gui/widget/helpbox.cpp index 43a854915..8d963e8e9 100644 --- a/src/gui/widget/helpbox.cpp +++ b/src/gui/widget/helpbox.cpp @@ -1,32 +1,24 @@ /* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + Implement CComponent-Windowclass. + Copyright (C) 2015 Thilo Graf 'dbt' 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 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. + 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. + along with this program. If not, see . */ @@ -34,78 +26,172 @@ #include #endif -#include -#include -#include #include #include +#include -Helpbox::Helpbox() +using namespace std; + +Helpbox::Helpbox( const string& Title, + const string& Default_Text, + const int& text_mode, + const int& line_space, + Font* default_font_text, + const char* Icon): + CComponentsWindowMax( Title, + Icon, + NULL, + CC_SHADOW_ON, + COL_MENUCONTENT_PLUS_6, + COL_MENUCONTENT_PLUS_0, + COL_MENUCONTENTDARK_PLUS_0) { + page = 0; + hbox_y = 1; + setWindowHeaderButtons(CComponentsHeader::CC_BTN_MENU | CComponentsHeader::CC_BTN_EXIT); + ccw_footer->setButtonLabel(NEUTRINO_ICON_BUTTON_HOME, LOCALE_MESSAGEBOX_BACK, 0, 150); + + hbox_font = default_font_text; + if (default_font_text == NULL) + hbox_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]; + + if (!Default_Text.empty()) + addLine(Default_Text.c_str(), Default_Text, text_mode, line_space, HELPBOX_DEFAULT_LINE_INDENT ,hbox_font); + + //ensure hided channellist, because shared RC_ok + CNeutrinoApp::getInstance()->allowChannelList(false); } -Helpbox::~Helpbox() + +void Helpbox::addLine(const std::string& icon, const std::string& text, const int& text_mode, const int& line_space, const int& line_indent, Font* font_text) { - for (ContentLines::iterator it = m_lines.begin(); - it != m_lines.end(); ++it) - { - for (std::vector::iterator it2 = it->begin(); - it2 != it->end(); ++it2) - { - delete *it2; - } - } + CComponentsItem *pre_item = !ccw_body->empty() ? ccw_body->back() : NULL; //get the last current item + + if (pre_item){ + if (pre_item->getPageNumber() == page) + hbox_y = pre_item->getYPos() + pre_item->getHeight(); + } + + int h_line = line_space; + Font* font = hbox_font; + if (font_text){ + h_line = max(h_line, font_text->getHeight()); + font = font_text; + } + + CComponentsFrmChain *line = new CComponentsFrmChain(line_indent, hbox_y, 0, h_line); + if ((hbox_y + h_line)>ccw_body->getHeight()){ + addPagebreak(); + line->setYPos(hbox_y); + } + line->setPageNumber(page); + + int w_body = ccw_body->getWidth(); + line->setWidth(w_body - line_indent - 40); + line->setXPos(line_indent); + line->setColorBody(ccw_body->getColorBody()); + + CComponentsPicture *picon = NULL; + int w_picon = 0; + if (!icon.empty()){ + picon = new CComponentsPicture (0, 0, icon); + w_picon = picon->getHeight(); + picon->setYPos(line->getHeight()/2 - w_picon/2); + line->addCCItem(picon); + } + + if (!text.empty()){ + int x_text = w_picon + (picon ? 10 : 0); + CComponentsText * txt = new CComponentsText(x_text, 0, line->getWidth()-x_text, line_space, text, text_mode, font); +#if 0 //"contrast agent", if you want to see where the text items are drawn. + txt->setColorBody(COL_RED); + txt->doPaintBg(true); +#endif + line->addCCItem(txt); + } + addWindowItem(line); } -void Helpbox::show(const neutrino_locale_t Caption, const int Width, int timeout) -{ - CMessageBox msgBox(Caption, m_lines, Width, NEUTRINO_ICON_INFO, CMessageBox::mbrBack,CMessageBox::mbBack); - msgBox.exec(timeout); + + +void Helpbox::addSeparatorLine(const int& line_space, const int& line_indent, bool enable_gradient) +{ + CComponentsItem *pre_item = !ccw_body->empty() ? ccw_body->back() : NULL; //get the last current item + + if (pre_item){ + if (pre_item->getPageNumber() == page) + hbox_y = pre_item->getYPos() + pre_item->getHeight(); + } + + int h_line = line_space; + + CComponentsFrmChain *line = new CComponentsFrmChain(line_indent, hbox_y, 0, h_line); + line->setPageNumber(page); + + int w_body = ccw_body->getWidth(); + line->setWidth(w_body - line_indent - 40); + line->setXPos(line_indent); + line->setColorBody(ccw_body->getColorBody()); + + CComponentsShapeSquare *sepline = new CComponentsShapeSquare (0, 0, line->getWidth(), 2); + sepline->setYPos(line->getHeight()/2 - sepline->getHeight()/2); + sepline->setColorBody(COL_MENUCONTENTINACTIVE_TEXT); + sepline->enableColBodyGradient(enable_gradient); + sepline->setColBodyGradient(CColorGradient::gradientLight2Dark, CFrameBuffer::gradientHorizontal, CColorGradient::light); + + line->addCCItem(sepline); + + addWindowItem(line); } -void Helpbox::addLine(const char *text) +void Helpbox::addSeparator(const int& line_space) { - std::vector v; - Drawable *d = new DText(text); - v.push_back(d); - m_lines.push_back(v); + CComponentsItem *pre_item = !ccw_body->empty() ? ccw_body->back() : NULL; //get the last current item + + if (pre_item){ + if (pre_item->getPageNumber() == page) + hbox_y = pre_item->getYPos() + pre_item->getHeight(); + } + + CComponentsFrmChain *line = new CComponentsFrmChain(0, hbox_y, 0, line_space); + line->setPageNumber(page); + + int w_body = ccw_body->getWidth(); + line->setWidth(w_body - 40); + line->setColorBody(ccw_body->getColorBody()); + + addWindowItem(line); } -void Helpbox::addLine(std::string& text) + + + + +void Helpbox::addLine(const char *icon, const char *text, const int& text_mode, const int& line_space, const int& line_indent, Font* font_text) { - std::vector v; - Drawable *d = new DText(text); - v.push_back(d); - m_lines.push_back(v); + addLine(icon, std::string(text), text_mode, line_space, line_indent, font_text); + } -void Helpbox::addLine(const char *icon, const char *text) + +void Helpbox::addLine(const char *text, const int& text_mode, const int& line_space, const int& line_indent, Font* font_text) { - std::vector v; - Drawable *di = new DIcon(icon); - Drawable *dt = new DText(text); - v.push_back(di); - v.push_back(dt); - m_lines.push_back(v); + addLine("", std::string(text), text_mode, line_space, line_indent, font_text); } -void Helpbox::addLine(std::string& icon, std::string& text) +void Helpbox::addLine(const std::string& text, const int& text_mode, const int& line_space, const int& line_indent, Font* font_text) { - std::vector v; - Drawable *di = new DIcon(icon); - Drawable *dt = new DText(text); - v.push_back(di); - v.push_back(dt); - m_lines.push_back(v); + addLine("", text, text_mode, line_space, line_indent, font_text); } + + void Helpbox::addPagebreak(void) { - std::vector v; - Drawable *p = new DPagebreak(); - v.push_back(p); - m_lines.push_back(v); + page ++; + setPageCount(page); + hbox_y = 1; } diff --git a/src/gui/widget/helpbox.h b/src/gui/widget/helpbox.h index a1d4d3c22..86a5aed4b 100644 --- a/src/gui/widget/helpbox.h +++ b/src/gui/widget/helpbox.h @@ -1,64 +1,95 @@ /* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + Implement CComponent-Windowclass. + Copyright (C) 2015 Thilo Graf 'dbt' 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 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. + 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. + along with this program. If not, see . */ #ifndef __helpbox__ #define __helpbox__ -#include +#include +#include +#include -#include +#define HELPBOX_DEFAULT_LINE_HEIGHT 35 +#define HELPBOX_DEFAULT_LINE_INDENT 10 -#include -#include - -class Helpbox +class Helpbox : public CComponentsWindowMax { -public: - - Helpbox(); - ~Helpbox(); - - void show(const neutrino_locale_t Caption, const int Width = 450, int timeout = -1); - - void addLine(std::string& text); - void addLine(const char *text); - void addLine(std::string& icon, std::string& text); - void addLine(const char *icon, const char *text); - void addPagebreak(); -protected: - private: + uint8_t page; + //start position of items on page + int hbox_y; - ContentLines m_lines; + ///default font + Font* hbox_font; +public: + Helpbox( const std::string& Title, + const std::string& Default_Text = std::string(), + const int& text_mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, + const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + Font* font_text = NULL, + const char* Icon = NEUTRINO_ICON_INFO); + + ///show = paint, for compatibility + void show(bool do_save_bg = true){ paint(do_save_bg) ;} + + void addLine( const std::string& text, + const int& text_mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, + const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + const int& line_indent = HELPBOX_DEFAULT_LINE_INDENT, + Font* font_text = NULL); + + void addLine( const char *text, + const int& text_mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, + const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + const int& line_indent = HELPBOX_DEFAULT_LINE_INDENT, + Font* font_text = NULL); + + void addLine( const std::string& icon, + const std::string& text, + const int& text_mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, + const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + const int& line_indent = HELPBOX_DEFAULT_LINE_INDENT, + Font* font_text = NULL); + + void addLine( const char *icon, + const char *text, + const int& text_mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, + const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + const int& line_indent = HELPBOX_DEFAULT_LINE_INDENT, + Font* font_text = NULL); + + ///adds a separator as horizontal line, arg 'line_space' defines the space of full separator height, the separator line itself has a defined height of 2px and is centered within line space. + ///arg 'line_indent' defines begin of line from left border within body object. + ///arg 'enable_gradient' enable/disable gradient, Note: default = true, but gradient is only effected, if global/theme gradient settings are enabled! + void addSeparatorLine( const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT, + const int& line_indent = HELPBOX_DEFAULT_LINE_INDENT, + bool enable_gradient = true); + ///adds a simple empty separator as horizontal space, arg 'line_space' defines the space of full separator height + void addSeparator( const int& line_space = HELPBOX_DEFAULT_LINE_HEIGHT); + + void addPagebreak(); + + int exec(){return ccw_body->exec();} }; #endif diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index febb0f5fa..8e669af40 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -1,24 +1,29 @@ /* - Neutrino-GUI - DBoxII-Project + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ + Hintbox based up initial code by + Copyright (C) 2003 Ralf Gandy 'thegoodguy' + Copyright (C) 2004 Sven Traenkle 'zwen' Copyright (C) 2008-2009, 2011, 2013 Stefan Seyfried + Implementation of CComponent Window class. + Copyright (C) 2014-2015 Thilo Graf 'dbt' + 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 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. + 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, see . + along with this program. If not, see . */ @@ -26,250 +31,139 @@ #include #endif -#include - #include #include - -#define borderwidth 4 +#include "hintbox.h" +#include -#define HINTBOX_MAX_HEIGHT 420 -CHintBox::CHintBox(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon) +/* + x w + y+-ccw_head----------------------------------------------+ + |icon | caption | buttons |header (ccw_head) + +-ccw_body----------------------------------------------+ + |+-obj_content-----------------------------------------+| + ||+-obj_hint 0----------------------------------------+||body (ccw_body) + h||| obj_picon | obj_text ||| | + ||+---------------------------------------------------+|| +-contents (obj_content) + |+-----------------------------------------------------+| | + +-------------------------------------------------------+ +-hint 0 (obj_hint) default added with new instance of CHintBox + | + | + +-hint n optional added with addHintItem() +*/ + +using namespace std; + + +CHintBox::CHintBox( const neutrino_locale_t Caption, + const char * const Text, + const int Width, + const char * const Icon, + const char * const Picon, + const int& header_buttons, + const int& text_mode, + const int& indent): CComponentsWindow( 1, 1, width, + HINTBOX_MIN_HEIGHT, + Caption, + string(Icon == NULL ? "" : Icon), + NULL, + CC_SHADOW_ON) { - const char * caption_tmp = g_Locale->getText(Caption); - init(caption_tmp, Text, Width, Icon); + init(Text, Width, string(Picon == NULL ? "" : Picon), header_buttons, text_mode, indent); } -CHintBox::CHintBox(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width, const char * const Icon) +CHintBox::CHintBox( const char * const Caption, + const char * const Text, + const int Width, + const char * const Icon, + const char * const Picon, + const int& header_buttons, + const int& text_mode, + const int& indent):CComponentsWindow( 1, 1, width, + HINTBOX_MIN_HEIGHT, + Caption, + string(Icon == NULL ? "" : Icon), + NULL, + CC_SHADOW_ON) { - const char * caption_tmp = g_Locale->getText(Caption); - const char * text_tmp = g_Locale->getText(Text); - init(caption_tmp, text_tmp, Width, Icon); + init(string(Text), Width, string(Picon == NULL ? "" : Picon), header_buttons, text_mode, indent); } -CHintBox::CHintBox(const char * const Caption, const char * const Text, const int Width, const char * const Icon) +CHintBox::CHintBox( const neutrino_locale_t Caption, + const neutrino_locale_t Text, + const int Width, + const char * const Icon, + const char * const Picon, + const int& header_buttons, + const int& text_mode, + const int& indent):CComponentsWindow( 1, 1, width, + HINTBOX_MIN_HEIGHT, + Caption, + string(Icon == NULL ? "" : Icon), + NULL, + CC_SHADOW_ON) { - init(Caption, Text, Width, Icon); + init(g_Locale->getText(Text), Width, string(Picon == NULL ? "" : Picon), header_buttons, text_mode, indent); } -CHintBox::CHintBox(const char * const Caption, const neutrino_locale_t Text, const int Width, const char * const Icon) +CHintBox::CHintBox( const char * const Caption, + const neutrino_locale_t Text, + const int Width, + const char * const Icon, + const char * const Picon, + const int& header_buttons, + const int& text_mode, + const int& indent):CComponentsWindow( 1, 1, width, + HINTBOX_MIN_HEIGHT, + Caption, + string(Icon == NULL ? "" : Icon), + NULL, + CC_SHADOW_ON) { - const char * text_tmp = g_Locale->getText(Text); - init(Caption, text_tmp, Width, Icon); -} -void CHintBox::init(const char * const Caption, const char * const Text, const int Width, const char * const Icon) -{ - char * begin; - char * pos; - int nw; - int scrollWidth = 0; - int maxLineWidth = 0; - - message = strdup(Text); - - width = Width; - - theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); - fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); - height = theight + fheight; - textStartX = 0; - - caption = Caption; - - begin = message; - - while (true) - { - height += fheight; - if (height > HINTBOX_MAX_HEIGHT) - height -= fheight; - - line.push_back(begin); - pos = strchr(begin, '\n'); - if (pos != NULL) - { - *pos = 0; - begin = pos + 1; - } - else - break; - } - if (fheight != 0) - entries_per_page = ((height - theight) / fheight) - 1; - else /* avoid division by zero */ - entries_per_page = 1; - current_page = 0; - - unsigned int additional_width; - - if (entries_per_page < line.size()) - scrollWidth = 15; - else - scrollWidth = 0; - additional_width = 20 + scrollWidth; - - if (Icon != NULL) - { - iconfile = Icon; - additional_width += 30; - } - else - iconfile = ""; - - nw = additional_width + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(caption); - - if (nw > width) - width = nw; - - for (std::vector::const_iterator it = line.begin(); it != line.end(); ++it) - { - int w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(*it); - maxLineWidth = std::max(maxLineWidth, w); - nw = additional_width + w; - if (nw > width) - width = nw; - } - - /* make sure we don't overflow the usable area */ - if (nw > (int)CFrameBuffer::getInstance()->getScreenWidth()) - width = CFrameBuffer::getInstance()->getScreenWidth(); - textStartX = (width - scrollWidth - maxLineWidth) / 2; - - window = NULL; + init(g_Locale->getText(Text), Width, string(Picon == NULL ? "" : Picon), header_buttons, text_mode, indent); } -CHintBox::~CHintBox(void) +void CHintBox::init(const std::string& Text, const int& Width, const std::string& Picon, const int& header_buttons, const int& text_mode, const int& indent) { - hide(); - free(message); + lines = 0; + timeout = HINTBOX_DEFAULT_TIMEOUT; + w_indentation = indent; + + //set required window width and basic height + width = max(HINTBOX_MIN_WIDTH, Width); + height = max(HINTBOX_MIN_HEIGHT, height); + + ccw_buttons = header_buttons; + + //enable shadow + shadow = true; + + //disable disable header if no title has been defined + if (ccw_caption.empty()) + showHeader(false); + + //disable footer for default + showFooter(false); + + //add the content container, contains the hint objects + obj_content = new CComponentsFrmChain(CC_CENTERED, CC_CENTERED, ccw_body->getWidth(), ccw_body->getHeight(), NULL, CC_DIR_X, ccw_body); + obj_content->doPaintBg(false); + + y_hint_obj = 0; + h_hint_obj = obj_content->getHeight(); + + if (!Text.empty()) + addHintItem(Text, text_mode, Picon); } -void CHintBox::paint(void) -{ - if (window != NULL) - { - /* - * do not paint stuff twice: - * => thread safety needed by movieplayer.cpp: - * one thread calls our paint method, the other one our hide method - * => no memory leaks - */ - return; - } - - CFrameBuffer* frameBuffer = CFrameBuffer::getInstance(); - window = new CFBWindow(frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width ) >> 1), - frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - height) >> 2), - width + borderwidth, - height + borderwidth); - refresh(); -} - -void CHintBox::refresh(void) -{ - if (window == NULL) - { - return; - } - - //window->paintBoxRel(borderwidth, height, width, borderwidth, COL_SHADOW_PLUS_0); - //window->paintBoxRel(width, borderwidth, borderwidth, height - borderwidth, COL_SHADOW_PLUS_0); - window->paintBoxRel(width - 20, borderwidth, borderwidth + 20, height - borderwidth - 20, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_TOP); // right - window->paintBoxRel(borderwidth, height-20, width, borderwidth+20, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); // bottom - - CComponentsHeader header(window->x, window->y, width, theight, caption, iconfile); - header.paint(CC_SAVE_SCREEN_NO); - -#if 0 - //window->paintBoxRel(0, 0, width, theight, (CFBWindow::color_t)COL_MENUHEAD_PLUS_0); - window->paintBoxRel(0, 0, width, theight, (CFBWindow::color_t)COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round - - if (!iconfile.empty()) - { - int iw, ih; - CFrameBuffer::getInstance()->getIconSize(iconfile.c_str(), &iw, &ih); - //window->paintIcon(iconfile.c_str(), 8, 5); - window->paintIcon(iconfile.c_str(), 10, 0, theight); - //window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, g_Locale->getText(caption), COL_MENUHEAD_TEXT); - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, caption, COL_MENUHEAD_TEXT); - } - else - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], 10, theight, width - 10, caption, COL_MENUHEAD_TEXT); -#endif - //window->paintBoxRel(0, theight, width, (entries_per_page + 1) * fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0); - window->paintBoxRel(0, theight, width, (entries_per_page + 1) * fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);//round - - int count = entries_per_page; - int ypos = theight + (fheight >> 1); - - for (std::vector::const_iterator it = line.begin() + (entries_per_page * current_page); ((it != line.end()) && (count > 0)); ++it, count--) - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU], textStartX, (ypos += fheight), width, *it, COL_MENUCONTENT_TEXT); - - if (entries_per_page < line.size()) - { - ypos = theight + (fheight >> 1); - window->paintBoxRel(width - 15, ypos, 15, entries_per_page * fheight, COL_SCROLLBAR_PASSIVE_PLUS_0); - unsigned int marker_size = (entries_per_page * fheight) / ((line.size() + entries_per_page - 1) / entries_per_page); - window->paintBoxRel(width - 13, ypos + current_page * marker_size, 11, marker_size, COL_SCROLLBAR_ACTIVE_PLUS_0); - } -} - -bool CHintBox::has_scrollbar(void) -{ - return (entries_per_page < line.size()); -} - -void CHintBox::scroll_up(void) -{ - if (current_page > 0) - { - current_page--; - refresh(); - } -} - -void CHintBox::scroll_down(void) -{ - if ((entries_per_page * (current_page + 1)) <= line.size()) - { - current_page++; - refresh(); - } -} - -void CHintBox::hide(void) -{ - if (window != NULL) - { - delete window; - window = NULL; - } -} - -int ShowHint(const neutrino_locale_t Caption, const char * const Text, const int Width, int timeout, const char * const Icon) -{ - const char * caption = g_Locale->getText(Caption); - - return ShowHint(caption, Text, Width, timeout, Icon); -} - -int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon) +int CHintBox::exec() { neutrino_msg_t msg; neutrino_msg_data_t data; - - CHintBox * hintBox = new CHintBox(Caption, Text, Width, Icon); - hintBox->paint(); - - if ( timeout == -1 ) - timeout = 5; /// default timeout 5 sec - //timeout = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR]; - - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); - int res = messages_return::none; + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); while ( ! ( res & ( messages_return::cancel_info | messages_return::cancel_all ) ) ) { @@ -283,21 +177,21 @@ int ShowHint(const char * const Caption, const char * const Text, const int Widt { res = messages_return::cancel_all; } - else if ((hintBox->has_scrollbar()) && ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down))) + else if ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down)) { if (msg == CRCInput::RC_up) - hintBox->scroll_up(); + this->scroll_up(); else - hintBox->scroll_down(); - } - else if (CNeutrinoApp::getInstance()->listModeKey(msg)) { - // do nothing + this->scroll_down(); } + else if (CNeutrinoApp::getInstance()->listModeKey(msg)){ + // do nothing //TODO: if passed rc messages are ignored rc messaages: has no effect here too!! + } else if(msg == CRCInput::RC_mode) { res = messages_return::handled; break; } - else if((msg == (neutrino_msg_t) g_settings.key_switchformat) || (msg == (neutrino_msg_t) g_settings.key_next43mode)) { + else if((msg == CRCInput::RC_next) || (msg == CRCInput::RC_prev)) { res = messages_return::cancel_all; g_RCInput->postMsg(msg, data); } @@ -306,26 +200,257 @@ int ShowHint(const char * const Caption, const char * const Text, const int Widt res = CNeutrinoApp::getInstance()->handleMsg(msg, data); if (res & messages_return::unhandled) { - // leave here and handle above... g_RCInput->postMsg(msg, data); res = messages_return::cancel_all; } } } - - hintBox->hide(); - delete hintBox; return res; } -int ShowHint(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width, int timeout, const char * const Icon) +void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const std::string& Picon, const u_int8_t& at_page_number, const fb_pixel_t& color_text, Font* font_text) { - return ShowHint(Caption, g_Locale->getText(Text),Width,timeout,Icon); + dprintf(DEBUG_INFO, "[CHintBox] [%s - %d] add new hint '%s' %s\n", __func__, __LINE__, Text.c_str(), Picon.c_str()); + + //set required font and line size + Font* font = font_text == NULL ? g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] : font_text; + int h_line = font->getHeight(); + + //init side picon object + CComponentsPicture *obj_picon = new CComponentsPicture(0, 0, Picon); + obj_picon->doPaintBg(false); + int w_picon = obj_picon->getWidth(); + + //init text item object + int x_text_obj = (w_picon > 0) ? (w_picon + w_indentation) : 0; + int w_text_obj = obj_content->getWidth() - w_picon - w_indentation; + int h_text_obj = max(h_line, obj_picon->getHeight()); + CComponentsText *obj_text = new CComponentsText(x_text_obj, + 0, + w_text_obj, + h_text_obj, + Text, + text_mode, + font); + + //provide the internal textbox object + CTextBox *textbox = obj_text->getCTextBoxObject(); + int lines_count = textbox->getLines(); + + //get required height of text object related to lines count and height of head and footer, if available + int h_required = lines_count * h_line + (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0); + + //set minimal required height + height = max(height, min(HINTBOX_MAX_HEIGHT, max(HINTBOX_MIN_HEIGHT, h_required))); + + //if have no pre defined text mode: + //more than 1 line or a picon is defined, then do not center text and allow scroll if > 1 lines + if (text_mode == 0){ + if (lines_count == 1) + obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER); + if (w_picon > 1) + obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH); + if (lines_count > 1) + obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | (h_required > HINTBOX_MAX_HEIGHT ? CTextBox::SCROLL : CTextBox::AUTO_HIGH)); + if (lines_count > 1 && w_picon == 0) + obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER | (h_required > HINTBOX_MAX_HEIGHT ? CTextBox::SCROLL : CTextBox::AUTO_HIGH)); + } + else + obj_text->setTextMode(text_mode); + + //text item object: don't paint background + obj_text->doPaintBg(false); + obj_text->setCorner(corner_rad, corner_type); + + //set text color + obj_text->setTextColor(color_text); + + //calculate height of hint object + if (obj_content->size() == 0){ + if (lines_count == 1){ + h_hint_obj = max(h_hint_obj, h_text_obj); + obj_text->setYPos(CC_CENTERED); + } + else + h_hint_obj = max(h_hint_obj, h_line*lines_count); + } + else{ + if (lines_count == 1){ + h_hint_obj = h_text_obj; + obj_text->setYPos(CC_CENTERED); + } + else + h_hint_obj = h_line*lines_count; + } + + //init hint container object + if (isPageChanged()) + y_hint_obj = 0; + CComponentsFrmChain *obj_hint = new CComponentsFrmChain( 0+w_indentation, + y_hint_obj, + obj_content->getWidth()-2*w_indentation, + h_hint_obj, + NULL, + CC_DIR_X, + obj_content); + + //don't paint background for hint container + obj_hint->doPaintBg(false); + obj_hint->setCorner(corner_rad, corner_type); + obj_hint->setPageNumber(at_page_number); + + //add the created items to obj_hint + obj_hint->addCCItem(obj_picon); + obj_hint->addCCItem(obj_text); + + //text object obtains the full height of its parent object + obj_text->setHeightP(100); + + //if we have only one line and a defined picon, then do centering picon to text on the left site + if (lines_count == 1) + obj_picon->setYPos(CC_CENTERED); + + //set next y pos for the next hint object + y_hint_obj += h_hint_obj; + + + //recalculate new hintbox height + ReSize(); + + //set hint box position general to center and refresh window + setCenterPos(); + Refresh(); + + lines += lines_count; } -int ShowHint(const char * const Caption, const neutrino_locale_t Text, const int Width, int timeout, const char * const Icon) +void CHintBox::setMsgText(const std::string& Text, const uint& hint_id, const int& mode, Font* font_text, const fb_pixel_t& color_text, const int& style) { - return ShowHint(Caption, g_Locale->getText(Text),Width,timeout,Icon); + uint id = hint_id; + if (hint_id+1 > obj_content->size()){ + id = 0; + dprintf(DEBUG_NORMAL, "[CHintBox] [%s - %d] mismatching hint_id [%u]...\n", __func__, __LINE__, id); + } + + CComponentsFrmChain *obj_hint = static_cast(obj_content->getCCItem(id)); + CComponentsText *obj_text = static_cast(obj_hint->getCCItem(1)); + + //set required font and line size + Font* font = font_text == NULL ? g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] : font_text; + if (obj_text) + obj_text->setText(Text, mode, font, color_text, style); } +void CHintBox::ReSize() +{ + int h_content_old = obj_content->getHeight(); + int h_content_new = 0; + for (size_t i= 0; i< obj_content->size(); i++){ + CComponentsItem *item = obj_content->getCCItem(i); + h_content_new += item->getHeight(); + } + int h_content_diff = h_content_new - h_content_old; + + obj_content->setHeight(h_content_new); + setHeight(height+h_content_diff); +} + + +void CHintBox::Scroll(bool down, const uint& hint_id) +{ + uint id = hint_id; + if (hint_id+1 > obj_content->size()){ + id = 0; + dprintf(DEBUG_NORMAL, "[CHintBox] [%s - %d] mismatching hint_id [%u]...\n", __func__, __LINE__, id); + } + + CComponentsFrmChain *obj_hint = static_cast(obj_content->getCCItem(id)); + CComponentsText *obj_text = static_cast(obj_hint->getCCItem(1)); + + if (obj_text) { + dprintf(DEBUG_INFO, "[CHintBox] [%s - %d] try to scroll %s hint_id [%u]...Text= %s\n", __func__, __LINE__, down ? "down" : "up", id, obj_text->getText().c_str()); + CTextBox* textbox = obj_text->getCTextBoxObject(); + if (textbox) { + textbox->enableBackgroundPaint(true); + if (down) + textbox->scrollPageDown(1); + else + textbox->scrollPageUp(1); + textbox->enableBackgroundPaint(false); + } + } +} + +void CHintBox::scroll_up(const uint& hint_id) +{ + Scroll(false, hint_id); +} + +void CHintBox::scroll_down(const uint& hint_id) +{ + Scroll(true, hint_id); +} + + +int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) +{ + int res = messages_return::none; + + CHintBox hintBox(Caption, Text, Width, Icon, Picon, header_buttons); + hintBox.setTimeOut(timeout); + hintBox.paint(); + res = hintBox.exec(); + hintBox.hide(); + + return res; +} + +int ShowHint(const neutrino_locale_t Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) +{ + const char * caption = g_Locale->getText(Caption); + return ShowHint(caption, Text, Width, timeout, Icon, Picon, header_buttons); +} + +int ShowHint(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) +{ + return ShowHint(Caption, g_Locale->getText(Text),Width,timeout,Icon, Picon, header_buttons); +} + +int ShowHint(const char * const Caption, const neutrino_locale_t Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) +{ + return ShowHint(Caption, g_Locale->getText(Text),Width,timeout, Icon, Picon, header_buttons); +} + + +CHint::CHint(const char * const Text, bool show_background) : CHintBox("" , Text) +{ + paint_bg = show_background; + ccw_show_header = false; + ccw_show_footer = false; +} + +CHint::CHint(const neutrino_locale_t Text, bool show_background) : CHintBox("" , g_Locale->getText(Text)) +{ + paint_bg = show_background; + ccw_show_header = false; + ccw_show_footer = false; +} + +int ShowHintS(const char * const Text, int timeout, bool show_background) +{ + int res = messages_return::none; + + CHint hint(Text, show_background); + hint.setTimeOut(timeout); + hint.paint(); + res = hint.exec(); + hint.hide(); + + return res; +} + +int ShowHintS(const neutrino_locale_t Text, int timeout, bool show_background) +{ + return ShowHintS(g_Locale->getText(Text), timeout, show_background); +} diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 460d9f556..a071824ae 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -1,88 +1,194 @@ /* - Neutrino-GUI - DBoxII-Project + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. + Hintbox based up initial code by + Copyright (C) 2003 Ralf Gandy 'thegoodguy' + Copyright (C) 2004 Sven Traenkle 'zwen' + Copyright (C) 2008-2009, 2011, 2013 Stefan Seyfried + Implementation of CComponent Window class. + Copyright (C) 2014-2015 Thilo Graf 'dbt' 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 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. + 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. + along with this program. If not, see . */ -#ifndef __hintbox__ -#define __hintbox__ +#ifndef __C_HINTBOX__ +#define __C_HINTBOX__ -#include -#include -#include +#include -#include -#include +#define HINTBOX_MIN_WIDTH 600 +#define HINTBOX_MIN_HEIGHT 125 +#define HINTBOX_MAX_HEIGHT 420 +#define HINTBOX_DEFAULT_TIMEOUT 5 +//frame around hint container as indent +#define W_FRAME 15 +//frame color around hint/message box +#define HINTBOX_DEFAULT_FRAME_COLOR COL_MENUCONTENT_PLUS_6 -class CHintBox +//! Sub class of CComponentsWindow. Shows a window as a hintbox with text and optional icon beside of text. +/*! +CHintBox provides a small window with header and a text item, +optional you can add an icon in the header and/or beside left of +text and context buttons on the right site of header. +*/ + +class CHintBox : public CComponentsWindow { - protected: + protected: + int y_hint_obj; + int h_hint_obj; + int w_indentation; - CFBWindow * window; + ///global count of lines + uint lines; - unsigned int entries_per_page; - unsigned int current_page; + ///timeout value, see also setTimeOut() + int timeout; - int width; - int height; - int textStartX; + ///content container object, contains the hint objects, it's a child of body object + CComponentsFrmChain *obj_content; - int fheight; - int theight; - const char * caption; - char * message; - std::vector line; - std::string iconfile; - void init(const char * const Caption, const char * const Text, const int Width, const char * const Icon); - void refresh(void); + ///scroll handler, default down and for the 1st hint item (=0), NOTE: exec() must be called! see also scroll_down()/scroll_up() + void Scroll(bool down, const uint& hint_id = 0); - public: - // Text is UTF-8 encoded - CHintBox(const neutrino_locale_t Caption, const char * const Text, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - CHintBox(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - CHintBox(const char * const Caption, const char * const Text, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - CHintBox(const char * const Caption, const neutrino_locale_t Text, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - ~CHintBox(void); + ///main init handler + void init( const std::string& Text, + const int& Width, + const std::string& Picon, + const int& header_buttons, + const int& text_mode, + const int& indent); - bool has_scrollbar(void); - void scroll_up(void); - void scroll_down(void); + void ReSize(); - void paint(void); - void hide(void); + public: + // Text is UTF-8 encoded + CHintBox( const neutrino_locale_t Caption, + const char * const Text, + const int Width = HINTBOX_MIN_WIDTH, + const char * const Icon = NULL, + const char * const Picon = NULL, + const int& header_buttons = 0, + const int& text_mode = 0, + const int& indent = W_FRAME); + + CHintBox( const char * const Caption, + const char * const Text, + const int Width = HINTBOX_MIN_WIDTH, + const char * const Icon = NULL, + const char * const Picon = NULL, + const int& header_buttons = 0, + const int& text_mode = 0, + const int& indent = W_FRAME); + + CHintBox( const neutrino_locale_t Caption, + const neutrino_locale_t Text, + const int Width = HINTBOX_MIN_WIDTH, + const char * const Icon = NULL, + const char * const Picon = NULL, + const int& header_buttons = 0, + const int& text_mode = 0, + const int& indent = W_FRAME); + + CHintBox( const char * const Caption, + const neutrino_locale_t Text, + const int Width = HINTBOX_MIN_WIDTH, + const char * const Icon = NULL, + const char * const Picon = NULL, + const int& header_buttons = 0, + const int& text_mode = 0, + const int& indent = W_FRAME); + + //~CHintBox(); //inherited + int exec(); + + ///define timeout, timeout is enabled if parameter1 > -1 + virtual void setTimeOut(const int& Timeout){timeout = Timeout;}; + + ///scroll handler for text objects: NOTE: exec() must be called ! see also Scroll() + ///scroll up handler, default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 + void scroll_up(const uint& hint_id = 0); + ///scroll down handler, default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 + void scroll_down(const uint& hint_id = 0); + + ///specialized member to add a hint item, parameter1: UTF8 text that will be showed, parameter2: (optional) textmode, see gui/widget/textbox.h for possible modes, parameter3: (optional) = an icon that will be showed left beside of text + void addHintItem( const std::string& Text, + const int& text_mode = 0, + const std::string& Picon = std::string(), + const u_int8_t& at_page_number = 0, + const fb_pixel_t& color_text = COL_MENUCONTENT_TEXT, + Font* font_text = NULL); + ///add any cc-item to body object, also usable is addWindowItem() to add items to the window body object + void addHintItem(CComponentsItem* cc_Item){obj_content->addCCItem(cc_Item);} + + /*! + * Sets a new text to a hint item, + 2nd parameter expects an item number, default = 0 (1st item). Mostly this should be the only one, but if more than one items are exist, it's possible to select a target item. + 3rd parameter expects modes from CTextBox (default = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER) + AUTO_WIDTH + AUTO_HIGH + SCROLL + CENTER + RIGHT + TOP + BOTTOM + NO_AUTO_LINEBREAK + AUTO_LINEBREAK_NO_BREAKCHARS + 4th parameter font_text expects a font object, if default value = NULL, then g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] is used + 5th parameter expects value from /gui/color.h or compatible color numbers + 6th parameter expects + FONT_STYLE_REGULAR (default) + FONT_STYLE_BOLD + FONT_STYLE_ITALIC + */ + void setMsgText(const std::string& Text, + const uint& hint_id = 0, + const int& mode = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER, + Font* font_text = NULL, + const fb_pixel_t& color_text = COL_MENUCONTENT_TEXT, + const int& style = CComponentsText::FONT_STYLE_REGULAR); }; // Text is UTF-8 encoded -int ShowHint(const neutrino_locale_t Caption, const char * const Text, const int Width = 450, int timeout = -1, const char * const Icon = NEUTRINO_ICON_INFO); -int ShowHint(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width = 450, int timeout = -1, const char * const Icon = NEUTRINO_ICON_INFO); -int ShowHint(const char * const Caption, const char * const Text, const int Width = 450, int timeout = -1, const char * const Icon = NEUTRINO_ICON_INFO); -int ShowHint(const char * const Caption, const neutrino_locale_t Text, const int Width = 450, int timeout = -1, const char * const Icon = NEUTRINO_ICON_INFO); +int ShowHint(const neutrino_locale_t Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); +int ShowHint(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); +int ShowHint(const char * const Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); +int ShowHint(const char * const Caption, const neutrino_locale_t Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); + + + +//! Sub class of CHintBox. Shows a simplified hint as a text hint without header and footer. +/*! +CHint provides a text without header and footer, +optional disable/enable background +*/ + +class CHint : public CHintBox +{ + public: + CHint(const char * const Text, bool show_background = true); + CHint(const neutrino_locale_t Text, bool show_background = true); +}; + +//methods to show simplified hints +int ShowHintS(const neutrino_locale_t Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true); +int ShowHintS(const char * const Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true); #endif diff --git a/src/gui/widget/keyboard_input.cpp b/src/gui/widget/keyboard_input.cpp index 72cd73dfc..d6e7341cf 100644 --- a/src/gui/widget/keyboard_input.cpp +++ b/src/gui/widget/keyboard_input.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include @@ -601,7 +601,7 @@ int CKeyboardInput::exec(CMenuTarget* parent, const std::string &) else if ((msg == CRCInput::RC_home) || (msg == CRCInput::RC_timeout)) { if ((inputString->getValue() != oldval) && - (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel)) { + (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); continue; } diff --git a/src/gui/widget/messagebox.cpp b/src/gui/widget/messagebox.cpp index bf6d22730..ea416384c 100644 --- a/src/gui/widget/messagebox.cpp +++ b/src/gui/widget/messagebox.cpp @@ -338,32 +338,12 @@ int ShowMsg(const std::string &Caption, const std::string & Text, const CMessage return ShowMsg(Caption, Text.c_str(), Default, ShowButtons, Icon, Width, timeout,returnDefaultOnTimeout); } -void DisplayErrorMessage(const char * const ErrorMsg) -{ - ShowMsg(LOCALE_MESSAGEBOX_ERROR, ErrorMsg, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); -} - -void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t Caption) -{ - ShowMsg(Caption, ErrorMsg, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); -} - -void DisplayErrorMessage(const char * const ErrorMsg, const std::string &Caption) -{ - ShowMsg(Caption, ErrorMsg, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); -} - -void DisplayInfoMessage(const char * const InfoMsg) -{ - ShowMsg(LOCALE_MESSAGEBOX_INFO, InfoMsg, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); -} - -void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t Caption) -{ - ShowMsg(Caption, InfoMsg, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); -} - -void DisplayInfoMessage(const char * const InfoMsg, const std::string &Caption) -{ - ShowMsg(Caption, InfoMsg, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); -} +// void DisplayErrorMessage(const char * const ErrorMsg) +// { +// ShowMsg(LOCALE_MESSAGEBOX_ERROR, ErrorMsg, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); +// } +// +// void DisplayInfoMessage(const char * const ErrorMsg) +// { +// ShowMsg(LOCALE_MESSAGEBOX_INFO, ErrorMsg, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); +// } diff --git a/src/gui/widget/messagebox.h b/src/gui/widget/messagebox.h index b06892259..8604efe76 100644 --- a/src/gui/widget/messagebox.h +++ b/src/gui/widget/messagebox.h @@ -107,11 +107,13 @@ int ShowMsg(const std::string &Caption, const char * const Text, const CMessageB int ShowMsg(const std::string &Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 int ShowMsg(const std::string &Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 +#if 0 void DisplayErrorMessage(const char * const ErrorMsg); // UTF-8 void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t Caption); // UTF-8 void DisplayErrorMessage(const char * const ErrorMsg, const std::string &Caption); // UTF-8 void DisplayInfoMessage(const char * const InfoMsg); // UTF-8 void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t Caption); // UTF-8 void DisplayInfoMessage(const char * const InfoMsg, const std::string &Caption); // UTF-8 +#endif #endif diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index f6ca7e428..65a926475 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -1,47 +1,28 @@ /* - Neutrino-GUI - DBoxII-Project + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. + Initial implementation as an interface of the CMsgBox class + Copyright (C) 2005 Günther + Günther@tuxbox.berlios.org + Implementation of CComponent Window class. + Copyright (C) 2014-2015 Thilo Graf 'dbt' 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 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. + 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. - - *********************************************************** - - Module Name: msgbox.cpp: . - - Description: Implementation of the CMsgBox class - This class provides a message box using CTextBox. - - Date: Nov 2005 - - Author: Gnther@tuxbox.berlios.org - based on code of Steffen Hehn 'McClean' - - Revision History: - Date Author Change Description - Nov 2005 Gnther initial implementation + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -49,16 +30,10 @@ #endif #include - -#include "msgbox.h" - -#include #include -#define WINDOW_FRAME_BORDER_WIDTH 4 -#define ADD_FOOT_HEIGHT 20 -#define TEXT_BORDER_WIDTH 8 -#define TITLE_ICON_WIDTH (40 - TEXT_BORDER_WIDTH) +#include "msgbox.h" +#include #define MAX_WINDOW_WIDTH (g_settings.screen_EndX - g_settings.screen_StartX ) #define MAX_WINDOW_HEIGHT (g_settings.screen_EndY - g_settings.screen_StartY - 40) @@ -66,818 +41,481 @@ #define MIN_WINDOW_WIDTH (MAX_WINDOW_WIDTH>>1) #define MIN_WINDOW_HEIGHT 40 -#define DEFAULT_TITLE_FONT g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE] -#define DEFAULT_FOOT_FONT g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT] - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// Function Name: CMsgBox -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -CMsgBox::CMsgBox( const char * text, - Font* fontText, - const int _mode, - const CBox* position, - const char * title, - Font* fontTitle, - const char * icon, - int return_button , - const result_ default_result) +CMsgBox::CMsgBox( const char* Text, + const char* Title, + const char* Icon, + const char* Picon, + const int& Width, + const int& Height, + const int& ShowButtons, + const msg_result_t& Default_result, + const int& Text_mode) : CHintBox( Title, + Text, + Width, + Icon, + Picon, + 0, + Text_mode) { - //TRACE("->CMsgBox::CMsgBox\r\n"); - initVar(); - - if(title != NULL) m_cTitle = title; - if(fontTitle != NULL) m_pcFontTitle = fontTitle; - if(icon != NULL) m_cIcon = icon; - if(position != NULL) m_cBoxFrame = *position; - m_nMode = _mode; - //TRACE(" CMsgBox::cText: %d ,m_cTitle %d,m_nMode %d\t\r\n",strlen(text),m_cTitle.size(),m_nMode); - - if(m_nMode & BORDER) - m_nWindowFrameBorderWidth = WINDOW_FRAME_BORDER_WIDTH; - else - m_nWindowFrameBorderWidth = 0; - - //TRACE(" Mode: "); - //if(_mode & BORDER) TRACE("BORDER "); - //if(_mode & TITLE) TRACE("TITLE "); - //if(_mode & FOOT) TRACE("FOOT "); - //if(_mode & CENTER) TRACE("CENTER"); - //TRACE("\r\n"); - - //TRACE_1(" m_nWindowFrameBorderWidth: \t%d\r\n",m_nWindowFrameBorderWidth); - - - /* Initialise the window frames first */ - initFramesRel(); - - m_pcTextBox = new CTextBox( text, - fontText, - _mode, - &m_cBoxFrameText); - - if(_mode & AUTO_WIDTH || _mode & AUTO_HIGH) - { - /* window might changed in size ...*/ - m_cBoxFrameText = m_pcTextBox->getWindowsPos(); - - m_cBoxFrame.iWidth = m_cBoxFrameText.iWidth + m_nWindowFrameBorderWidth; - m_cBoxFrame.iHeight = m_cBoxFrameText.iHeight + m_cBoxFrameFootRel.iHeight + m_cBoxFrameTitleRel.iHeight + m_nWindowFrameBorderWidth; - - initFramesRel(); - } - - if(_mode & CENTER) - { - m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - m_cBoxFrame.iWidth) >>1); - m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - m_cBoxFrame.iHeight) >>2); - } - - m_nResult = default_result; - m_nFootButtons = return_button; + init(Height, ShowButtons, Default_result); } -////////////////////////////////////////////////////////////////////// -// Function Name: CMsgBox -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -CMsgBox::CMsgBox(const char * text) +CMsgBox::CMsgBox( const char* Text, + const neutrino_locale_t locale_Title, + const char* Icon, + const char* Picon, + const int& Width, + const int& Height, + const int& ShowButtons, + const msg_result_t& Default_result, + const int& Text_mode) : CHintBox( locale_Title, + Text, + Width, + Icon, + Picon, + 0, + Text_mode) { - initVar(); - - m_pcTextBox = new CTextBox( text); - /* Initialise the window frames first */ - initFramesRel(); + init(Height, ShowButtons, Default_result); } -////////////////////////////////////////////////////////////////////// -// Function Name: CMsgBox -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -CMsgBox::CMsgBox() +void CMsgBox::init(const int& Height, const int& ShowButtons, const msg_result_t& Default_result) { - m_pcTextBox = NULL; + dprintf(DEBUG_NORMAL, "[CMsgBox] [%s - %d] \n", __func__, __LINE__); - initVar(); - initFramesRel(); + initTimeOut(); + + //enable footer and add its height + showFooter(true); + ccw_footer->doPaintBg(false); + int h_current = height; + h_current += ccw_footer->getHeight(); + height = max(max(MSGBOX_MIN_HEIGHT, Height), h_current); + + //ensure matching height for screen + height = min(MAX_WINDOW_HEIGHT, height); + width = min(MAX_WINDOW_WIDTH, width); + + //set result + if (Default_result != mbrNone) + result = default_result = Default_result; + + //add and initialize footer buttons with required buttons and basic properties + if (ShowButtons > -1) + mb_show_button = ShowButtons; + initButtons(); } -////////////////////////////////////////////////////////////////////// -// Function Name: ~CMsgBox -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -CMsgBox::~CMsgBox() +void CMsgBox::initTimeOut() { - if (m_pcWindow != NULL) - { - delete m_pcWindow; - m_pcWindow = NULL; - } - - if (m_pcTextBox != NULL) - { - delete m_pcTextBox; - m_pcTextBox = NULL; - } - + timeout = -1; + enable_timeout_result = false; } -////////////////////////////////////////////////////////////////////// -// Function Name: InitVar -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::initVar(void) +void CMsgBox::initButtons() { - //TRACE("->CMsgBox::InitVar\r\n"); - m_nResult = mbrYes; - m_cTitle = ""; - m_cIcon = ""; - m_nMode = SCROLL | TITLE | BORDER ; + button_label_s btn; + vector v_buttons; - // set the title varianles - m_pcFontTitle = DEFAULT_TITLE_FONT; - m_nFontTitleHeight = m_pcFontTitle->getHeight(); + //evaluate combinations + if (mb_show_button & mbAll) + mb_show_button = (mbOk|mbYes|mbNo|mbCancel|mbBack); //stupid! only demo + if (mb_show_button & mbOKCancel) + mb_show_button = (mbOk|mbCancel); + if (mb_show_button & mbYesNoCancel) + mb_show_button = (mbYes|mbNo|mbCancel); + if (mb_show_button & mbYesNo) + mb_show_button = (mbYes|mbNo); - // set the foot variables - m_pcFontFoot = DEFAULT_FOOT_FONT; - m_nFontFootHeight = m_pcFontFoot->getHeight(); - m_nFootButtons = 0; - - // set the main frame border width - if(m_nMode & BORDER) - m_nWindowFrameBorderWidth = WINDOW_FRAME_BORDER_WIDTH; - else - m_nWindowFrameBorderWidth = 0; - - // set the main frame to default - m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - MIN_WINDOW_WIDTH) >>1); - m_cBoxFrame.iWidth = MIN_WINDOW_WIDTH; - m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - MIN_WINDOW_HEIGHT) >>2); - m_cBoxFrame.iHeight = MIN_WINDOW_HEIGHT; - - m_pcWindow = NULL; - - //TRACE_1(" m_nWindowFrameBorderWidth: \t%d\r\n",m_nWindowFrameBorderWidth); -} - -////////////////////////////////////////////////////////////////////// -// Function Name: InitFramesRel -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::initFramesRel(void) -{ - //TRACE("->CMsgBox::InitFramesRel\r\n"); - // init the title frame - if(m_nMode & TITLE) - { - m_cBoxFrameTitleRel.iX = 0; - m_cBoxFrameTitleRel.iY = 0; - m_cBoxFrameTitleRel.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth; - m_cBoxFrameTitleRel.iHeight = m_nFontTitleHeight + 2; + //assign button text, result values, direct keys and alternate keys + if (mb_show_button & mbOk){ + btn.button = NEUTRINO_ICON_BUTTON_OKAY; + btn.text = BTN_TEXT(mbOk); + btn.directKey = CRCInput::RC_ok; + btn.btn_result = mbrOk; + btn.btn_alias = mbOk; + v_buttons.push_back(btn); } - else - { - m_cBoxFrameTitleRel.iX = 0; - m_cBoxFrameTitleRel.iY = 0; - m_cBoxFrameTitleRel.iHeight = 0; - m_cBoxFrameTitleRel.iWidth = 0; + if (mb_show_button & mbYes){ + btn.button = NEUTRINO_ICON_BUTTON_GREEN; + btn.text = BTN_TEXT(mbYes); + btn.directKey = CRCInput::RC_green; + btn.directKeyAlt = CRCInput::RC_ok; + btn.btn_result = mbrYes; + btn.btn_alias = mbYes; + v_buttons.push_back(btn); + } + if (mb_show_button & mbNo){ + btn.button = NEUTRINO_ICON_BUTTON_RED; + btn.text = BTN_TEXT(mbNo); + btn.directKey = CRCInput::RC_red; + btn.directKeyAlt = CRCInput::RC_home; + btn.btn_result = mbrNo; + btn.btn_alias = mbNo; + v_buttons.push_back(btn); + } + if (mb_show_button & mbCancel){ + btn.button = NEUTRINO_ICON_BUTTON_HOME; + btn.text = BTN_TEXT(mbCancel); + btn.directKey = CRCInput::RC_home; + btn.directKeyAlt = CRCInput::RC_setup; + btn.btn_result = mbrCancel; + btn.btn_alias = mbCancel; + v_buttons.push_back(btn); + } + if (mb_show_button & mbBack){ + btn.button = NEUTRINO_ICON_BUTTON_HOME; + btn.text = BTN_TEXT(mbBack); + btn.directKey = CRCInput::RC_home; + btn.btn_result = mbrBack; + btn.btn_alias = mbBack; + v_buttons.push_back(btn); } - // init the foot frame - if(m_nMode & FOOT) - { - m_cBoxFrameFootRel.iX = 0; - m_cBoxFrameFootRel.iY = m_cBoxFrame.iHeight - m_nFontFootHeight - m_nWindowFrameBorderWidth - ADD_FOOT_HEIGHT; - m_cBoxFrameFootRel.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth; - m_cBoxFrameFootRel.iHeight = m_nFontFootHeight + ADD_FOOT_HEIGHT; - } - else - { - m_cBoxFrameFootRel.iX = 0; - m_cBoxFrameFootRel.iY = 0; - m_cBoxFrameFootRel.iHeight = 0; - m_cBoxFrameFootRel.iWidth = 0; - } + ccw_footer->setButtonLabels(v_buttons, 0, 125); - // init the text frame - m_cBoxFrameText.iY = m_cBoxFrame.iY + m_cBoxFrameTitleRel.iY + m_cBoxFrameTitleRel.iHeight; - m_cBoxFrameText.iX = m_cBoxFrame.iX + m_cBoxFrameTitleRel.iX; - m_cBoxFrameText.iHeight = m_cBoxFrame.iHeight - m_cBoxFrameTitleRel.iHeight - m_cBoxFrameFootRel.iHeight - m_nWindowFrameBorderWidth; - m_cBoxFrameText.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth; -#if 0 - TRACE_1("Frames\r\n\tScren:\t%3d,%3d,%3d,%3d\r\n\tMain:\t%3d,%3d,%3d,%3d\r\n\tText:\t%3d,%3d,%3d,%3d \r\n\tTitle:\t%3d,%3d,%3d,%3d \r\n\tFoot:\t%3d,%3d,%3d,%3d\r\n\r\n", - g_settings.screen_StartX, - g_settings.screen_StartY, - g_settings.screen_EndX, - g_settings.screen_EndY, - m_cBoxFrame.iX, - m_cBoxFrame.iY, - m_cBoxFrame.iWidth, - m_cBoxFrame.iHeight, - m_cBoxFrameText.iX, - m_cBoxFrameText.iY, - m_cBoxFrameText.iWidth, - m_cBoxFrameText.iHeight, - m_cBoxFrameTitleRel.iX, - m_cBoxFrameTitleRel.iY, - m_cBoxFrameTitleRel.iWidth, - m_cBoxFrameTitleRel.iHeight, - m_cBoxFrameFootRel.iX, - m_cBoxFrameFootRel.iY, - m_cBoxFrameFootRel.iWidth, - m_cBoxFrameFootRel.iHeight - ); -#endif -} + //show buttons with frame and background + ccw_footer->showButtonContour(true); -////////////////////////////////////////////////////////////////////// -// Function Name: RefreshFoot -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::refreshFoot(void) -{ - uint32_t color, bgcolor; - if( !(m_nMode & FOOT)) return; + //set position of meassage window and refresh window properties + setCenterPos(); + Refresh(); - // draw the background first - m_pcWindow->paintBoxRel( m_cBoxFrameFootRel.iX+m_cBoxFrame.iX, - m_cBoxFrameFootRel.iY+m_cBoxFrame.iY, - m_cBoxFrameFootRel.iWidth, - m_cBoxFrameFootRel.iHeight, - (CFBWindow::color_t)COL_MENUHEAD_PLUS_0, - RADIUS_LARGE, CORNER_BOTTOM); + //set the 1st button as default selected button + ccw_footer->setSelectedButton(0); - //const char* text; - - int MaxButtonTextWidth = m_pcFontFoot->getRenderWidth(g_Locale->getText(LOCALE_MESSAGEBOX_CANCEL)); - int ButtonWidth = 20 + 33 + MaxButtonTextWidth; - int ButtonSpacing = (m_cBoxFrameFootRel.iWidth - 20- (ButtonWidth*3) ) / 2; - int xpos = m_cBoxFrameFootRel.iX; - - // draw Button mbYes - if (m_nFootButtons & mbYes) - { - if (m_nResult == mbrYes) - { - color = COL_MENUCONTENTSELECTED_TEXT; - bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; + //define default selected button from default_result + if (v_buttons.size() > 1){ + for (size_t i = 0; i< v_buttons.size(); i++){ + if (v_buttons[i].btn_result == result){ + ccw_footer->setSelectedButton(i); + break; + } } - else - { - color = COL_MENUCONTENTINACTIVE_TEXT; - bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; - } - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX + OFFSET_SHADOW, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY + OFFSET_SHADOW, ButtonWidth, m_nFontFootHeight + 4, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor, RADIUS_MID); - m_pcWindow->paintBoxFrame(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, 1, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_RED, xpos + 14+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY); - /*m_pcWindow->RenderString(*/ - m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 4 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth - 53, g_Locale->getText(LOCALE_MESSAGEBOX_YES), (CFBWindow::color_t)color); - } - - xpos += ButtonWidth + ButtonSpacing; - - // draw Button mbNo - if (m_nFootButtons & mbNo) - { - if (m_nResult == mbrNo) - { - color = COL_MENUCONTENTSELECTED_TEXT; - bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - } - else - { - color = COL_MENUCONTENTINACTIVE_TEXT; - bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; - } - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX + OFFSET_SHADOW, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY + OFFSET_SHADOW, ButtonWidth, m_nFontFootHeight + 4, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor, RADIUS_MID); - m_pcWindow->paintBoxFrame(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, 1, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, xpos + 14+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY); - /*m_pcWindow->RenderString(*/ - m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 4 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth- 53, g_Locale->getText(LOCALE_MESSAGEBOX_NO), (CFBWindow::color_t)color); - } - - xpos += ButtonWidth + ButtonSpacing; - - // draw Button mbCancel - if (m_nFootButtons & (mbCancel | mbBack)) - { - if (m_nResult >= mbrCancel) - { - color = COL_MENUCONTENTSELECTED_TEXT; - bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - } - else - { - color = COL_MENUCONTENTINACTIVE_TEXT; - bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; - } - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX + OFFSET_SHADOW, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY + OFFSET_SHADOW, ButtonWidth, m_nFontFootHeight + 4, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor, RADIUS_MID); - m_pcWindow->paintBoxFrame(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, 1, COL_SHADOW_PLUS_0, RADIUS_MID); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_HOME, xpos+10+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY); - /*m_pcWindow->RenderString(*/ - m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 2 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth- 53, g_Locale->getText((m_nFootButtons & mbCancel) ? LOCALE_MESSAGEBOX_CANCEL : LOCALE_MESSAGEBOX_BACK), (CFBWindow::color_t)color); } } -////////////////////////////////////////////////////////////////////// -// Function Name: RefreshTitle -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::refreshTitle(void) + + +void CMsgBox::enableDefaultResultOnTimeOut(bool enable) { - // first check if title is configured - if( !(m_nMode & TITLE)) return; - - CComponentsHeader header(m_cBoxFrameTitleRel.iX+m_cBoxFrame.iX, - m_cBoxFrameTitleRel.iY+m_cBoxFrame.iY, - m_cBoxFrameTitleRel.iWidth, - m_cBoxFrameTitleRel.iHeight, m_cTitle, m_cIcon); - header.paint(CC_SAVE_SCREEN_NO); -#if 0 - // draw the background - m_pcWindow->paintBoxRel( m_cBoxFrameTitleRel.iX+m_cBoxFrame.iX, - m_cBoxFrameTitleRel.iY+m_cBoxFrame.iY, - m_cBoxFrameTitleRel.iWidth, - m_cBoxFrameTitleRel.iHeight, - (CFBWindow::color_t)COL_MENUHEAD_PLUS_0, - RADIUS_LARGE, CORNER_TOP); - - if (!m_cIcon.empty()) - { - // draw icon and title text - m_pcWindow->paintIcon(m_cIcon.c_str(), m_cBoxFrameTitleRel.iX + 8+m_cBoxFrame.iX, m_cBoxFrameTitleRel.iY + 5+m_cBoxFrame.iY); - /*m_pcWindow->RenderString(*/ - m_pcFontTitle->RenderString( - m_cBoxFrameTitleRel.iX + TITLE_ICON_WIDTH + TEXT_BORDER_WIDTH+m_cBoxFrame.iX, - m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY, - m_cBoxFrameTitleRel.iWidth - TITLE_ICON_WIDTH + TEXT_BORDER_WIDTH, - m_cTitle.c_str(), - COL_MENUHEAD_TEXT); - } - else - { - // no icon available, just draw the title text - /*m_pcWindow->RenderString(*/ - m_pcFontTitle->RenderString( - m_cBoxFrameTitleRel.iX + TEXT_BORDER_WIDTH+m_cBoxFrame.iX, - m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY, - m_cBoxFrameTitleRel.iWidth - TEXT_BORDER_WIDTH, - m_cTitle.c_str(), - COL_MENUHEAD_TEXT); - } -#endif + enable_timeout_result = enable; } -////////////////////////////////////////////////////////////////////// -// Function Name: RefreshBorder -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::refreshBorder(void) +int CMsgBox::exec() { - if( !(m_nMode & BORDER && m_nWindowFrameBorderWidth > 0)) return; - - //draw bottom shadow - m_pcWindow->paintBoxRel( m_nWindowFrameBorderWidth+m_cBoxFrame.iX, - m_cBoxFrame.iHeight - m_nWindowFrameBorderWidth+m_cBoxFrame.iY - RADIUS_LARGE, - m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth - RADIUS_LARGE, - m_nWindowFrameBorderWidth + RADIUS_LARGE, - COL_SHADOW_PLUS_0, - RADIUS_LARGE, CORNER_BOTTOM_LEFT); - - //draw right shadow - m_pcWindow->paintBoxRel( m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth+m_cBoxFrame.iX - RADIUS_LARGE, - m_nWindowFrameBorderWidth+m_cBoxFrame.iY, - m_nWindowFrameBorderWidth + RADIUS_LARGE, - m_cBoxFrame.iHeight - m_nWindowFrameBorderWidth, - COL_SHADOW_PLUS_0, - RADIUS_LARGE, CORNER_RIGHT); -} - -////////////////////////////////////////////////////////////////////// -// global Functions -////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////// -// Function Name: Hide -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -bool CMsgBox::hide(void) -{ - //TRACE("->CMsgBox::Hide\r\n"); - - if (m_pcWindow == NULL) - { - TRACE(" return -> window does not exists\r\n"); - return (false); - } - if(m_pcTextBox != NULL) - { - m_pcTextBox->hide(); - } - - // delete window - // delete m_pcWindow; - m_pcWindow->paintBackgroundBoxRel(m_cBoxFrame.iX, m_cBoxFrame.iY, m_cBoxFrame.iWidth, m_cBoxFrame.iHeight); - m_pcWindow = NULL; - return (true); -} - -////////////////////////////////////////////////////////////////////// -// Function Name: ScrollPageDown -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::scrollPageDown(const int pages) -{ - // send scroll up event to text box if there is one - if(m_pcTextBox != NULL) - { - m_pcTextBox->scrollPageDown(pages); - } - -} - -////////////////////////////////////////////////////////////////////// -// Function Name: ScrollPageUp -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::scrollPageUp(const int pages) -{ - // send scroll up event to text box if there is one - if(m_pcTextBox != NULL) - { - m_pcTextBox->scrollPageUp(pages); - } -} - -////////////////////////////////////////////////////////////////////// -// Function Name: Paint -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -bool CMsgBox::paint(void) -{ - /* - * do not paint stuff twice: - * => thread safety needed by movieplayer.cpp: - * one thread calls our paint method, the other one our hide method - * => no memory leaks - */ - //TRACE("->CMsgBox::Paint\r\n"); - - if (m_pcWindow != NULL) - { - TRACE(" return -> window already exists\r\n"); - return (false); - } - - // create new window - //m_pcWindow = new CFBWindow( m_cBoxFrame.iX, m_cBoxFrame.iY, m_cBoxFrame.iWidth, m_cBoxFrame.iHeight); - m_pcWindow = CFrameBuffer::getInstance(); - refresh(); - if(m_pcTextBox != NULL) - { - m_pcTextBox->paint(); - } - return (true); -} - -////////////////////////////////////////////////////////////////////// -// Function Name: Refresh -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -void CMsgBox::refresh(void) -{ - //TRACE("->CMsgBox::Refresh\r\n"); - - if (m_pcWindow == NULL) - { - TRACE(" return -> no window\r\n"); - return; - } - - //re-draw message box window - refreshBorder(); - refreshTitle(); - refreshFoot(); - - //draw body - m_pcWindow->paintBoxRel( m_cBoxFrameText.iX, - m_cBoxFrameText.iY, - m_cBoxFrameText.iWidth, - m_cBoxFrameText.iHeight, - COL_MENUCONTENT_PLUS_0); - - // rep-draw textbox if there is one - if(m_pcTextBox != NULL) - { - //m_pcTextBox->refresh(); - } -} - -////////////////////////////////////////////////////////////////////// -// Function Name: Exec -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -int CMsgBox::exec( int timeout, int returnDefaultOnTimeout) -{ - //TRACE("->CMsgBox::exec\r\n"); -#ifdef VC - int res = 1; - -#else neutrino_msg_t msg; neutrino_msg_data_t data; - int return_button = m_nFootButtons; int res = menu_return::RETURN_REPAINT; - // show message box - paint(); - if (m_pcWindow == NULL) - { - return res; /* out of memory */ - } + ccw_footer->getSelectedButtonObject()->setButtonAlias(mb_show_button); + int selected = ccw_footer->getSelectedButton(); - if ( timeout == -1 ) - timeout = g_settings.timing[SNeutrinoSettings::TIMING_EPG]; - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); + dprintf(DEBUG_NORMAL, "[CMsgBox] [%s - %d] getSelectedButton()= %d\n", __func__, __LINE__,ccw_footer->getSelectedButton()); - bool loop=true; + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + + bool loop = true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); - if (msg == CRCInput::RC_timeout && returnDefaultOnTimeout) + + //***timeout result*** + if (msg == CRCInput::RC_timeout && timeout > 0) { - // return default + result = enable_timeout_result ? default_result : mbrTimeout; loop = false; } - else if ( ((msg == CRCInput::RC_timeout) || - (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) && - (return_button & (mbCancel | mbBack))) +#if 0 + else if (((msg == CRCInput::RC_timeout && timeout > 0) || + (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) && + (mb_show_button & (mbCancel | mbBack))) { - m_nResult = (return_button & mbCancel) ? mbrCancel : mbrBack; + result = (mb_show_button & mbCancel) ? mbrCancel : (mb_show_button & mbOk) ? mbrOk: mbrBack; loop = false; } - else if ((msg == CRCInput::RC_green) && (return_button & mbNo)) - { - m_nResult = mbrNo; - loop = false; - } - else if ((msg == CRCInput::RC_red) && (return_button & mbYes)) - { - m_nResult = mbrYes; - loop = false; - } - else if(msg==CRCInput::RC_right) - { - bool ok = false; - while (!ok) - { - m_nResult = (CMsgBox::result_)((m_nResult + 1) & 3); - ok = m_nFootButtons & (1 << m_nResult); - } - - refreshFoot(); - } +#endif + //***navi buttons for scroll*** else if (msg == CRCInput::RC_up ) { - scrollPageUp(1); + scroll_up(); } else if (msg == CRCInput::RC_down) { - scrollPageDown(1); + scroll_down(); } - else if(msg==CRCInput::RC_left) - { - bool ok = false; - while (!ok) + else if (msg){ + //***navi buttons for button selection*** + if(msg==CRCInput::RC_right || msg==CRCInput::RC_left) { - m_nResult = (CMsgBox::result_)((m_nResult - 1) & 3); - ok = return_button & (1 << m_nResult); - } + if(msg==CRCInput::RC_right){ + ccw_footer->setSelectedButton(selected+1); + mb_show_button = ccw_footer->getSelectedButtonObject()->getButtonAlias(); + } + if(msg==CRCInput::RC_left){ + ccw_footer->setSelectedButton(selected-1); + mb_show_button = ccw_footer->getSelectedButtonObject()->getButtonAlias(); + } + dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\n", __func__, __LINE__, result, mb_show_button); + selected = ccw_footer->getSelectedButton(); + refreshFoot(); - refreshFoot(); - } - else if(msg == CRCInput::RC_ok) - { - loop = false; - } - else if (CNeutrinoApp::getInstance()->listModeKey(msg)) - { - // do nothing + //refresh timeout on any pressed navi key! This resets current timeout end to the initial value + if (timeout > 0) + timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + } + //***action buttons without preselection*** + for (size_t i = 0; i< ccw_footer->getButtonChainObject()->size(); i++){ + CComponentsButton* btn_action = static_cast(ccw_footer->getButtonChainObject()->getCCItem(i)); + if (msg == btn_action->getButtonDirectKey() || msg == btn_action->getButtonDirectKeyA()){ + result = (msg_result_t)btn_action->getButtonResult(); + dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\n", __func__, __LINE__, result, mb_show_button); + loop = false; + } + } + //***action button ok with preselected button*** + if ((msg == CRCInput::RC_ok) && (ccw_footer->getSelectedButtonObject()->getButtonAlias() == mb_show_button)){ + result = (msg_result_t)ccw_footer->getSelectedButtonObject()->getButtonResult(); + loop = false; + } + //***ignore*** + else if (CNeutrinoApp::getInstance()->listModeKey(msg)){ + // do nothing //TODO: if passed rc messages are ignored rc messaages: has no effect here too!! + } } else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { + dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] messages_return::cancel_all\n", __func__, __LINE__); res = menu_return::RETURN_EXIT_ALL; loop = false; } - } - hide(); -#endif //VC - return res; } -////////////////////////////////////////////////////////////////////// -// Function Name: SetText -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -bool CMsgBox::setText(const std::string* newText) + +void CMsgBox::refreshFoot(void) { - bool lresult = false; - // update text in textbox if there is one - if(m_pcTextBox != NULL && newText != NULL) + ccw_footer->paint(false); +} + + +void CMsgBox::setButtonText(const int& showed_button, const std::string& text) +{ + switch (showed_button) { - if(m_nMode & AUTO_WIDTH || m_nMode & AUTO_HIGH) - { - /* window might changed in size ...*/ - m_cBoxFrameText = m_pcTextBox->getWindowsPos(); + case mbYes: + btn_text_yes = text; + break; + case mbNo: + btn_text_no = text; + break; + case mbCancel: + btn_text_cancel = text; + break; + case mbBack: + btn_text_back = text; + break; + case mbOk: + btn_text_ok = text; + break; + default: + return; + break; + } + initButtons(); +} - m_cBoxFrame.iWidth = m_cBoxFrameText.iWidth + m_nWindowFrameBorderWidth; - m_cBoxFrame.iHeight = m_cBoxFrameText.iHeight + m_cBoxFrameFootRel.iHeight + m_cBoxFrameTitleRel.iHeight + m_nWindowFrameBorderWidth; +inline std::string CMsgBox::BTN_TEXT(const int& showed_button) +{ + string ret = ""; - initFramesRel(); - - // since the frames size has changed, we have to recenter the window again */ - if(m_nMode & CENTER) - { - m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - m_cBoxFrame.iWidth) >>1); - m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - m_cBoxFrame.iHeight) >>1); - } - } - - lresult = m_pcTextBox->setText(newText); + switch (showed_button) + { + case mbYes: + ret = btn_text_yes.empty() ? g_Locale->getText(LOCALE_MESSAGEBOX_YES) : btn_text_yes; + break; + case mbNo: + ret = btn_text_no.empty() ? g_Locale->getText(LOCALE_MESSAGEBOX_NO) : btn_text_no; + break; + case mbCancel: + ret = btn_text_cancel.empty() ? g_Locale->getText(LOCALE_MESSAGEBOX_CANCEL) : btn_text_cancel; + break; + case mbBack: + ret = btn_text_back.empty() ? g_Locale->getText(LOCALE_MESSAGEBOX_BACK) : btn_text_back; + break; + case mbOk: + ret = btn_text_ok.empty() ? g_Locale->getText(LOCALE_MESSAGEBOX_OK) : btn_text_ok; + break; + default: + break; } - return(lresult); + return ret; } -////////////////////////////////////////////////////////////////////// -// Function Name: SetText -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -int CMsgBox::result(void) +int ShowMsg2UTF( const char * const Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) { - return m_nResult; + CMsgBox msgBox (Text, + Title, + Icon, + NULL, + Width, + MSGBOX_MIN_HEIGHT, + ShowButtons, + Default, + Text_mode); + + if (color_frame != HINTBOX_DEFAULT_FRAME_COLOR){ + msgBox.setFrameThickness(4); + msgBox.setColorFrame(color_frame); + } + + msgBox.enableDefaultResultOnTimeOut(returnDefaultOnTimeout); + msgBox.setTimeOut(Timeout); + msgBox.paint(); + msgBox.exec(); + int res = msgBox.getResult(); + msgBox.hide(); + return res; } -////////////////////////////////////////////////////////////////////// -// Function Name: ShowMsg2UTF -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -int ShowMsg2UTF( const neutrino_locale_t Caption, - const char * const Text, - const CMsgBox::result_ Default, - const uint32_t ShowButtons, - const char * const Icon, - const int Width, - const int timeout, - bool returnDefaultOnTimeout) +int ShowMsg2UTF( const neutrino_locale_t Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) { - //TRACE("->CMsgBox::ShowTextUTF \r\n"); - - int result = ShowMsg2UTF( g_Locale->getText(Caption), - Text, - Default, - ShowButtons, - Icon, - Width, - timeout, - returnDefaultOnTimeout); + int result = ShowMsg( g_Locale->getText(Title), Text, Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); return (result); - } -////////////////////////////////////////////////////////////////////// -// Function Name: ShowMsg2UTF -// Description: -// Parameters: -// Data IN/OUT: -// Return: -// Notes: -////////////////////////////////////////////////////////////////////// -int ShowMsg2UTF( const char * const Title, - const char * const Text, - const CMsgBox::result_ Default, - const uint32_t ShowButtons, - const char * const Icon, - const int /*Width*/, - const int timeout, - bool returnDefaultOnTimeout) +//for compatibility +int ShowMsg( const neutrino_locale_t Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) { - int mode = CMsgBox::SCROLL | - CMsgBox::TITLE | - CMsgBox::FOOT | - CMsgBox::BORDER;// | - //CMsgBox::NO_AUTO_LINEBREAK | - //CMsgBox::CENTER | - //CMsgBox::AUTO_WIDTH | - //CMsgBox::AUTO_HIGH; - CBox position ( g_settings.screen_StartX+30, - g_settings.screen_StartY+30, - g_settings.screen_EndX - g_settings.screen_StartX-60, - g_settings.screen_EndY - g_settings.screen_StartY-60); + int result = ShowMsg2UTF(Title, Text, Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); - //TRACE("\r\n->ShowTextUTF %s\r\n",Text); - CMsgBox* msgBox = new CMsgBox( Text, - g_Font[SNeutrinoSettings::FONT_TYPE_MENU], - mode, - &position, - Title, - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], - Icon, - ShowButtons, - Default); - - msgBox->exec( timeout, returnDefaultOnTimeout); - - int res = msgBox->result(); - - delete msgBox; - - return res; + return (result); +} + +int ShowMsg( const char * const Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) +{ + int result = ShowMsg2UTF(Title, Text, Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); + + return (result); +} + +int ShowMsg( const neutrino_locale_t Title, + const std::string & Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) +{ + int result = ShowMsg2UTF(Title, Text.c_str(), Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); + + return (result); +} + +int ShowMsg( const neutrino_locale_t Title, + const neutrino_locale_t Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) +{ + int result = ShowMsg2UTF(g_Locale->getText(Title), g_Locale->getText(Text), Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); + + return (result); +} + +int ShowMsg( const std::string & Title, + const std::string & Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon, + const int Width, + const int Timeout, + bool returnDefaultOnTimeout, + const int& Text_mode, + fb_pixel_t color_frame) +{ + int result = ShowMsg2UTF(Title.c_str(), Text.c_str(), Default, ShowButtons, Icon, Width, Timeout, returnDefaultOnTimeout, Text_mode, color_frame); + + return (result); +} + +void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t& caption, const int& Text_mode) +{ + ShowMsg(caption, ErrorMsg, CMsgBox::mbrCancel, CMsgBox::mbBack, NEUTRINO_ICON_ERROR, 500, -1, false, Text_mode, COL_RED); +} + +void DisplayErrorMessage(const char * const ErrorMsg, const std::string& caption, const int& Text_mode) +{ + ShowMsg(caption, ErrorMsg, CMsgBox::mbrCancel, CMsgBox::mbBack, NEUTRINO_ICON_ERROR, 500, -1, false, Text_mode, COL_RED); +} + +void DisplayErrorMessage(const char * const ErrorMsg, const int& Text_mode) +{ + DisplayErrorMessage(ErrorMsg, LOCALE_MESSAGEBOX_ERROR, Text_mode); +} + +void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t& caption, const int& Text_mode, fb_pixel_t color_frame) +{ + ShowMsg(caption, InfoMsg, CMsgBox::mbrBack, CMsgBox::mbOk, NEUTRINO_ICON_INFO, 500, -1, false, Text_mode, color_frame); +} + +void DisplayInfoMessage(const char * const InfoMsg, const std::string& caption, const int& Text_mode, fb_pixel_t color_frame) +{ + ShowMsg(caption, InfoMsg, CMsgBox::mbrBack, CMsgBox::mbOk, NEUTRINO_ICON_INFO, 500, -1, false, Text_mode, color_frame); +} + +void DisplayInfoMessage(const char * const InfoMsg, const int& Text_mode, fb_pixel_t color_frame) +{ + DisplayInfoMessage(InfoMsg, LOCALE_MESSAGEBOX_INFO, Text_mode, color_frame); } diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index a30186389..46c9fbd75 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -1,170 +1,272 @@ /* - Neutrino-GUI - DBoxII-Project + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. + Initial implementation as an interface of the CMsgBox class + Copyright (C) 2005 Günther + Günther@tuxbox.berlios.org + Implementation of CComponent Window class. + Copyright (C) 2014-2015 Thilo Graf 'dbt' 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 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. + 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. - - *********************************************************** - - Module Name: msgbox.h . - - Description: interface of the CMsgBox class - - Date: Nov 2005 - - Author: Günther@tuxbox.berlios.org - based on code of Steffen Hehn 'McClean' - - Revision History: - Date Author Change Description - Nov 2005 Günther initial implementation - + along with this program. If not, see . */ -#if !defined(MSGBOX_H) -#define MSGBOX_H +#ifndef __C_MSGBOX__ +#define __C_MSGBOX__ #ifdef HAVE_CONFIG_H #include #endif -#include -#include "textbox.h" +#include "hintbox.h" +#include -#include +#define MSGBOX_MIN_WIDTH HINTBOX_MIN_WIDTH +#define MSGBOX_MIN_HEIGHT HINTBOX_MIN_HEIGHT + 75 -class CMsgBox + +//! Sub class of CHintBox. Shows a window as a messagebox +/*! +CMsgBox provides a small window with header, text and footer +with predefined buttons. +Optional you can add an icon in the header and/or beside left of +text and context buttons on the right site of header. +CMsgBox objects return predefined result values of type msg_result_t. +Button combinations are defined with button_define_t +*/ +class CMsgBox : public CHintBox { public: /* enum definition */ - enum result_ + enum msg_result_t { mbrYes = 0, mbrNo = 1, mbrCancel = 2, - mbrBack = 3 + mbrBack = 3, + mbrOk = 4, + mbrTimeout = 5, + + mbrNone = -1 }; - enum buttons_ + enum button_define_t { - mbYes = 0x01, - mbNo = 0x02, - mbCancel = 0x04, - mbAll = 0x07, - mbBack = 0x08 + mbYes = 0x01, + mbNo = 0x02, + mbCancel = 0x04, + mbBack = 0x08, + mbOk = 0x10, + mbOKCancel = 0x20, + mbYesNoCancel = 0x40, + mbYesNo = 0x80, + mbAll = 0x100, + //unused allign stuff, only for compatibility + mbBtnAlignCenter1 = 0x0400, /* centered, large distances */ + mbBtnAlignCenter2 = 0x0800, /* centered, small distances */ + mbBtnAlignLeft = 0x1000, + mbBtnAlignRight = 0x2000 }; - enum modes + + enum modes //TODO { - AUTO_WIDTH = 0x01, - AUTO_HIGH = 0x02, - SCROLL = 0x04, - TITLE = 0x08, - FOOT = 0x10, - BORDER = 0x20, - CENTER = 0x40, - NO_AUTO_LINEBREAK= 0x80 + AUTO_WIDTH = CTextBox::AUTO_WIDTH, + AUTO_HIGH = CTextBox::AUTO_HIGH, + SCROLL = CTextBox::SCROLL, +// TITLE = 0x08, +// FOOT = 0x10, +// BORDER = 0x20, + CENTER = CTextBox::CENTER, + NO_AUTO_LINEBREAK = CTextBox::NO_AUTO_LINEBREAK }; private: - /* Functions */ - void initVar(void); - void initFramesRel(void); + void init(const int& Height = -1, const int& ShowButtons = -1, const msg_result_t& Default_result = mbrNone); void refreshFoot(void); - void refreshTitle(void); - void refreshText(void); - void refreshBorder(void); + int mb_show_button; - /* Variables */ - std::string m_cIcon; - std::string m_cTitle; + ///current result value of selected button, see also getResult() + msg_result_t result; + ///defined default result, independently from current selected button result, see also setDefaultResult(), getDefaultResult() + msg_result_t default_result; + ///enable/disable default result on timeout + bool enable_timeout_result; + ///initialize basic timeout + void initTimeOut(); - CBox m_cBoxFrame; - CBox m_cBoxFrameText; - CBox m_cBoxFrameTitleRel; - CBox m_cBoxFrameFootRel; + ///alternate button text + std::string btn_text_ok, btn_text_yes, btn_text_no, btn_text_cancel, btn_text_back; + ///assigned button captions + std::string BTN_TEXT(const int& showed_button); - int m_nMode; - - int m_nWindowFrameBorderWidth; - - Font* m_pcFontTitle; - int m_nFontTitleHeight; - - Font* m_pcFontFoot; - int m_nFontFootHeight; - int m_nFootButtons; - - CTextBox* m_pcTextBox; - //CFBWindow* m_pcWindow; - CFrameBuffer * m_pcWindow; - - result_ m_nResult; + void initButtons(); public: /* Constructor */ - virtual ~CMsgBox(); - CMsgBox(); - CMsgBox(const char * text); - CMsgBox( const char * text, - Font* fontText, - const int mode, - const CBox* position, - const char * title, - Font* fontTitle, - const char * icon, - int return_button = mbCancel, - const result_ default_result = mbrCancel); + CMsgBox(const char* Text, + const char* Title = NULL, + const char* Icon = NULL, + const char* Picon = NULL, + const int& Width = MSGBOX_MIN_WIDTH, + const int& Height = MSGBOX_MIN_HEIGHT, + const int& ShowButtons = mbCancel, + const msg_result_t& Default_result = mbrCancel, + const int& Text_mode = CMsgBox::CENTER | CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::SCROLL); - /* Functions */ - bool paint(void); - bool hide(void); - int exec(int timeout,int returnDefaultOnTimeout = false); - void refresh(void); - void scrollPageDown(const int pages); - void scrollPageUp(const int pages); - int result(void); + CMsgBox(const char* Text, + const neutrino_locale_t locale_Title = NONEXISTANT_LOCALE, + const char* Icon = NULL, + const char* Picon = NULL, + const int& Width = MSGBOX_MIN_WIDTH, + const int& Height = MSGBOX_MIN_HEIGHT, + const int& ShowButtons = mbCancel, + const msg_result_t& Default_result = mbrCancel, + const int& Text_mode = CMsgBox::CENTER | CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::SCROLL); - bool setText(const std::string* newText); +// ~CMsgBox(); //inherited + int exec(); + + ///returns current result as msg_result_t, result corresponds to the current result value of selected button + msg_result_t getResult(){return result;}; + ///returns current default result as msg_result_t, independently from current selected button result + msg_result_t getDefaultResult(){return default_result;}; + ///sets current default result as msg_result_t, independently from current selected button result + void setDefaultResult(const msg_result_t& Default_result){default_result = Default_result;} + + /*! + Sets the displayed buttons. + This member allows to set and overrides already defined buttons from constructor, + parameter ''ShowButtons'' accepts given types, find under button_define_t enumeration + mbYes + mbNo + mbCancel + mbBack + mbOk + mbOKCancel + mbYesNoCancel + mbYesNo + mbAll + */ + void setShowedButtons(const int& ShowButtons){mb_show_button = ShowButtons; initButtons();} + + ///define timeout, timeout is enabled if parmeter 1 > -1, otherwise it will be disabled, + void setTimeOut(const int& Timeout){timeout = Timeout;}; + ///enable/disable defined timeout, otherwise it will be ignored, parameter 1: bool default = true + void enableDefaultResultOnTimeOut(bool enable = true); + + /*! + Default defined button text is already predefiend with parameter 'ShowButtons' from constructor. + This member allows to define an alternate text for an already defined button, + 1st parameter ''showed button'' accepts + mbYes + mbNo + mbCancel + mbBack + mbOk + others will be ignored! + 2nd parameter sets the new text for button as std::string. + Result values are not touched! + */ + void setButtonText(const int& showed_button, const std::string& text); + +// bool setText(const std::string* newText); }; -extern int ShowMsg2UTF( const neutrino_locale_t Caption, +#define DEFAULT_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH) + +int ShowMsg2UTF( const neutrino_locale_t Title, const char * const Text, - const CMsgBox::result_ Default, + const CMsgBox::msg_result_t Default, const uint32_t ShowButtons, const char * const Icon = NULL, - const int Width = 450, - const int timeout = -1, - bool returnDefaultOnTimeout = false); // UTF-8 + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 -extern int ShowMsg2UTF( const char * const Title, +int ShowMsg2UTF( const char * const Title, const char * const Text, - const CMsgBox::result_ Default, + const CMsgBox::msg_result_t Default, const uint32_t ShowButtons, const char * const Icon = NULL, - const int Width = 450, - const int timeout = -1, - bool returnDefaultOnTimeout = false); // UTF-8 - + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 +int ShowMsg( const neutrino_locale_t Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon = NULL, + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 + +int ShowMsg( const char * const Title, + const char * const Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon = NULL, + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 + +int ShowMsg( const neutrino_locale_t Title, + const std::string & Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon = NULL, + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 + +int ShowMsg( const neutrino_locale_t Title, + const neutrino_locale_t Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon = NULL, + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 + +int ShowMsg( const std::string & Title, + const std::string & Text, + const CMsgBox::msg_result_t Default, + const uint32_t ShowButtons, + const char * const Icon = NULL, + const int Width = MSGBOX_MIN_WIDTH, + const int Timeout = -1, + bool returnDefaultOnTimeout = false, + const int& Text_mode = DEFAULT_TEXT_MODE, + fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 + +void DisplayErrorMessage(const char * const ErrorMsg, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 +void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 +void DisplayErrorMessage(const char * const ErrorMsg, const std::string& caption, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const std::string& caption, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 #endif diff --git a/src/gui/widget/shellwindow.cpp b/src/gui/widget/shellwindow.cpp index a0602a68d..78fa6d23e 100644 --- a/src/gui/widget/shellwindow.cpp +++ b/src/gui/widget/shellwindow.cpp @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/gui/widget/stringinput.cpp b/src/gui/widget/stringinput.cpp index b47a99c4e..748683900 100644 --- a/src/gui/widget/stringinput.cpp +++ b/src/gui/widget/stringinput.cpp @@ -38,7 +38,7 @@ #include #include -#include +#include #include @@ -485,7 +485,7 @@ int CStringInput::exec( CMenuTarget* parent, const std::string & ) else if ( (msg==CRCInput::RC_home) || (msg==CRCInput::RC_timeout) ) { if ((*valueString != oldval) && - (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbCancel) == CMessageBox::mbrCancel)) { + (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); continue; } diff --git a/src/gui/widget/stringinput_ext.cpp b/src/gui/widget/stringinput_ext.cpp index 4b4923e00..859fc9588 100644 --- a/src/gui/widget/stringinput_ext.cpp +++ b/src/gui/widget/stringinput_ext.cpp @@ -35,7 +35,7 @@ #include -#include +#include #include #include @@ -235,19 +235,19 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) else if ( (msg==CRCInput::RC_home) || (msg==CRCInput::RC_timeout) ) { if(*valueString != oldval){ - int erg = ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMessageBox::mbrYes, CMessageBox::mbNo | CMessageBox::mbYes | CMessageBox::mbCancel); - if(erg==CMessageBox::mbrYes){ + int erg = ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbNo | CMsgBox::mbYes | CMsgBox::mbCancel); + if(erg==CMsgBox::mbrYes){ *valueString = oldval; loop=false; if(cancel != NULL) *cancel = true; } - else if(erg==CMessageBox::mbrNo){ + else if(erg==CMsgBox::mbrNo){ loop=false; if(cancel != NULL) *cancel = false; } - else if(erg==CMessageBox::mbrCancel){ + else if(erg==CMsgBox::mbrCancel){ timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); } } else { diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 07187bda3..6ac3c30cf 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -98,7 +98,7 @@ #include "gui/widget/hintbox.h" #include "gui/widget/icons.h" #include "gui/widget/menue.h" -#include "gui/widget/messagebox.h" +#include "gui/widget/msgbox.h" #include "gui/infoclock.h" #include "gui/parentallock_setup.h" #ifdef ENABLE_PIP @@ -2314,7 +2314,7 @@ void CNeutrinoApp::RealRun() #endif g_PluginList->startPlugin("startup"); if (!g_PluginList->getScriptOutput().empty()) { - ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack,CMessageBox::mbBack,NEUTRINO_ICON_SHELL); + ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_SHELL); } g_RCInput->clearRCMsg(); @@ -3240,14 +3240,14 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) } else if( msg == NeutrinoMessages::ANNOUNCE_SLEEPTIMER) { if( mode != mode_scart && mode != mode_standby) - skipSleepTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE,CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes); + skipSleepTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE,CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30, true) == CMsgBox::mbrYes); return messages_return::handled; } else if( msg == NeutrinoMessages::SLEEPTIMER) { if(data) {//INACTIVITY SLEEPTIMER skipShutdownTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE, - CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes);//FIXME + CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30, true) == CMsgBox::mbrYes);//FIXME if(skipShutdownTimer) { printf("NeutrinoMessages::INACTIVITY SLEEPTIMER: skiping\n"); skipShutdownTimer = false; @@ -3301,7 +3301,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) } else if( msg == NeutrinoMessages::ANNOUNCE_SHUTDOWN) { if( mode != mode_scart ) - skipShutdownTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 5) == CMessageBox::mbrYes); + skipShutdownTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 5) == CMsgBox::mbrYes); } else if( msg == NeutrinoMessages::SHUTDOWN ) { if(!skipShutdownTimer) { @@ -3319,21 +3319,21 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) } else if (msg == NeutrinoMessages::EVT_POPUP || msg == NeutrinoMessages::EVT_EXTMSG) { if (mode != mode_scart && mode != mode_standby) { - std::string timeout="-1"; + int timeout = HINTBOX_DEFAULT_TIMEOUT; std::string text = (char*)data; std::string::size_type pos; pos = text.find("&timeout=", 0); if (pos != std::string::npos) { - timeout = text.substr( pos+9, text.length()+1 ); + std::string tmp = text.substr( pos+9, text.length()+1 ); text[pos] = '\0'; + timeout = atoi(tmp.c_str()); } if (msg == NeutrinoMessages::EVT_POPUP) - ShowHint(LOCALE_MESSAGEBOX_INFO, text.c_str(), 0, atoi(timeout.c_str())); + ShowHint(LOCALE_MESSAGEBOX_INFO, text.c_str(), 0, timeout); else if (msg == NeutrinoMessages::EVT_EXTMSG) - ShowMsg(LOCALE_MESSAGEBOX_INFO, text, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO, 0, atoi(timeout.c_str())); - + ShowMsg(LOCALE_MESSAGEBOX_INFO, text, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO, 500, timeout); } delete[] (unsigned char*) data; return messages_return::handled; @@ -3354,7 +3354,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) text[pos] = '\n'; } if( mode != mode_scart ) - ShowMsg(LOCALE_TIMERLIST_TYPE_REMIND, text, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 + ShowMsg(LOCALE_TIMERLIST_TYPE_REMIND, text, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 delete[] (unsigned char*) data; return messages_return::handled; } @@ -3426,7 +3426,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) else if (msg == NeutrinoMessages::EVT_START_PLUGIN) { g_PluginList->startPlugin((const char *)data); if (!g_PluginList->getScriptOutput().empty()) { - ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack,CMessageBox::mbBack,NEUTRINO_ICON_SHELL); + ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMsgBox::mbrBack,CMsgBox::mbBack,NEUTRINO_ICON_SHELL); } delete[] (unsigned char*) data; @@ -3440,7 +3440,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) } return messages_return::handled; // ShowHint(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_EXTRA_ZAPIT_SDT_CHANGED), -// CMessageBox::mbrBack,CMessageBox::mbBack, NEUTRINO_ICON_INFO); +// CMsgBox::mbrBack,CMsgBox::mbBack, NEUTRINO_ICON_INFO); } else if (msg == NeutrinoMessages::EVT_HDMI_CEC_VIEW_ON) { if(g_settings.hdmi_cec_view_on) @@ -3480,8 +3480,8 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) CRecordManager::getInstance()->StopAutoRecord(); if(CRecordManager::getInstance()->RecordingStatus() || cYTCache::getInstance()->isActive()) { do_shutdown = - (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWN_RECORDING_QUERY, CMessageBox::mbrNo, - CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, true) == CMessageBox::mbrYes); + (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWN_RECORDING_QUERY, CMsgBox::mbrNo, + CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30, true) == CMsgBox::mbrYes); } if(do_shutdown) { @@ -3957,7 +3957,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) int returnval = menu_return::RETURN_REPAINT; if(actionKey == "help_recording") { - ShowMsg(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMessageBox::mbrBack, CMessageBox::mbBack); + ShowMsg(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMsgBox::mbrBack, CMsgBox::mbBack); } else if(actionKey=="shutdown") { ExitRun(true, 1); @@ -4051,8 +4051,8 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) if (recordingstatus) DisplayErrorMessage(g_Locale->getText(LOCALE_SERVICEMENU_RESTART_REFUSED_RECORDING)); else { - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SERVICEMENU_RESTART_HINT)); - hintBox->paint(); + CHint * hint = new CHint(LOCALE_SERVICEMENU_RESTART_HINT); + hint->paint(); saveSetup(NEUTRINO_SETTINGS_FILE); @@ -4063,7 +4063,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) delete g_fontRenderer; delete g_dynFontRenderer; - delete hintBox; + delete hint; stop_daemons(true); stop_video(); @@ -4104,7 +4104,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) parent->hide(); std::string text = "Easy menu switched " + string(g_settings.easymenu?"OFF":"ON") + string(", when restart box.\nRestart now?"); - if (ShowMsg(LOCALE_MESSAGEBOX_INFO, text, CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo, NEUTRINO_ICON_INFO, 0) == CMessageBox::mbrYes) { + if (ShowMsg(LOCALE_MESSAGEBOX_INFO, text, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NEUTRINO_ICON_INFO, 0) == CMsgBox::mbrYes) { g_settings.easymenu = (g_settings.easymenu == 0) ? 1 : 0; INFO("change easymenu to %d\n", g_settings.easymenu); g_RCInput->postMsg(NeutrinoMessages::REBOOT, 0); diff --git a/src/neutrino_menue.h b/src/neutrino_menue.h index 809466545..a1e37f4d9 100644 --- a/src/neutrino_menue.h +++ b/src/neutrino_menue.h @@ -186,6 +186,7 @@ enum MN_WIDGET_ID MN_WIDGET_ID_TESTMENU, MN_WIDGET_ID_TESTMENU_HARDWARE, MN_WIDGET_ID_TESTMENU_COMPONENTS, + MN_WIDGET_ID_TESTMENU_HINT_MSG_TESTS, //network services MN_WIDGET_ID_NETWORKSETUP_SERVICES, diff --git a/src/system/locals.h b/src/system/locals.h index f66030446..a12ed3ced 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -807,6 +807,7 @@ typedef enum LOCALE_HDD_UMOUNT, LOCALE_HDD_UMOUNT_WARN, LOCALE_HDD_UMOUNTED, + LOCALE_HELP_BOX_TITLE, LOCALE_IMAGEINFO_API, LOCALE_IMAGEINFO_CREATOR, LOCALE_IMAGEINFO_DATE, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 2439efe55..85e4049a1 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -807,6 +807,7 @@ const char * locale_real_names[] = "hdd_umount", "hdd_umount_warn", "hdd_umounted", + "help_box_title", "imageinfo.api", "imageinfo.creator", "imageinfo.date", diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index b27faff65..08d3af362 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -59,7 +59,7 @@ #include // obsolete #include -#include +#include #include #include @@ -518,8 +518,8 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK /* no need to confirm if we only remove deleted channels */ if (!delete_removed) { - int result = ShowMsg(msg, g_Locale->getText(LOCALE_RESET_CONFIRM), CMessageBox::mbrNo, CMessageBox::mbYes | CMessageBox::mbNo); - if (result != CMessageBox::mbrYes) + int result = ShowMsg(msg, g_Locale->getText(LOCALE_RESET_CONFIRM), CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo); + if (result != CMsgBox::mbrYes) return true; } From 205838789f30f54746ef8076cb416b54e740a0d8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 16 Apr 2016 20:01:44 +0200 Subject: [PATCH 02/85] CCDraw: try to fix possible data race Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/fc2eb68edcbf1c64974adc01a578986d0eef025d Author: Thilo Graf Date: 2016-04-16 (Sat, 16 Apr 2016) --- src/gui/components/cc_draw.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gui/components/cc_draw.h b/src/gui/components/cc_draw.h index 92178deb6..ff23c8638 100644 --- a/src/gui/components/cc_draw.h +++ b/src/gui/components/cc_draw.h @@ -277,7 +277,12 @@ class CCDraw : public COSDFader, public CComponentsSignals ///allow/disalows paint of item and its contents, but initialize of other properties are not touched ///this can be understood as a counterpart to isPainted(), but before paint and value of is_painted is modified temporarily till next paint of item //TODO: is this sufficiently? - void allowPaint(bool allow){cc_allow_paint = allow; is_painted = cc_allow_paint ? false : true;} + void allowPaint(bool allow) { + if (allow != cc_allow_paint) + cc_allow_paint = allow; + if (cc_allow_paint) + is_painted = false; + } ///returns visibility mode virtual bool paintAllowed(){return cc_allow_paint;}; From 36d6eeea06546112f248dae8a3594f43a8f7f079 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 18 Aug 2016 10:27:33 +0200 Subject: [PATCH 03/85] CMsgBox: add option to enable/disable button background replaces var name btn_contour for better plausibility Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/be740c155234ec8031ffa89c99be08fb702feea0 Author: Thilo Graf Date: 2016-08-18 (Thu, 18 Aug 2016) --- src/gui/components/cc_frm_footer.cpp | 17 ++++++++--------- src/gui/components/cc_frm_footer.h | 10 ++++++---- src/gui/widget/msgbox.cpp | 7 ++++--- src/gui/widget/msgbox.h | 8 ++++++++ 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 5b6da399e..c0605f4a5 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -83,7 +83,7 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const corner_rad = RADIUS_LARGE; corner_type = CORNER_BOTTOM; - btn_contour = false /*g_settings.theme.Button_gradient*/; //TODO: not implemented at the moment + ccf_enable_button_bg = false /*g_settings.theme.Button_gradient*/; //TODO: not implemented at the moment ccf_btn_font = NULL; chain = NULL; @@ -141,13 +141,15 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont continue; } - CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (btn_contour ? height-2*fr_thickness : height), txt, icon_name); + CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height), txt, icon_name); + btn->setButtonFont(ccf_btn_font); - btn->doPaintBg(btn_contour); + btn->doPaintBg(ccf_enable_button_bg); btn->setButtonDirectKey(content[i].directKey); btn->setButtonDirectKeyA(content[i].directKeyAlt); btn->setButtonResult(content[i].btn_result); btn->setButtonAlias(content[i].btn_alias); + btn->enableShadow(); //set button frames to icon color, predefined for available color buttons if (btn_auto_frame_col){ @@ -163,9 +165,6 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont btn->setColorFrame(f_col); } - if (btn_contour) - btn->setFrameThickness(3, 3); - chain->addCCItem(btn); //set x position of next button object @@ -296,12 +295,12 @@ void CComponentsFooter::setButtonLabel( const char *button_icon, setButtonLabel(button_icon, txt, chain_width, label_width, msg, result_value, alias_value, directKeyAlt); } -void CComponentsFooter::showButtonContour(bool show) +void CComponentsFooter::enableButtonBg(bool enable) { - btn_contour = show; + ccf_enable_button_bg = enable; if (chain) { for (size_t i= 0; i< chain->size(); i++) - chain->getCCItem(i)->doPaintBg(btn_contour); + chain->getCCItem(i)->doPaintBg(ccf_enable_button_bg); } } diff --git a/src/gui/components/cc_frm_footer.h b/src/gui/components/cc_frm_footer.h index 053a6d3da..aa0f2a19c 100644 --- a/src/gui/components/cc_frm_footer.h +++ b/src/gui/components/cc_frm_footer.h @@ -70,8 +70,8 @@ class CComponentsFooter : public CComponentsHeader fb_pixel_t color_body, fb_pixel_t color_shadow ); - ///show button frame and background, default false - bool btn_contour; + ///show button with background, default false + bool ccf_enable_button_bg; ///enable/disable button frame in icon color, predefined for red, green, yellow and blue, default disabled bool btn_auto_frame_col; @@ -126,8 +126,10 @@ class CComponentsFooter : public CComponentsHeader const int& alias_value = -1, const neutrino_msg_t& directKeyAlt = CRCInput::RC_nokey); - ///causes show/hide countour of button frame and background, parameter bool show, default= true - void showButtonContour(bool show = true); + ///enables background of buttons, parameter bool show, default= true + void enableButtonBg(bool enable = true); + ///disables background of buttons + void disableButtonBg(){enableButtonBg(false);} ///select a definied button, parameter1 as size_t void setSelectedButton(size_t item_id); diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 65a926475..2175b3d03 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -7,7 +7,7 @@ Günther@tuxbox.berlios.org Implementation of CComponent Window class. - Copyright (C) 2014-2015 Thilo Graf 'dbt' + Copyright (C) 2014-2016 Thilo Graf 'dbt' License: GPL @@ -87,6 +87,7 @@ void CMsgBox::init(const int& Height, const int& ShowButtons, const msg_result_t //enable footer and add its height showFooter(true); + btn_enable_bg = false; ccw_footer->doPaintBg(false); int h_current = height; h_current += ccw_footer->getHeight(); @@ -174,8 +175,8 @@ void CMsgBox::initButtons() ccw_footer->setButtonLabels(v_buttons, 0, 125); - //show buttons with frame and background - ccw_footer->showButtonContour(true); + //show buttons with background + ccw_footer->enableButtonBg(btn_enable_bg); //set position of meassage window and refresh window properties setCenterPos(); diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index 46c9fbd75..0cf3a8fc9 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -112,6 +112,9 @@ class CMsgBox : public CHintBox ///assigned button captions std::string BTN_TEXT(const int& showed_button); + ///enables/disable button background + bool btn_enable_bg; + void initButtons(); public: /* Constructor */ @@ -181,6 +184,11 @@ class CMsgBox : public CHintBox */ void setButtonText(const int& showed_button, const std::string& text); + ///enables background of buttons, parameter bool show, default= true + void enableButtonBg(bool enable = true); + ///disables background of buttons + void disableButtonBg(){enableButtonBg(false);} + // bool setText(const std::string* newText); }; From e58f8fafd5056cdb175e6bbd20c4275b02e40cd1 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 18 Aug 2016 11:20:45 +0200 Subject: [PATCH 04/85] shadow: paint shadow layer with multiple renderboxes Should help to paint a clean shadow frame Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/307b2763bda66d7bb1295a1ce5da23fad2a87ce0 Author: Thilo Graf Date: 2016-08-18 (Thu, 18 Aug 2016) Origin message was: ------------------ shadow: paint shadow layer with multiple renderboxes Should help to paint a clean shadow frame --- src/gui/components/cc_item.cpp | 53 ++++++++++++++++++++++++---------- src/gui/test_menu.cpp | 6 ++-- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 2e2f10891..34656abd6 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -90,31 +90,54 @@ void CComponentsItem::paintInit(bool do_save_bg) bool sh_r = (shadow & CC_SHADOW_ON) || (shadow & CC_SHADOW_RIGHT); bool sh_b = (shadow & CC_SHADOW_ON) || (shadow & CC_SHADOW_BOTTOM); - //if item is bound on a parent form, we must use real x/y values and from parent form as reference + //if item is bound on a parent form,... int ix = x, iy = y; + fb_pixel_t col_shadow_clean = 0; if (cc_parent){ + //we must use real x/y values and from parent form as reference ix = cc_xr; iy = cc_yr; + //we must use color of parent body instead screen background + col_shadow_clean = cc_parent->getColorBody(); } - //handle shadow width - if (width <= sw || height <= sw){ //don't use shadow, if item dimensions too small - dprintf(DEBUG_NORMAL, "\033[33m[CComponentsItem]\t[%s - %d] shadow dimensions too small sw=%d, shadow is disabled set dimension to 0\033[0m\n",__func__, __LINE__, sw); - shadow = CC_SHADOW_OFF; - sw = 0; - } - int isw = sw*2; - int ixsr = ix + width - isw/2; - int iysb = iy + height - isw/2; +// //handle shadow width +// if (width <= sw || height <= sw){ //don't use shadow, if item dimensions too small +// dprintf(DEBUG_NORMAL, "\033[33m[CComponentsItem]\t[%s - %d] shadow dimensions too small sw=%d, shadow is disabled set dimension to 0\033[0m\n",__func__, __LINE__, sw); +// shadow = CC_SHADOW_OFF; +// sw = 0; +// } //init paint layers cc_fbdata_t fbdata[] = { - {true, CC_FBDATA_TYPE_BGSCREEN, ix, iy, width+isw/2, height+isw/2, 0, 0, 0, 0, NULL, NULL, NULL, false}, //buffered bg - {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ixsr, iy+isw/2, isw, height, col_shadow, corner_rad, corner_type & CORNER_RIGHT, 0, NULL, NULL, NULL, false}, //shadow right - {sh_b, CC_FBDATA_TYPE_SHADOW_BOX, ix+isw/2, iysb, width, isw, col_shadow, corner_rad, corner_type & CORNER_BOTTOM, 0, NULL, NULL, NULL, false}, //shadow bottom - {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, width-2*th, height-2*th, col_body, rad, corner_type, 0, NULL, NULL, NULL, false}, //body - {true, CC_FBDATA_TYPE_FRAME, ix, iy, width, height, col_frame_cur, corner_rad, corner_type, th, NULL, NULL, NULL, false} //frame + //buffered bg + {true, CC_FBDATA_TYPE_BGSCREEN, ix, iy, width+sw, height+sw, 0, 0, 0, 0, NULL, NULL, NULL, false}, + + //shadow bottom corner left + {sh_b, CC_FBDATA_TYPE_SHADOW_BOX, ix+sw, iy+height-corner_rad, corner_rad+sw, corner_rad+sw, col_shadow, corner_rad, CORNER_BOTTOM_LEFT, 0, NULL, NULL, NULL, false}, + //clean up + {sh_b, CC_FBDATA_TYPE_SHADOW_BOX, ix, iy+height-corner_rad-sw, corner_rad+2*sw, corner_rad+sw, col_shadow_clean, corner_rad, CORNER_BOTTOM_LEFT, 0, NULL, NULL, NULL, false}, + + //shadow bottom corner right + {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ix+width-corner_rad, iy+height-corner_rad, corner_rad+sw, corner_rad+sw, col_shadow, corner_rad, corner_type & CORNER_BOTTOM_RIGHT, 0, NULL, NULL, NULL, false}, + //clean up + {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ix+width-corner_rad-sw,iy+height-corner_rad-sw, corner_rad+sw, corner_rad+sw, col_shadow_clean, corner_rad, corner_type & CORNER_BOTTOM_RIGHT, 0, NULL, NULL, NULL, false}, + + //shadow top corner right + {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ix+width-corner_rad, iy+sw, corner_rad+sw, corner_rad+sw, col_shadow, corner_rad, corner_type & CORNER_TOP_RIGHT, 0, NULL, NULL, NULL, false}, + //clean up + {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ix+width-corner_rad-sw, iy, corner_rad+sw, corner_rad+2*sw, col_shadow_clean, corner_rad, corner_type & CORNER_TOP_RIGHT, 0, NULL, NULL, NULL, false}, + + //shadow bar bottom + {sh_b, CC_FBDATA_TYPE_SHADOW_BOX, ix+2*sw+corner_rad, iy+height, max(width-2*corner_rad-2*sw,0), sw, col_shadow, 0, CORNER_NONE, 0, NULL, NULL, NULL, false}, + //shadow bar right + {sh_r, CC_FBDATA_TYPE_SHADOW_BOX, ix+width, iy+2*sw+corner_rad, sw, max(height-2*corner_rad-2*sw,0), col_shadow, 0, CORNER_NONE, 0, NULL, NULL, NULL, false}, + + //body box + {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, width-2*th, height-2*th, col_body, rad, corner_type, 0, NULL, NULL, NULL, false}, + //body frame + {true, CC_FBDATA_TYPE_FRAME, ix, iy, width, height, col_frame_cur, corner_rad, corner_type, th, NULL, NULL, NULL, false} }; for(size_t i =0; i< (sizeof(fbdata) / sizeof(fbdata[0])) ;i++) { diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 332489810..30ce470e6 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -394,8 +394,10 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } else if (actionKey == "square"){ - if (sq == NULL) - sq = new CComponentsShapeSquare (100, 220, 100, 100, NULL, false); + if (sq == NULL){ + sq = new CComponentsShapeSquare (100, 220, 100, 100, NULL, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_MENUCONTENT_PLUS_0, COL_RED); + sq->setCorner(11); + } if (!sq->isPainted()) sq->paint(); From ffdd2a760c1e83e6b3fa64fe2d76e341eed210bd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 19 Aug 2016 21:19:04 +0200 Subject: [PATCH 05/85] CTestMenu: shadow for circle TODO: not really nice at the moment Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/1888189fb306d65543292d268779290add8be823 Author: Thilo Graf Date: 2016-08-19 (Fri, 19 Aug 2016) --- src/gui/test_menu.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 30ce470e6..6d2ad06df 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -369,8 +369,11 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } #endif else if (actionKey == "button"){ - if (button == NULL) + if (button == NULL){ button = new CComponentsButtonRed(100, 100, 100, 50, "Test"); + button->enableShadow(); + } + if (!button->isPainted()){ if (button->isSelected()) @@ -385,7 +388,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } else if (actionKey == "circle"){ if (circle == NULL) - circle = new CComponentsShapeCircle (100, 100, 100, NULL, false); + circle = new CComponentsShapeCircle (100, 100, 100, NULL, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_MENUCONTENT_PLUS_0, COL_RED); if (!circle->isPainted()) circle->paint(); From 8b1bc5fb655921f92de0582a253f2172bf2bd084 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 20 Aug 2016 20:42:40 +0200 Subject: [PATCH 06/85] CComponentsItem: fix changeing color on select switching of frames expand select mode methodes with paremters for frame properties This should make variables col_frame_sel and fr_thickness_sel superfluous. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3477e28cd7bdec17653ec8f9c53d7b2240d17295 Author: Thilo Graf Date: 2016-08-20 (Sat, 20 Aug 2016) --- src/gui/components/cc_draw.cpp | 17 +------------ src/gui/components/cc_draw.h | 9 ++----- src/gui/components/cc_frm_button.cpp | 2 +- src/gui/components/cc_frm_scrollbar.cpp | 2 +- src/gui/components/cc_item.cpp | 33 +++++++++++++++++-------- src/gui/components/cc_item.h | 10 ++++++-- src/gui/components/cc_types.h | 2 +- src/gui/widget/hintbox.h | 2 +- 8 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index 1296e19d7..90c1f6a39 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -40,10 +40,8 @@ CCDraw::CCDraw() : COSDFader(g_settings.theme.menu_Content_alpha) col_body = col_body_old = COL_MENUCONTENT_PLUS_0; col_shadow = col_shadow_old = COL_SHADOW_PLUS_0; col_frame = col_frame_old = COL_FRAME_PLUS_0; - col_frame_sel = col_frame_sel_old = COL_MENUCONTENTSELECTED_PLUS_0; fr_thickness = fr_thickness_old = 0; - fr_thickness_sel = fr_thickness_sel_old = 3; corner_type = corner_type_old = CORNER_ALL; corner_rad = corner_rad_old = 0; @@ -116,11 +114,6 @@ inline bool CCDraw::applyDimChanges() fr_thickness_old = fr_thickness; ret = true; } - if (fr_thickness_sel != fr_thickness_sel_old){ - dprintf(DEBUG_INFO, "\033[33m[CCDraw]\t[%s - %d], dim changes fr_thickness_sel %d != fr_thickness_sel_old %d...\033[0m\n", __func__, __LINE__, fr_thickness_sel, fr_thickness_sel_old); - fr_thickness_old = fr_thickness; - ret = true; - } if (shadow_w != shadow_w_old){ dprintf(DEBUG_INFO, "\033[33m[CCDraw]\t[%s - %d], dim changes shadow_w_sel %d != shadow_w_old %d...\033[0m\n", __func__, __LINE__, shadow_w, shadow_w_old); shadow_w_old = shadow_w; @@ -158,11 +151,6 @@ inline bool CCDraw::applyColChanges() col_frame_old = col_frame; ret = true; } - if (col_frame_sel != col_frame_sel_old){ - dprintf(DEBUG_INFO, "\033[33m[CCDraw]\t[%s - %d], col changes col_frame_sel %d != col_frame_sel_old %d...\033[0m\n", __func__, __LINE__, col_frame_sel, col_frame_sel_old); - col_frame_old = col_frame; - ret = true; - } if (cc_body_gradient_enable != cc_body_gradient_enable_old){ dprintf(DEBUG_INFO, "\033[33m[CCDraw]\t[%s - %d], col changes cc_body_gradient_enable %d != cc_body_gradient_enable_old %d...\033[0m\n", __func__, __LINE__, cc_body_gradient_enable, cc_body_gradient_enable_old); cc_body_gradient_enable_old = cc_body_gradient_enable; @@ -218,13 +206,10 @@ inline void CCDraw::setWidth(const int& w) width = w; } -void CCDraw::setFrameThickness(const int& thickness, const int& thickness_sel) +void CCDraw::setFrameThickness(const int& thickness) { fr_thickness = thickness; - if (fr_thickness_sel != thickness_sel) - fr_thickness_sel = thickness_sel; - //ensure enabled frame if frame width > 0 cc_enable_frame = false; if (fr_thickness) diff --git a/src/gui/components/cc_draw.h b/src/gui/components/cc_draw.h index ff23c8638..3728db9a9 100644 --- a/src/gui/components/cc_draw.h +++ b/src/gui/components/cc_draw.h @@ -67,13 +67,9 @@ class CCDraw : public COSDFader, public CComponentsSignals fb_pixel_t col_shadow, col_shadow_old; ///property: color of frame fb_pixel_t col_frame, col_frame_old; - ///property: color of frame if component is selected, Note: fr_thickness_sel must be set - fb_pixel_t col_frame_sel, col_frame_sel_old; ///property: frame thickness, see also setFrameThickness() int fr_thickness, fr_thickness_old; - ///property: frame thickness of selected component, see also setFrameThickness() - int fr_thickness_sel, fr_thickness_sel_old; ///property: has corners with definied type, types are defined in /driver/frambuffer.h, without effect, if corner_radius=0 int corner_type, corner_type_old; @@ -210,13 +206,12 @@ class CCDraw : public COSDFader, public CComponentsSignals virtual void getDimensions(int* xpos, int* ypos, int* w, int* h){*xpos=x; *ypos=y; *w=width; *h=height;} ///set frame thickness - virtual void setFrameThickness(const int& thickness, const int& thickness_sel = 3); + virtual void setFrameThickness(const int& thickness); ///return of frame thickness virtual int getFrameThickness(){return fr_thickness;} ///set frame color virtual void setColorFrame(fb_pixel_t color){col_frame = color;} - ///set selected frame color - virtual void setColorFrameSel(fb_pixel_t color){col_frame_sel = color;} + virtual void set2ndColor(fb_pixel_t col_2nd){cc_body_gradient_2nd_col = col_2nd;} ///get frame color diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index 5986bf888..5f2b53b1e 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -188,7 +188,7 @@ void CComponentsButton::initCaption() } //set basic properties - int w_frame = max(fr_thickness, fr_thickness_sel); + int w_frame = fr_thickness; if (cc_btn_capt_obj){ //position and size int x_cap = w_frame; diff --git a/src/gui/components/cc_frm_scrollbar.cpp b/src/gui/components/cc_frm_scrollbar.cpp index 953892245..9b2aacf3e 100644 --- a/src/gui/components/cc_frm_scrollbar.cpp +++ b/src/gui/components/cc_frm_scrollbar.cpp @@ -140,7 +140,7 @@ void CComponentsScrollBar::initSegments() //init segment container if (sb_segments_obj == NULL){ sb_segments_obj = new CComponentsFrmChain(CC_CENTERED, CC_APPEND, w_seg, h_seg_obj, NULL, CC_DIR_Y, this, false); - sb_segments_obj->setFrameThickness(0,0); + sb_segments_obj->setFrameThickness(0/*,0*/); sb_segments_obj->setAppendOffset(0, 3); }else sb_segments_obj->setDimensionsAll(CC_CENTERED, CC_APPEND, w_seg, h_seg_obj); diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 34656abd6..6cebf6ebd 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -72,16 +72,11 @@ void CComponentsItem::paintInit(bool do_save_bg) is_painted = false; //force repaint if required } + //calculate current needed frame thickeness and color, if item selected or not + fb_pixel_t col_frame_cur = col_frame; + int th = fr_thickness; + if (v_fbdata.empty()){ - int th = fr_thickness; - fb_pixel_t col_frame_cur = col_frame; - - //calculate current needed frame thickeness and color, if item selected or not - if (cc_item_selected){ - col_frame_cur = col_frame_sel; - th = max(fr_thickness_sel, fr_thickness); - } - //calculate current needed corner radius for body box, depends of frame thickness int rad = (corner_rad>th) ? corner_rad-th : corner_rad; int sw = (shadow) ? shadow_w : 0; @@ -136,6 +131,7 @@ void CComponentsItem::paintInit(bool do_save_bg) //body box {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, width-2*th, height-2*th, col_body, rad, corner_type, 0, NULL, NULL, NULL, false}, + //body frame {true, CC_FBDATA_TYPE_FRAME, ix, iy, width, height, col_frame_cur, corner_rad, corner_type, th, NULL, NULL, NULL, false} }; @@ -145,9 +141,18 @@ void CComponentsItem::paintInit(bool do_save_bg) continue; v_fbdata.push_back(fbdata[i]); } - dprintf(DEBUG_DEBUG, "[CComponentsItem] %s:\ncc_item_type: %d\ncc_item_index = %d\nheight = %d\nwidth = %d\n", __func__, cc_item_type, cc_item_index, height, width); } + + //handle frame color for slected/not selected item + if (fr_thickness) { + for(size_t j =0; j< v_fbdata.size() ;j++) { + if ((v_fbdata[j].fbdata_type == CC_FBDATA_TYPE_FRAME)){ + v_fbdata[j].color = col_frame_cur; + v_fbdata[j].frame_thickness = th; + } + } + } paintFbItems(do_save_bg); } @@ -242,3 +247,11 @@ void CComponentsItem::setFocus(bool focus) } cc_has_focus = focus; } + +void CComponentsItem::setSelected(bool selected, const fb_pixel_t& sel_frame_col, const fb_pixel_t& frame_col, const fb_pixel_t& sel_body_col, const fb_pixel_t& body_col, const int& frame_w, const int& sel_frame_w) +{ + cc_item_selected = selected; + fr_thickness = cc_item_selected ? sel_frame_w : frame_w; + col_body = cc_item_selected ? sel_body_col : body_col; + col_frame = cc_item_selected ? sel_frame_col : frame_col; +} diff --git a/src/gui/components/cc_item.h b/src/gui/components/cc_item.h index 30fbf0442..dad19d96e 100644 --- a/src/gui/components/cc_item.h +++ b/src/gui/components/cc_item.h @@ -105,8 +105,14 @@ class CComponentsItem : public CComponents ///syncronizes item colors with current color settings if required, NOTE: overwrites internal values! virtual void syncSysColors(); - ///set select mode, see also col_frame_sel - virtual void setSelected(bool selected){cc_item_selected = selected;}; + ///set select mode + virtual void setSelected(bool selected, + const fb_pixel_t& sel_frame_col = COL_MENUCONTENTSELECTED_PLUS_0, + const fb_pixel_t& frame_col = COL_SHADOW_PLUS_0, + const fb_pixel_t& sel_body_col = COL_MENUCONTENT_PLUS_0, + const fb_pixel_t& body_col = COL_MENUCONTENT_PLUS_0, + const int& frame_w = 3, + const int& sel_frame_w = 3); ///set enable mode, see also cc_item_enabled virtual void setEnable(bool enabled){cc_item_enabled = enabled;}; diff --git a/src/gui/components/cc_types.h b/src/gui/components/cc_types.h index 6a3490a6a..4a6628ba9 100644 --- a/src/gui/components/cc_types.h +++ b/src/gui/components/cc_types.h @@ -30,7 +30,7 @@ #include #include #include - +#include class CComponentsForm; class CComponentsScrollBar; diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index a071824ae..eaf743cb9 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -39,7 +39,7 @@ //frame around hint container as indent #define W_FRAME 15 //frame color around hint/message box -#define HINTBOX_DEFAULT_FRAME_COLOR COL_MENUCONTENT_PLUS_6 +#define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME //! Sub class of CComponentsWindow. Shows a window as a hintbox with text and optional icon beside of text. /*! From a6f28430c5b83d87ea1848e327146f2bb5e02c06 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 21 Aug 2016 16:12:19 +0200 Subject: [PATCH 07/85] CComponentsFooter: reduced button height for better optical view into footer Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/779c51bd008d4a4c2a0155b22373ff70eaa14b5d Author: Thilo Graf Date: 2016-08-21 (Sun, 21 Aug 2016) --- src/gui/components/cc_frm_footer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index c0605f4a5..b72afbc74 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -141,7 +141,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont continue; } - CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height), txt, icon_name); + CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height)- 2*shadow_w, txt, icon_name, NULL, false, true, CC_SHADOW_ON); btn->setButtonFont(ccf_btn_font); btn->doPaintBg(ccf_enable_button_bg); @@ -149,7 +149,6 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont btn->setButtonDirectKeyA(content[i].directKeyAlt); btn->setButtonResult(content[i].btn_result); btn->setButtonAlias(content[i].btn_alias); - btn->enableShadow(); //set button frames to icon color, predefined for available color buttons if (btn_auto_frame_col){ From dba17b359c7f1717834f47dc52ff4915a0798a93 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 21 Aug 2016 18:32:14 +0200 Subject: [PATCH 08/85] CComponentsFooter: add member enableButtonShadow() Possibility to pass button properties into button objects Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/363cf101d127c2b1d399e290e11e5630153733e6 Author: Thilo Graf Date: 2016-08-21 (Sun, 21 Aug 2016) --- src/gui/components/cc_frm_footer.cpp | 13 ++++++++++++- src/gui/components/cc_frm_footer.h | 9 ++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index b72afbc74..5c2f5878d 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -72,6 +72,7 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const height = max(h, cch_font->getHeight()); shadow = shadow_mode; + ccf_enable_button_shadow = false; col_frame = color_frame; col_body = color_body; col_shadow = color_shadow; @@ -141,7 +142,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont continue; } - CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height)- 2*shadow_w, txt, icon_name, NULL, false, true, CC_SHADOW_ON); + CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height)- 2*shadow_w, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); btn->setButtonFont(ccf_btn_font); btn->doPaintBg(ccf_enable_button_bg); @@ -354,3 +355,13 @@ void CComponentsFooter::setButtonText(const uint& btn_id, const std::string& tex else dprintf(DEBUG_NORMAL, "[CComponentsForm] [%s - %d] Error: can't set button text, possible wrong btn_id=%u, item=%p...\n", __func__, __LINE__, btn_id, item); } + + +void CComponentsFooter::enableButtonShadow(int mode, const int& shadow_width, bool force_paint) +{ + ccf_enable_button_shadow = mode; + if (chain){ + for(size_t i=0; isize(); i++) + chain->enableShadow(mode, shadow_width, force_paint); + } +} diff --git a/src/gui/components/cc_frm_footer.h b/src/gui/components/cc_frm_footer.h index aa0f2a19c..863ca7cea 100644 --- a/src/gui/components/cc_frm_footer.h +++ b/src/gui/components/cc_frm_footer.h @@ -72,6 +72,8 @@ class CComponentsFooter : public CComponentsHeader ///show button with background, default false bool ccf_enable_button_bg; + ///enable button with shadow, default false + bool ccf_enable_button_shadow; ///enable/disable button frame in icon color, predefined for red, green, yellow and blue, default disabled bool btn_auto_frame_col; @@ -178,7 +180,12 @@ class CComponentsFooter : public CComponentsHeader CC_FOOTER_SIZE_SMALL = 1 }; ///set size of footer, possible values are CC_FOOTER_SIZE_LARGE, CC_FOOTER_SIZE_SMALL - virtual void setSizeMode(const int& size_mode){cch_size_mode = size_mode; initCCItems();}; + virtual void setSizeMode(const int& size_mode){cch_size_mode = size_mode; initCCItems();} + + ///enable and sets shadow properties for embedded buttons + void enableButtonShadow(int mode = CC_SHADOW_ON, const int& shadow_width = RADIUS_SMALL, bool force_paint = false); + ///disable shadow for embedded buttons + void disbaleButtonShadow(){enableButtonShadow(CC_SHADOW_OFF);} }; #endif From a54434519f402fbc8812ac0abc7598dfcb98982f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 27 Aug 2016 12:23:26 +0200 Subject: [PATCH 09/85] cc_types.h: add compatible types shadow types CC_SHADOW_ON is should compatible Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/147246cead516c67901cad7948487a2438a5a57c Author: Thilo Graf Date: 2016-08-27 (Sat, 27 Aug 2016) --- src/gui/components/cc_types.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/components/cc_types.h b/src/gui/components/cc_types.h index 4a6628ba9..5fc909f0e 100644 --- a/src/gui/components/cc_types.h +++ b/src/gui/components/cc_types.h @@ -186,10 +186,13 @@ typedef struct cc_string_ext_txt_t #define CC_WIDTH_MIN 16 #define CC_HEIGHT_MIN 16 -#define CC_SHADOW_OFF 0 -#define CC_SHADOW_ON 1 -#define CC_SHADOW_RIGHT 2 -#define CC_SHADOW_BOTTOM 4 +#define CC_SHADOW_OFF 0x0 +#define CC_SHADOW_RIGHT 0x2 +#define CC_SHADOW_BOTTOM 0x4 +#define CC_SHADOW_CORNER_BOTTOM_LEFT 0x8 +#define CC_SHADOW_CORNER_BOTTOM_RIGHT 0x10 +#define CC_SHADOW_CORNER_TOP_RIGHT 0x20 +#define CC_SHADOW_ON CC_SHADOW_RIGHT | CC_SHADOW_BOTTOM | CC_SHADOW_CORNER_BOTTOM_LEFT | CC_SHADOW_CORNER_BOTTOM_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT #define CC_SAVE_SCREEN_YES true #define CC_SAVE_SCREEN_NO false From c759d6ddfb940e29de06c0f74545c902e6f1c8db Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 27 Aug 2016 12:29:32 +0200 Subject: [PATCH 10/85] CComponetnsItem: try to assign shadow areas TODO: possible crashes on some constellations Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/929b5da892bb98b8f466077c426a93556545a04a Author: Thilo Graf Date: 2016-08-27 (Sat, 27 Aug 2016) --- src/gui/components/cc_item.cpp | 100 +++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 6cebf6ebd..076f743ab 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -78,12 +78,11 @@ void CComponentsItem::paintInit(bool do_save_bg) if (v_fbdata.empty()){ //calculate current needed corner radius for body box, depends of frame thickness - int rad = (corner_rad>th) ? corner_rad-th : corner_rad; - int sw = (shadow) ? shadow_w : 0; + int rad = (th) ? corner_rad-th : corner_rad; + //and ensure max radius < dimensions + rad = min(min(rad, corner_rad), min(width, height)); - //evaluate shadow mode - bool sh_r = (shadow & CC_SHADOW_ON) || (shadow & CC_SHADOW_RIGHT); - bool sh_b = (shadow & CC_SHADOW_ON) || (shadow & CC_SHADOW_BOTTOM); + int sw = (shadow) ? shadow_w : 0; //if item is bound on a parent form,... int ix = x, iy = y; @@ -103,37 +102,92 @@ void CComponentsItem::paintInit(bool do_save_bg) // sw = 0; // } + //evaluate shadow layer parts + //handle shadow corner dimensions + int sh_cdx = rad+sw, sh_cdy = rad+sw; + + //handle shadow positions + //...corner bottom right + int sh_cbr_x = ix+width-sh_cdx+sw; + int sh_cbr_y = iy+height-sh_cdy+sw; + + //...corner top right + int sh_ctr_x = sh_cbr_x; + int sh_ctr_y = iy+sw; + + //...corner bottom left + int sh_cbl_x = ix+sw; + int sh_cbl_y = sh_cbr_y; + + //...bar bottom + int sh_bx = sh_cbl_x+sh_cdx; + int sh_by = iy+height; + int sh_bdx = width-sh_cdx-sh_cdx; + + //...bar right + int sh_rx = ix+width; + int sh_ry = sh_ctr_y+sh_cdy; + int sh_rdy = height-sh_cdy-sh_cdy; + + //corners + bool sh_ctr = (shadow & CC_SHADOW_CORNER_TOP_RIGHT); + bool sh_cbr = (shadow & CC_SHADOW_CORNER_BOTTOM_RIGHT); + bool sh_cbl = (shadow & CC_SHADOW_CORNER_BOTTOM_LEFT); + + //...bars + bool sh_br = (shadow & CC_SHADOW_RIGHT); + printf("<<<<<<<<<< Date: Sat, 27 Aug 2016 12:42:15 +0200 Subject: [PATCH 11/85] CTestMenu: adopt for last changes Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/b233c06af3ba18e15d763e38a49f16cf05e5117d Author: Thilo Graf Date: 2016-08-27 (Sat, 27 Aug 2016) --- src/gui/test_menu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 6d2ad06df..03130bc26 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -398,8 +398,8 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } else if (actionKey == "square"){ if (sq == NULL){ - sq = new CComponentsShapeSquare (100, 220, 100, 100, NULL, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_MENUCONTENT_PLUS_0, COL_RED); - sq->setCorner(11); + sq = new CComponentsShapeSquare (100, 220, 100, 100, NULL, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_LIGHT_GRAY, COL_RED); + sq->setCorner(11, CORNER_BOTTOM_LEFT); } if (!sq->isPainted()) From 430086567952dc85e27d5000e62e194aa0de95af Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 30 Aug 2016 11:51:53 +0200 Subject: [PATCH 12/85] Shadow: try to optimize shadow areas * cleanup inner part of box on round corners, frames considered * adopt implementations in some gui classes * some debug lines removed * test menu adopted * try to fix corner caluculation to avoid transparent holes Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/a17d61de8c772a4524c84a2ce35f550870527520 Author: Thilo Graf Date: 2016-08-30 (Tue, 30 Aug 2016) --- src/gui/components/cc_item.cpp | 133 ++++++++++++++++----------------- src/gui/infoviewer.cpp | 4 +- src/gui/test_menu.cpp | 4 +- src/gui/upnpbrowser.cpp | 2 +- src/gui/widget/menue.cpp | 2 +- 5 files changed, 72 insertions(+), 73 deletions(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 076f743ab..7e10a52a0 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -74,120 +74,120 @@ void CComponentsItem::paintInit(bool do_save_bg) //calculate current needed frame thickeness and color, if item selected or not fb_pixel_t col_frame_cur = col_frame; - int th = fr_thickness; + int th = cc_enable_frame ? fr_thickness : 0; if (v_fbdata.empty()){ - //calculate current needed corner radius for body box, depends of frame thickness - int rad = (th) ? corner_rad-th : corner_rad; - //and ensure max radius < dimensions - rad = min(min(rad, corner_rad), min(width, height)); + //set current position and dimensions + int ix = x, iy = y, dx = width, dy = height; + + //and ensure sw is not larger than body dimensions, max x% + int sw = (shadow) ? min(shadow_w, min(dx, dy)*50/100) : 0; - int sw = (shadow) ? shadow_w : 0; + //set current needed corner main box radius + int box_rad = corner_rad; + + //and ensure max main box radius < dimensions + if (2*box_rad > dy) + box_rad -= max(0, 2*box_rad-dy); + if (2*box_rad > dx) + box_rad -= max(0, 2*box_rad-dy); + + //Workaround: ensure radius values >= 0, framebuffer methode paintBoxRel() gets confused + box_rad = max(box_rad-th, 0); - //if item is bound on a parent form,... - int ix = x, iy = y; fb_pixel_t col_shadow_clean = 0; + //if item is bound on a parent form,... if (cc_parent){ - //we must use real x/y values and from parent form as reference + //...we must use real x/y values and from parent form as reference ix = cc_xr; iy = cc_yr; - //we must use color of parent body instead screen background + //...we must use color of parent body instead screen background col_shadow_clean = cc_parent->getColorBody(); } -// //handle shadow width -// if (width <= sw || height <= sw){ //don't use shadow, if item dimensions too small -// dprintf(DEBUG_NORMAL, "\033[33m[CComponentsItem]\t[%s - %d] shadow dimensions too small sw=%d, shadow is disabled set dimension to 0\033[0m\n",__func__, __LINE__, sw); -// shadow = CC_SHADOW_OFF; -// sw = 0; -// } + ///evaluate shadow layer parts + //handle general shadow corner dimensions + int sh_cdx = box_rad+sw+th; //width + int sh_cdy = box_rad+sw+th; //height + + //adapt shadow corner dimensions if body dimensions are too small, use an offset if required + int sh_cdx_size_offset, sh_cdy_size_offset = 0; + if (sh_cdy*2 > dy) + sh_cdy_size_offset = sh_cdy*2-dy; + if (sh_cdx*2 > dx) + sh_cdx_size_offset = sh_cdx*2-dx; - //evaluate shadow layer parts - //handle shadow corner dimensions - int sh_cdx = rad+sw, sh_cdy = rad+sw; - //handle shadow positions //...corner bottom right - int sh_cbr_x = ix+width-sh_cdx+sw; - int sh_cbr_y = iy+height-sh_cdy+sw; - + int sh_cbr_x = ix+dx-sh_cdx+sw; + int sh_cbr_y = iy+dy-sh_cdy+sw; + //...corner top right int sh_ctr_x = sh_cbr_x; int sh_ctr_y = iy+sw; - + //...corner bottom left int sh_cbl_x = ix+sw; int sh_cbl_y = sh_cbr_y; - + + //handle general shadow bar dimensions + int sh_bdx = dx-sh_cdx-sh_cdx; + int sh_rdy = dy-sh_cdy-sh_cdy; + //...bar bottom int sh_bx = sh_cbl_x+sh_cdx; - int sh_by = iy+height; - int sh_bdx = width-sh_cdx-sh_cdx; - + int sh_by = iy+dy; + //...bar right - int sh_rx = ix+width; + int sh_rx = ix+dx; int sh_ry = sh_ctr_y+sh_cdy; - int sh_rdy = height-sh_cdy-sh_cdy; - + //corners bool sh_ctr = (shadow & CC_SHADOW_CORNER_TOP_RIGHT); bool sh_cbr = (shadow & CC_SHADOW_CORNER_BOTTOM_RIGHT); bool sh_cbl = (shadow & CC_SHADOW_CORNER_BOTTOM_LEFT); - //...bars + //...shadow bar right bool sh_br = (shadow & CC_SHADOW_RIGHT); - printf("<<<<<<<<<<setCorner(RADIUS_LARGE, CORNER_TOP_RIGHT); }else header->setDimensionsAll(head_x, ChanNameY, head_w, time_height); @@ -470,7 +470,7 @@ void CInfoViewer::paintBody() //set corner and shadow modes, consider virtual zap mode body->setCorner(RADIUS_LARGE, (zap_mode) ? CORNER_BOTTOM : CORNER_NONE); - body->enableShadow(zap_mode ? CC_SHADOW_ON : CC_SHADOW_RIGHT); + body->enableShadow(zap_mode ? CC_SHADOW_ON : CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT); body->setColorBody(g_settings.theme.infobar_gradient_body ? COL_MENUHEAD_PLUS_0 : COL_INFOBAR_PLUS_0); body->enableColBodyGradient(g_settings.theme.infobar_gradient_body, COL_INFOBAR_PLUS_0, g_settings.theme.infobar_gradient_body_direction); diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 03130bc26..9d9b84fd7 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -398,8 +398,8 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) } else if (actionKey == "square"){ if (sq == NULL){ - sq = new CComponentsShapeSquare (100, 220, 100, 100, NULL, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_LIGHT_GRAY, COL_RED); - sq->setCorner(11, CORNER_BOTTOM_LEFT); + sq = new CComponentsShapeSquare (0, 0, 100, 100, NULL, CC_SHADOW_ON, COL_OLIVE, COL_LIGHT_GRAY, COL_RED); + sq->enableFrame(true,1); } if (!sq->isPainted()) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index f6c34630a..3d80069a1 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -989,7 +989,7 @@ void CUpnpBrowserGui::paintDevices() // Head CComponentsHeaderLocalized header(m_x, m_header_y, m_width, m_header_height, LOCALE_UPNPBROWSER_HEAD, NEUTRINO_ICON_UPNP); - header.enableShadow(CC_SHADOW_RIGHT, -1, true); + header.enableShadow( CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); if (CNeutrinoApp::getInstance()->isMuted()) //TODO: consider mute mode on runtime header.addContextButton(NEUTRINO_ICON_BUTTON_MUTE_SMALL); else diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 32533c863..ffb9c478e 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1240,7 +1240,7 @@ void CMenuWidget::paint() // paint head if (header == NULL){ header = new CComponentsHeader(x, y, width + sb_width, hheight, getName(), iconfile); - header->enableShadow(CC_SHADOW_RIGHT); + header->enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT); header->setOffset(10); } header->setColorAll(COL_FRAME_PLUS_0, COL_MENUHEAD_PLUS_0, COL_SHADOW_PLUS_0); From 2e7deeb88bd2f019dbc7d840e00e71c83e1ed25b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 12 Sep 2016 08:28:08 +0200 Subject: [PATCH 13/85] CComponentsItem: remove frame witdth from boxrad calculation This fix possible artefacts on the bottom right corner with frame Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/b6185ea78decf04cffcae8d82e2727620bb61f3c Author: Thilo Graf Date: 2016-09-12 (Mon, 12 Sep 2016) --- src/gui/components/cc_item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 7e10a52a0..b3b0ea4b7 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -93,7 +93,7 @@ void CComponentsItem::paintInit(bool do_save_bg) box_rad -= max(0, 2*box_rad-dy); //Workaround: ensure radius values >= 0, framebuffer methode paintBoxRel() gets confused - box_rad = max(box_rad-th, 0); + box_rad = max(box_rad, 0); fb_pixel_t col_shadow_clean = 0; //if item is bound on a parent form,... From 164f91798d1a276a9e4e58c60a043ece02601435 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 14 Sep 2016 10:30:44 +0200 Subject: [PATCH 14/85] CComponentsItem: unused vars commented out Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/eb78743e4a01b3b0bd0a0b044e43a87a5a7ebcd2 Author: Thilo Graf Date: 2016-09-14 (Wed, 14 Sep 2016) --- src/gui/components/cc_item.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index b3b0ea4b7..cfb4a1f81 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -111,12 +111,13 @@ void CComponentsItem::paintInit(bool do_save_bg) int sh_cdy = box_rad+sw+th; //height //adapt shadow corner dimensions if body dimensions are too small, use an offset if required - int sh_cdx_size_offset, sh_cdy_size_offset = 0; + int /*sh_cdx_size_offset,*/ sh_cdy_size_offset = 0; if (sh_cdy*2 > dy) sh_cdy_size_offset = sh_cdy*2-dy; +#if 0 if (sh_cdx*2 > dx) sh_cdx_size_offset = sh_cdx*2-dx; - +#endif //handle shadow positions //...corner bottom right int sh_cbr_x = ix+dx-sh_cdx+sw; From 7179f3d3f03b8c2e2490913102a7e4672264f5b6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 24 Sep 2016 00:52:59 +0200 Subject: [PATCH 15/85] Try to rework footer * try to fix enableButtonShadow(), seems an init is missing * shadow fixed Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/2e631fd0ce2e41251cb1ae84a0b275f26bfd95b2 Author: Thilo Graf Date: 2016-09-24 (Sat, 24 Sep 2016) --- src/gui/components/cc_frm_button.cpp | 28 ++++- src/gui/components/cc_frm_button.h | 6 + src/gui/components/cc_frm_footer.cpp | 151 ++++++++++++++++--------- src/gui/components/cc_frm_footer.h | 10 +- src/gui/components/cc_frm_header.h | 4 +- src/gui/components/cc_item_picture.cpp | 10 +- src/gui/components/cc_item_picture.h | 12 +- src/gui/test_menu.cpp | 7 +- src/gui/widget/msgbox.cpp | 5 +- 9 files changed, 152 insertions(+), 81 deletions(-) diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index 5f2b53b1e..f611d65a4 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -101,7 +101,7 @@ void CComponentsButton::initVarButton( const int& x_pos, const int& y_pos, const width = w; height = h; shadow = shadow_mode; - shadow_w = shadow ? OFFSET_SHADOW/2 : 0; //buttons are mostly small elements, so these elements should have a reasonable shadow width + shadow_w = shadow != CC_SHADOW_OFF ? OFFSET_SHADOW/2 : 0; //buttons are mostly small elements, so these elements should have a reasonable shadow width cc_body_gradient_enable = CC_COLGRAD_OFF/*g_settings.gradiant*/; //TODO: gradient is prepared for use but disabled at the moment till some other parts of gui parts are provide gradient setColBodyGradient(cc_body_gradient_enable/*CColorGradient::gradientLight2Dark*/, CFrameBuffer::gradientVertical, CColorGradient::light); @@ -195,24 +195,34 @@ void CComponentsButton::initCaption() x_cap += cc_btn_icon_obj ? cc_btn_icon_obj->getWidth() : 0; int w_cap = width - w_frame - append_x_offset - x_cap - w_frame; - int h_cap = height*65/100 /*- 2*fr_thickness*/; - + int h_cap = (height*75/100) - 2*w_frame; /*NOTE: paint of centered text in y direction without y_offset looks unlovely displaced in y direction especially besides small icons and inside small areas, but text render isn't wrong here, because capitalized chars or long chars like e. 'q', 'y' are considered! Therefore we here need other icons or a hack, that considers some different height values. */ - int y_cap = height/2 - h_cap/2 + w_frame/2; + int y_cap = height/2 - h_cap/2; cc_btn_capt_obj->setDimensionsAll(x_cap, y_cap, w_cap, h_cap); //text and font - if (cc_btn_font == NULL) - cc_btn_font = *cc_btn_dy_font->getDynFont(w_cap, h_cap, cc_btn_capt); + Font* def_font = *cc_btn_dy_font->getDynFont(w_cap, h_cap, cc_btn_capt); + if (cc_btn_font == NULL){ + /* use dynamic font as default font if no font defined */ + cc_btn_font = def_font; + }else{ + /* if button dimension too small, use dynamic font as default font size, this ignores possible defined font + * Otherwise definied font will be used. + */ + if (cc_btn_font->getHeight() > h_cap){ + cc_btn_font = def_font; + } + } cc_btn_capt_obj->setText(cc_btn_capt, CTextBox::NO_AUTO_LINEBREAK, cc_btn_font); cc_btn_capt_obj->forceTextPaint(); //here required; + cc_btn_capt_obj->getCTextBoxObject()->setTextBorderWidth(0,0); //set color cc_btn_capt_obj->setTextColor(this->cc_item_enabled ? cc_btn_capt_col : cc_btn_capt_disable_col); @@ -280,3 +290,9 @@ void CComponentsButton::paint(bool do_save_bg) //paint form contents paintForm(do_save_bg); } + +void CComponentsButton::enableShadow(int mode, const int& shadow_width, bool force_paint) +{ + clear(); + initVarButton(x, y, width, height, cc_btn_capt, cc_btn_icon, cc_parent, cc_item_selected, cc_item_enabled, mode, col_frame, col_body, col_shadow); +} diff --git a/src/gui/components/cc_frm_button.h b/src/gui/components/cc_frm_button.h index 80653e2be..1235dd0b9 100644 --- a/src/gui/components/cc_frm_button.h +++ b/src/gui/components/cc_frm_button.h @@ -195,6 +195,12 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen inline virtual void setButtonAlias(const int& alias_value){cc_btn_alias = alias_value;}; ///returns an alias value from button object, see also cc_btn_alias inline virtual int getButtonAlias(){return cc_btn_alias;}; + + /**1st parameter requires defines CC_SHADOW_ON (default), CC_SHADOW_OFF, CC_SHADOW_BOTTOM or CC_SHADOW_RIGHT, see also cc_types.h + * 2nd parameter defines shadow width, default = defined by system + * 3rd parameter forces paint of shadow layer, default = false, Note: default shadow will paint only on first paint, use 3rd parameter=true ignores this + */ + void enableShadow(int mode = CC_SHADOW_ON, const int& shadow_width = -1, bool force_paint = false); }; //! Sub class of CComponentsButton. diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 5c2f5878d..2e742c663 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -69,10 +69,13 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const width = w == 0 ? frameBuffer->getScreenWidth(true) : w; //init footer height + initCaptionFont(); height = max(h, cch_font->getHeight()); shadow = shadow_mode; - ccf_enable_button_shadow = false; + ccf_enable_button_shadow = false ; + ccf_button_shadow_width = 0; + ccf_button_shadow_force_paint = false; col_frame = color_frame; col_body = color_body; col_shadow = color_shadow; @@ -85,7 +88,7 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const corner_type = CORNER_BOTTOM; ccf_enable_button_bg = false /*g_settings.theme.Button_gradient*/; //TODO: not implemented at the moment - ccf_btn_font = NULL; + ccf_btn_font = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]; chain = NULL; addContextButton(buttons); @@ -95,46 +98,79 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const void CComponentsFooter::setButtonLabels(const struct button_label_s * const content, const size_t& label_count, const int& chain_width, const int& label_width) { - //define required total width of button group, minimal width is >0, sensless values are nonsens! - int w_chain = chain_width > 0 ? chain_width : width;//TODO: alow and handle only with rational values >0, exit here - if (w_chain < 100){ - dprintf(DEBUG_NORMAL, "[CComponentsFooter] [%s - %d] stupid width of chain: width = %d, values < 100 are nonsens, buttons not painted!\n", __func__, __LINE__, w_chain); - return; + /* clean up before init*/ + if (chain) + chain->clear(); + + /* set general available full basic space for button chain, + * in this case this is footer width + */ + int w_chain = width - 2*cch_offset; + + /* calculate current available space for button container depends + * of already enbedded footer objects. + * If already existing some items then subtract those width from footer width. + * ...so we have the possible usable size for button container. + */ + if(!v_cc_items.empty()){ //FIXME: footer container seems always not empty here, so here j initialized with = 1. I dont't know where it comes from! dbt! + for (size_t j= 1; j< size(); j++) + w_chain -= getCCItem(j)->getWidth(); } - //consider context button group on the right side of footer, if exist then subtract result from chain_width of button container - if (cch_btn_obj) - w_chain -= cch_btn_obj->getWidth(); + /* On defined parameter chain_width + * calculate current available space for button container depends + * of passed chain with parameter + * Consider that chain_width is not too large. + */ + if (chain_width > 0 && chain_width <= w_chain){ + if (chain_width <= w_chain){ + w_chain = chain_width; + } + } - //calculate required position of button container - //consider icon (inherited) width, if exist then set evaluated result as x position for button label container and ... - int x_chain = 0; + /* initialize button container (chain object): this contains all passed (as interleaved) button label items, + * With this container we can work inside footer as primary container (in this context '=this') and the parent for the button label container (chain object). + * Button label container (chain object) itself is concurrent to the parent object for button objects. + */ + int x_chain = width/2 - w_chain/2; if (cch_icon_obj) - x_chain = (cch_icon_obj->getXPos() + cch_offset + cch_icon_obj->getWidth()); - //... reduce also total width for button label container - w_chain -= x_chain; - - //initialize container (chain object) as button label container: this contains all passed (as interleaved) button label items, with this container we can work inside - //footer as primary container (in this context '=this') and the parent for the button label container (chain object), - //button label container (chain object) itself is concurrent the parent object for button objects. + x_chain = cch_offset+cch_icon_obj->getWidth()+cch_offset; if (chain == NULL){ - chain = new CComponentsFrmChain(x_chain, CC_CENTERED, w_chain, height, 0, CC_DIR_X, this, CC_SHADOW_OFF, COL_FRAME_PLUS_0, col_body); + chain = new CComponentsFrmChain(x_chain, 0, w_chain, height, 0, CC_DIR_X, this, CC_SHADOW_OFF, COL_MENUCONTENT_PLUS_6, col_body); + chain->setAppendOffset(0, 0); chain->setCorner(this->corner_rad, this->corner_type); chain->doPaintBg(false); } - if (!chain->empty()) - chain->clear(); - //calculate default static width of button labels inside button object container related to available width of chain object - int w_btn_fix = chain->getWidth() / label_count; - int w_btn_min = min(label_width, w_btn_fix); + /* Calculate usable width of button labels inside button object container + * related to available width of chain object and passed + * label_width parameter. + * Parameter is used as minimal value and will be reduced + * if it is too large. + * Too small label_width parameter will be compensated by + * button objects itself. + */ + int w_offset = int((label_count-1)*cch_offset); + int w_btn = chain->getWidth()/label_count - w_offset; + if (label_width){ + int w_label = label_width; + int w_defined = int(label_width*label_count); + int w_max = chain->getWidth() - w_offset; + while (w_defined > w_max){ + w_label--; + w_defined = int(w_label*label_count) - w_offset; + } + w_btn = w_label; + } - int w_used = 0; - - //generate and add button objects passed from button label content with default width to chain object. + /* generate button objects passed from button label content + * with default width to chain object. + */ + vector v_btns; + int h_btn = height*85/100; for (size_t i= 0; i< label_count; i++){ - string txt = content[i].text; - string icon_name = string(content[i].button); + string txt = content[i].text; + string icon_name = string(content[i].button); //ignore item, if no text and icon are defined; if (txt.empty() && icon_name.empty()){ @@ -142,14 +178,14 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont continue; } - CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn_min, (ccf_enable_button_bg ? height-2*fr_thickness : height)- 2*shadow_w, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); + CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn, /*(ccf_enable_button_bg ? */h_btn-2*fr_thickness/* : height)*/-ccf_button_shadow_width, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); - btn->setButtonFont(ccf_btn_font); btn->doPaintBg(ccf_enable_button_bg); btn->setButtonDirectKey(content[i].directKey); btn->setButtonDirectKeyA(content[i].directKeyAlt); btn->setButtonResult(content[i].btn_result); btn->setButtonAlias(content[i].btn_alias); + btn->setButtonFont(ccf_btn_font); //set button frames to icon color, predefined for available color buttons if (btn_auto_frame_col){ @@ -165,32 +201,35 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont btn->setColorFrame(f_col); } - chain->addCCItem(btn); + v_btns.push_back(btn); - //set x position of next button object - if (i != 0) - btn->setXPos(CC_APPEND); - - //collect used button width inside chain object - w_used += btn->getWidth(); + if (w_btn < btn->getWidth()){ + btn->setWidth(w_btn); + btn->setButtonFont(NULL); + } + + dprintf(DEBUG_NORMAL, "[CComponentsFooter] [%s - %d] button %s [%u] btn->getWidth() = %d w_btn = %d, (chain->getWidth() = %d)\n", __func__, __LINE__, txt.c_str(), i, btn->getWidth(), w_btn, chain->getWidth()); } - //calculate offset between button objects inside chain object - int w_rest = max(w_chain - w_used, 0); - int btn_offset = w_rest / chain->size(); - chain->setAppendOffset(btn_offset, 0); - dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] btn_offset = %d, w_rest = %d, w_chain = %d, w_used = %d, chain->size() = %u\n", __func__, __LINE__, btn_offset, w_rest, w_chain, w_used, chain->size()); + /* add generated button objects to chain object. + */ + if (!v_btns.empty()){ + /*add all buttons into button container*/ + chain->addCCItem(v_btns); - //set x position of 1st button object inside chain, this is centering button objects inside chain - int x_1st_btn = btn_offset/2; - chain->getCCItem(0)->setXPos(x_1st_btn); + /* set position of labels, as centered inside button container*/ + int w_chain_used = 0; + for (size_t a= 0; a< chain->size(); a++) + w_chain_used += chain->getCCItem(a)->getWidth(); + w_chain_used += (chain->size()-1)*cch_offset; - //check used width of generated buttons, if required then use dynamic font, and try to fit buttons into chain container, dynamic font is used if ccf_btn_font==NULL - //NOTE: user should be set not too small window size and not too large fontsize, at some point this possibility will be depleted and it's no more space for readable caption - if (w_used > width && ccf_btn_font != NULL){ - chain->clear(); - ccf_btn_font = NULL; - setButtonLabels(content, label_count, chain_width, label_width); + int x_btn = chain->getWidth()/2 - w_chain_used/2; + chain->getCCItem(0)->setXPos(x_btn); + + for (size_t c= 1; c< chain->size(); c++){ + x_btn += chain->getCCItem(c-1)->getWidth()+ cch_offset; + chain->getCCItem(c)->setXPos(x_btn); + } } } @@ -360,8 +399,10 @@ void CComponentsFooter::setButtonText(const uint& btn_id, const std::string& tex void CComponentsFooter::enableButtonShadow(int mode, const int& shadow_width, bool force_paint) { ccf_enable_button_shadow = mode; + ccf_button_shadow_width = shadow_width; + ccf_button_shadow_force_paint = force_paint; if (chain){ for(size_t i=0; isize(); i++) - chain->enableShadow(mode, shadow_width, force_paint); + chain->getCCItem(i)->enableShadow(ccf_enable_button_shadow, ccf_button_shadow_width, ccf_button_shadow_force_paint); } } diff --git a/src/gui/components/cc_frm_footer.h b/src/gui/components/cc_frm_footer.h index 863ca7cea..301a93362 100644 --- a/src/gui/components/cc_frm_footer.h +++ b/src/gui/components/cc_frm_footer.h @@ -72,8 +72,12 @@ class CComponentsFooter : public CComponentsHeader ///show button with background, default false bool ccf_enable_button_bg; - ///enable button with shadow, default false - bool ccf_enable_button_shadow; + ///enable button with shadow mode, default CC_SHADOW_OFF + int ccf_enable_button_shadow; + ///set button shadow button width + int ccf_button_shadow_width; + ///set button shadow button repaint mode + bool ccf_button_shadow_force_paint; ///enable/disable button frame in icon color, predefined for red, green, yellow and blue, default disabled bool btn_auto_frame_col; @@ -183,7 +187,7 @@ class CComponentsFooter : public CComponentsHeader virtual void setSizeMode(const int& size_mode){cch_size_mode = size_mode; initCCItems();} ///enable and sets shadow properties for embedded buttons - void enableButtonShadow(int mode = CC_SHADOW_ON, const int& shadow_width = RADIUS_SMALL, bool force_paint = false); + void enableButtonShadow(int mode = CC_SHADOW_ON, const int& shadow_width = OFFSET_SHADOW/2, bool force_paint = false); ///disable shadow for embedded buttons void disbaleButtonShadow(){enableButtonShadow(CC_SHADOW_OFF);} }; diff --git a/src/gui/components/cc_frm_header.h b/src/gui/components/cc_frm_header.h index d30280da8..74201268e 100644 --- a/src/gui/components/cc_frm_header.h +++ b/src/gui/components/cc_frm_header.h @@ -119,8 +119,8 @@ class CComponentsHeader : public CComponentsForm, public CCTextScreen CComponentsHeader(CComponentsForm *parent = NULL); CComponentsHeader( const int& x_pos, const int& y_pos, const int& w, const int& h = 0, - const std::string& caption = "", - const std::string& = "", + const std::string& caption = std::string(), + const std::string& = std::string(), const int& buttons = 0, CComponentsForm *parent = NULL, int shadow_mode = CC_SHADOW_OFF, diff --git a/src/gui/components/cc_item_picture.cpp b/src/gui/components/cc_item_picture.cpp index 1fd538ac5..8801834ca 100644 --- a/src/gui/components/cc_item_picture.cpp +++ b/src/gui/components/cc_item_picture.cpp @@ -247,11 +247,11 @@ void CComponentsPicture::initPosition(int *x_position, int *y_position) } -void CComponentsPicture::getSize(int* width_image, int *height_image) -{ - *width_image = width; - *height_image = height; -} +// void CComponentsPicture::getSize(int* width_image, int *height_image) +// { +// *width_image = width; +// *height_image = height; +// } int CComponentsPicture::getWidth() { diff --git a/src/gui/components/cc_item_picture.h b/src/gui/components/cc_item_picture.h index 3aab7e11b..8d39e73d2 100644 --- a/src/gui/components/cc_item_picture.h +++ b/src/gui/components/cc_item_picture.h @@ -144,12 +144,12 @@ class CComponentsPicture : public CComponentsItem ///returns current assigned image name std::string getPictureName(){return pic_name;} - ///handle image size - virtual void getSize(int* width_image, int *height_image); - ///return width of component - virtual int getWidth(); - ///return height of component - virtual int getHeight(); +// ///handle image size +// void getSize(int* width_image, int *height_image); + ///return width of item + int getWidth(); + ///return height of item + int getHeight(); ///set width of object and image, value >0 causes scale of image, parameter keep_aspect = true causes scaling of height with same aspect, default = false virtual void setWidth(const int& w, bool keep_aspect = false); diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 9d9b84fd7..53fd1b09e 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -370,9 +370,10 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) #endif else if (actionKey == "button"){ if (button == NULL){ - button = new CComponentsButtonRed(100, 100, 100, 50, "Test"); + button = new CComponentsButtonRed(100, 100, 100, 50, "Test", NULL, false, true, CC_SHADOW_OFF); button->enableShadow(); - } + }else + button->disableShadow(); if (!button->isPainted()){ @@ -560,7 +561,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) footer->setIcon(NEUTRINO_ICON_INFO); //add button labels with conventional button label struct - footer->setButtonLabels(TestButtons, TestButtonsCount, 0, footer->getWidth()/6); + footer->setButtonLabels(TestButtons, TestButtonsCount, 0, footer->getWidth()/TestButtonsCount); //also possible: use directly button name and as 2nd parameter string or locale as text // footer->setButtonLabel(NULL, "Test", 0, 250); diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 2175b3d03..0b1feb8fa 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -97,6 +97,8 @@ void CMsgBox::init(const int& Height, const int& ShowButtons, const msg_result_t height = min(MAX_WINDOW_HEIGHT, height); width = min(MAX_WINDOW_WIDTH, width); + shadow = CC_SHADOW_ON; + //set result if (Default_result != mbrNone) result = default_result = Default_result; @@ -175,8 +177,9 @@ void CMsgBox::initButtons() ccw_footer->setButtonLabels(v_buttons, 0, 125); - //show buttons with background + //show buttons with background and shadow ccw_footer->enableButtonBg(btn_enable_bg); + ccw_footer->enableButtonShadow(CC_SHADOW_ON, OFFSET_SHADOW/2, true); //set position of meassage window and refresh window properties setCenterPos(); From 28712698100059d3f065389507312723e32615e9 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 30 Sep 2016 08:27:28 +0200 Subject: [PATCH 16/85] CComponentsForm: add parameters to setSelectedItem() methode Were not passed to items Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/375451f0a6ef6b7dce410dd2e19d7fd58c1e1aeb Author: Thilo Graf Date: 2016-09-30 (Fri, 30 Sep 2016) --- src/gui/components/cc_frm.cpp | 8 ++++---- src/gui/components/cc_frm.h | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index 29ab9ba9e..45c086101 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -566,7 +566,7 @@ u_int8_t CComponentsForm::getPageCount() } -void CComponentsForm::setSelectedItem(int item_id) +void CComponentsForm::setSelectedItem(int item_id, const fb_pixel_t& sel_frame_col, const fb_pixel_t& frame_col, const fb_pixel_t& sel_body_col, const fb_pixel_t& body_col, const int& frame_w, const int& sel_frame_w) { size_t count = v_cc_items.size(); int id = item_id; @@ -590,19 +590,19 @@ void CComponentsForm::setSelectedItem(int item_id) } for (size_t i= 0; i< count; i++) - v_cc_items[i]->setSelected(i == (size_t)id); + v_cc_items[i]->setSelected(i == (size_t)id, sel_frame_col, frame_col, sel_body_col, body_col, frame_w, sel_frame_w); OnSelect(); } -void CComponentsForm::setSelectedItem(CComponentsItem* cc_item) +void CComponentsForm::setSelectedItem(CComponentsItem* cc_item, const fb_pixel_t& sel_frame_col, const fb_pixel_t& frame_col, const fb_pixel_t& sel_body_col, const fb_pixel_t& body_col, const int& frame_w, const int& sel_frame_w) { int id = getCCItemId(cc_item); if (id == -1){ dprintf(DEBUG_NORMAL, "[CComponentsForm] [%s - %d] invalid item parameter, no object available\n", __func__,__LINE__); return; } - setSelectedItem(id); + setSelectedItem(id, sel_frame_col, frame_col, sel_body_col, body_col, frame_w, sel_frame_w); } int CComponentsForm::getSelectedItem() diff --git a/src/gui/components/cc_frm.h b/src/gui/components/cc_frm.h index 82a1a4df2..44f6b481e 100644 --- a/src/gui/components/cc_frm.h +++ b/src/gui/components/cc_frm.h @@ -145,9 +145,21 @@ class CComponentsForm : public CComponentsItem ///returns pointer to selected item, return value as CComponentsItem*, returns NULL: if is nothing selected virtual CComponentsItem* getSelectedItemObject(); ///select a definied item, parameter1 as size_t - virtual void setSelectedItem(int item_id); + virtual void setSelectedItem( int item_id, + const fb_pixel_t& sel_frame_col = COL_MENUCONTENTSELECTED_PLUS_0, + const fb_pixel_t& frame_col = COL_SHADOW_PLUS_0, + const fb_pixel_t& sel_body_col = COL_MENUCONTENT_PLUS_0, + const fb_pixel_t& body_col = COL_MENUCONTENT_PLUS_0, + const int& frame_w = 3, + const int& sel_frame_w = 3); ///select a definied item, parameter1 as CComponentsItem* - virtual void setSelectedItem(CComponentsItem* cc_item); + virtual void setSelectedItem( CComponentsItem* cc_item, + const fb_pixel_t& sel_frame_col = COL_MENUCONTENTSELECTED_PLUS_0, + const fb_pixel_t& frame_col = COL_SHADOW_PLUS_0, + const fb_pixel_t& sel_body_col = COL_MENUCONTENT_PLUS_0, + const fb_pixel_t& body_col = COL_MENUCONTENT_PLUS_0, + const int& frame_w = 3, + const int& sel_frame_w = 3); ///exec main method, see also sub exec methods virtual int exec(); From 3119fa58e11c30a647046254805b578a18428db3 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 30 Sep 2016 08:29:04 +0200 Subject: [PATCH 17/85] cc_frm_button.cpp/cc_frm_footer.cpp: fix passed parameter were not passed through Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/e2a1e7dc5b0f565631877031167e87d1c2bba192 Author: Thilo Graf Date: 2016-09-30 (Fri, 30 Sep 2016) --- src/gui/components/cc_frm_button.cpp | 4 +++- src/gui/components/cc_frm_footer.cpp | 15 ++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index f611d65a4..987e07035 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -101,7 +101,7 @@ void CComponentsButton::initVarButton( const int& x_pos, const int& y_pos, const width = w; height = h; shadow = shadow_mode; - shadow_w = shadow != CC_SHADOW_OFF ? OFFSET_SHADOW/2 : 0; //buttons are mostly small elements, so these elements should have a reasonable shadow width + shadow_w = shadow != CC_SHADOW_OFF ? (shadow_w == -1 ? OFFSET_SHADOW/2 : shadow_w) : 0; //buttons are mostly small elements, so these elements should have a reasonable shadow width cc_body_gradient_enable = CC_COLGRAD_OFF/*g_settings.gradiant*/; //TODO: gradient is prepared for use but disabled at the moment till some other parts of gui parts are provide gradient setColBodyGradient(cc_body_gradient_enable/*CColorGradient::gradientLight2Dark*/, CFrameBuffer::gradientVertical, CColorGradient::light); @@ -294,5 +294,7 @@ void CComponentsButton::paint(bool do_save_bg) void CComponentsButton::enableShadow(int mode, const int& shadow_width, bool force_paint) { clear(); + shadow_w = shadow_width; + shadow_force = force_paint; initVarButton(x, y, width, height, cc_btn_capt, cc_btn_icon, cc_parent, cc_item_selected, cc_item_enabled, mode, col_frame, col_body, col_shadow); } diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 2e742c663..b3533e4ef 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -74,7 +74,7 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const shadow = shadow_mode; ccf_enable_button_shadow = false ; - ccf_button_shadow_width = 0; + ccf_button_shadow_width = shadow ? OFFSET_SHADOW/2 : 0; ccf_button_shadow_force_paint = false; col_frame = color_frame; col_body = color_body; @@ -167,7 +167,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont * with default width to chain object. */ vector v_btns; - int h_btn = height*85/100; + int h_btn = /*(ccf_enable_button_bg ? */(height*85/100)-2*fr_thickness/* : height)*/-ccf_button_shadow_width; for (size_t i= 0; i< label_count; i++){ string txt = content[i].text; string icon_name = string(content[i].button); @@ -178,7 +178,9 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont continue; } - CComponentsButton *btn = new CComponentsButton(0, CC_CENTERED, w_btn, /*(ccf_enable_button_bg ? */h_btn-2*fr_thickness/* : height)*/-ccf_button_shadow_width, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); + int y_btn = chain->getHeight()/2 - h_btn/2; + dprintf(DEBUG_NORMAL, "[CComponentsFooter] [%s - %d] y_btn [%d] ccf_button_shadow_width [%d]\n", __func__, __LINE__, y_btn, ccf_button_shadow_width); + CComponentsButton *btn = new CComponentsButton(0, y_btn, w_btn, h_btn, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); btn->doPaintBg(ccf_enable_button_bg); btn->setButtonDirectKey(content[i].directKey); @@ -346,7 +348,7 @@ void CComponentsFooter::enableButtonBg(bool enable) void CComponentsFooter::setSelectedButton(size_t item_id) { if (chain) - chain->setSelectedItem(item_id); + chain->setSelectedItem(item_id, COL_GREEN, COL_SHADOW_PLUS_0, COL_MENUCONTENT_PLUS_0, COL_MENUCONTENT_PLUS_0, 2, 2); } int CComponentsFooter::getSelectedButton() @@ -402,7 +404,10 @@ void CComponentsFooter::enableButtonShadow(int mode, const int& shadow_width, bo ccf_button_shadow_width = shadow_width; ccf_button_shadow_force_paint = force_paint; if (chain){ - for(size_t i=0; isize(); i++) + for(size_t i=0; isize(); i++){ chain->getCCItem(i)->enableShadow(ccf_enable_button_shadow, ccf_button_shadow_width, ccf_button_shadow_force_paint); + int y_btn = ccf_enable_button_shadow == CC_SHADOW_OFF ? CC_CENTERED : chain->getHeight()/2 - chain->getCCItem(i)->getHeight()/2 - ccf_button_shadow_width; + chain->getCCItem(i)->setYPos(y_btn); + } } } From 0efab9494e37e27f324e64b9bb73416f985d8b25 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 3 Oct 2016 21:33:46 +0200 Subject: [PATCH 18/85] CMsgBox: add colors to debug output Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/b272c407d75deb6626882647323e01162b66696d Author: Thilo Graf Date: 2016-10-03 (Mon, 03 Oct 2016) --- src/gui/widget/msgbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 0b1feb8fa..c2ba54a88 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -262,7 +262,7 @@ int CMsgBox::exec() ccw_footer->setSelectedButton(selected-1); mb_show_button = ccw_footer->getSelectedButtonObject()->getButtonAlias(); } - dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\n", __func__, __LINE__, result, mb_show_button); + dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\033[0m\n", __func__, __LINE__, result, mb_show_button); selected = ccw_footer->getSelectedButton(); refreshFoot(); @@ -275,7 +275,7 @@ int CMsgBox::exec() CComponentsButton* btn_action = static_cast(ccw_footer->getButtonChainObject()->getCCItem(i)); if (msg == btn_action->getButtonDirectKey() || msg == btn_action->getButtonDirectKeyA()){ result = (msg_result_t)btn_action->getButtonResult(); - dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\n", __func__, __LINE__, result, mb_show_button); + dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\033[0m\n", __func__, __LINE__, result, mb_show_button); loop = false; } } @@ -291,7 +291,7 @@ int CMsgBox::exec() } else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { - dprintf(DEBUG_INFO, "[CMsgBox] [%s - %d] messages_return::cancel_all\n", __func__, __LINE__); + dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] messages_return::cancel_all\033[0m\n", __func__, __LINE__); res = menu_return::RETURN_EXIT_ALL; loop = false; } From 1352603017d8bd97fdaaa3a503e7e78a42f876ed Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 15:17:25 +0200 Subject: [PATCH 19/85] CMsgBox: set some alternate keys to default key values Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3e01cbe1ac16b4e66dfa6154123df03050639822 Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/widget/msgbox.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index c2ba54a88..0687761a8 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -135,6 +135,7 @@ void CMsgBox::initButtons() btn.button = NEUTRINO_ICON_BUTTON_OKAY; btn.text = BTN_TEXT(mbOk); btn.directKey = CRCInput::RC_ok; + btn.directKeyAlt = btn.directKey; btn.btn_result = mbrOk; btn.btn_alias = mbOk; v_buttons.push_back(btn); @@ -170,6 +171,7 @@ void CMsgBox::initButtons() btn.button = NEUTRINO_ICON_BUTTON_HOME; btn.text = BTN_TEXT(mbBack); btn.directKey = CRCInput::RC_home; + btn.directKeyAlt = btn.directKey; btn.btn_result = mbrBack; btn.btn_alias = mbBack; v_buttons.push_back(btn); @@ -216,7 +218,7 @@ int CMsgBox::exec() int selected = ccw_footer->getSelectedButton(); - dprintf(DEBUG_NORMAL, "[CMsgBox] [%s - %d] getSelectedButton()= %d\n", __func__, __LINE__,ccw_footer->getSelectedButton()); + dprintf(DEBUG_NORMAL, "\033[32m[CMsgBox] [%s - %d] getSelectedButton()= %d\033[0m\n", __func__, __LINE__,ccw_footer->getSelectedButton()); uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); @@ -262,13 +264,13 @@ int CMsgBox::exec() ccw_footer->setSelectedButton(selected-1); mb_show_button = ccw_footer->getSelectedButtonObject()->getButtonAlias(); } - dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\033[0m\n", __func__, __LINE__, result, mb_show_button); selected = ccw_footer->getSelectedButton(); refreshFoot(); //refresh timeout on any pressed navi key! This resets current timeout end to the initial value if (timeout > 0) timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\033[0m\n", __func__, __LINE__, result, mb_show_button); } //***action buttons without preselection*** for (size_t i = 0; i< ccw_footer->getButtonChainObject()->size(); i++){ From 93e0dd143cb92ac2fe37a5c083ae6fdf664d2031 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 15:18:21 +0200 Subject: [PATCH 20/85] CComponentsFooter: remove debug spam Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/ebf2e65b3841b3c33401096517afea1446a5d9ba Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/components/cc_frm_footer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index b3533e4ef..39fc6411a 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -179,7 +179,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont } int y_btn = chain->getHeight()/2 - h_btn/2; - dprintf(DEBUG_NORMAL, "[CComponentsFooter] [%s - %d] y_btn [%d] ccf_button_shadow_width [%d]\n", __func__, __LINE__, y_btn, ccf_button_shadow_width); + dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] y_btn [%d] ccf_button_shadow_width [%d]\n", __func__, __LINE__, y_btn, ccf_button_shadow_width); CComponentsButton *btn = new CComponentsButton(0, y_btn, w_btn, h_btn, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); btn->doPaintBg(ccf_enable_button_bg); @@ -210,7 +210,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont btn->setButtonFont(NULL); } - dprintf(DEBUG_NORMAL, "[CComponentsFooter] [%s - %d] button %s [%u] btn->getWidth() = %d w_btn = %d, (chain->getWidth() = %d)\n", __func__, __LINE__, txt.c_str(), i, btn->getWidth(), w_btn, chain->getWidth()); + dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] button %s [%u] btn->getWidth() = %d w_btn = %d, (chain->getWidth() = %d)\n", __func__, __LINE__, txt.c_str(), i, btn->getWidth(), w_btn, chain->getWidth()); } /* add generated button objects to chain object. From dabba341773176eaf9d68894d3f6960de0e55b0d Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 15:23:07 +0200 Subject: [PATCH 21/85] CComponentsButton: remove clear()-methode and initVarButton() clear() killed all button object with all key values and key properties. So return values of messeage objects was killed. initVarButton() contains Oobjekt intits to already existant object. Bad idea, if we init again or pre init with NULL. Mode pass was missed. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/0f6e8e1f5d027c548148fda176f503901d3fd5b3 Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/components/cc_frm_button.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index 987e07035..216a9879f 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -293,8 +293,7 @@ void CComponentsButton::paint(bool do_save_bg) void CComponentsButton::enableShadow(int mode, const int& shadow_width, bool force_paint) { - clear(); shadow_w = shadow_width; shadow_force = force_paint; - initVarButton(x, y, width, height, cc_btn_capt, cc_btn_icon, cc_parent, cc_item_selected, cc_item_enabled, mode, col_frame, col_body, col_shadow); + shadow = mode; } From 48e9dc11f3815348aa177cb0bc5e25c1d072fb41 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 21:50:13 +0200 Subject: [PATCH 22/85] CCDraw: add private variable col_shadow_clean Should help to control shadow clean up in some constallations Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/7266628207f5ab63524929875d762de0772c24db Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/components/cc_draw.cpp | 1 + src/gui/components/cc_draw.h | 2 ++ src/gui/components/cc_item.cpp | 1 - 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index 90c1f6a39..4174e8f81 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -40,6 +40,7 @@ CCDraw::CCDraw() : COSDFader(g_settings.theme.menu_Content_alpha) col_body = col_body_old = COL_MENUCONTENT_PLUS_0; col_shadow = col_shadow_old = COL_SHADOW_PLUS_0; col_frame = col_frame_old = COL_FRAME_PLUS_0; + col_shadow_clean = 0; fr_thickness = fr_thickness_old = 0; diff --git a/src/gui/components/cc_draw.h b/src/gui/components/cc_draw.h index 3728db9a9..d0664b7a4 100644 --- a/src/gui/components/cc_draw.h +++ b/src/gui/components/cc_draw.h @@ -67,6 +67,8 @@ class CCDraw : public COSDFader, public CComponentsSignals fb_pixel_t col_shadow, col_shadow_old; ///property: color of frame fb_pixel_t col_frame, col_frame_old; + ///internal property: color for shadow clean up + fb_pixel_t col_shadow_clean; ///property: frame thickness, see also setFrameThickness() int fr_thickness, fr_thickness_old; diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index cfb4a1f81..3a874b8c2 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -95,7 +95,6 @@ void CComponentsItem::paintInit(bool do_save_bg) //Workaround: ensure radius values >= 0, framebuffer methode paintBoxRel() gets confused box_rad = max(box_rad, 0); - fb_pixel_t col_shadow_clean = 0; //if item is bound on a parent form,... if (cc_parent){ //...we must use real x/y values and from parent form as reference From fcb732f839627b085ec9d58605d0fb8cc613d970 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 21:51:18 +0200 Subject: [PATCH 23/85] CComponentsPicture: use body color as default clean up color Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/9668f89db1cc3c10690e3cda2fd550ff36155b49 Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/components/cc_item_picture.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/components/cc_item_picture.cpp b/src/gui/components/cc_item_picture.cpp index 8801834ca..1d22547b9 100644 --- a/src/gui/components/cc_item_picture.cpp +++ b/src/gui/components/cc_item_picture.cpp @@ -82,6 +82,7 @@ void CComponentsPicture::init( const int &x_pos, const int &y_pos, const int &w, col_frame = color_frame; col_body = color_background; col_shadow = color_shadow; + col_shadow_clean= col_body; do_scale = allow_scale; image_cache = NULL; //image enable_cache = false; From 505b57685bfb2a2013a4af4225247375bfd468fc Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 21:53:28 +0200 Subject: [PATCH 24/85] CMovieBrowser: add current content background color as image backkground Avoids transparent shadow artefacts during repaint of images Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/9d09bc36cebb07edb65d2657a4f3cee327276dcb Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/moviebrowser/mb.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index 147db2845..bed284fa9 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -1314,7 +1314,8 @@ void CMovieBrowser::refreshMovieInfo(void) lx = m_cBoxFrameInfo.iX + m_cBoxFrameBrowserList.iWidth - flogo_w -14; ly = m_cBoxFrameInfo.iY + (m_cBoxFrameInfo.iHeight-flogo_h)/2; if (pic == NULL){ //TODO: paint custom covers with different ratio, currently only works with default ratio HD 16/9 - pic = new CComponentsPicture(lx, ly, fname, NULL, CC_SHADOW_ON, COL_MENUCONTENTDARK_PLUS_0); + pic = new CComponentsPicture(lx, ly, fname, NULL, CC_SHADOW_ON, COL_MENUCONTENTDARK_PLUS_0, COL_MENUCONTENT_PLUS_0); + if (pic->getHeight() < flogo_h/2){ flogo_h = flogo_h/2; pic->setYPos(m_cBoxFrameInfo.iY + (m_cBoxFrameInfo.iHeight-flogo_h)/2); From cdedefca335fb27252cdd2955b4df3ac7ca375af Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 5 Oct 2016 22:33:14 +0200 Subject: [PATCH 25/85] CMsgBox: use same colors for window body, footer and button container Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/857b494c47f3ee7cc628c918b4767c94a18de124 Author: Thilo Graf Date: 2016-10-05 (Wed, 05 Oct 2016) --- src/gui/widget/msgbox.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 0687761a8..67679e027 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -88,6 +88,7 @@ void CMsgBox::init(const int& Height, const int& ShowButtons, const msg_result_t //enable footer and add its height showFooter(true); btn_enable_bg = false; + ccw_col_footer = ccw_body->getColorBody(); ccw_footer->doPaintBg(false); int h_current = height; h_current += ccw_footer->getHeight(); @@ -178,6 +179,7 @@ void CMsgBox::initButtons() } ccw_footer->setButtonLabels(v_buttons, 0, 125); + ccw_footer->getButtonChainObject()->setColorBody(col_body); //show buttons with background and shadow ccw_footer->enableButtonBg(btn_enable_bg); From 25e64f1bfc53f7f3d443e6cbd80401107b42ed7e Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 6 Oct 2016 21:53:11 +0200 Subject: [PATCH 26/85] cc_item.cpp: remove frame width from boxrad In framed boxes, frame radius was too big and was looking bad. Not sure if this is now fixed everywhere (eg. hintboxes) Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/f62ddcf61d9f1608ea893d5e1ebddf2ea6d0a204 Author: Thilo Graf Date: 2016-10-06 (Thu, 06 Oct 2016) --- src/gui/components/cc_item.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 3a874b8c2..f3be06b96 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -173,7 +173,7 @@ void CComponentsItem::paintInit(bool do_save_bg) //shadow corner bottom right {sh_cbr, CC_FBDATA_TYPE_SHADOW_BOX, sh_cbr_x, sh_cbr_y, sh_cdx, sh_cdy, col_shadow, box_rad, corner_type & CORNER_BOTTOM_RIGHT, 0, NULL, NULL, NULL, false}, //clean up inside body - {sh_cbr, CC_FBDATA_TYPE_SHADOW_BOX, sh_cbr_x-sw-th, sh_cbr_y-sw-th, sh_cdx, sh_cdy, col_shadow_clean, box_rad, corner_type & CORNER_BOTTOM_RIGHT, 0, NULL, NULL, NULL, false}, + {sh_cbr, CC_FBDATA_TYPE_SHADOW_BOX, sh_cbr_x-sw, sh_cbr_y-sw, sh_cdx, sh_cdy, col_shadow_clean, box_rad, corner_type & CORNER_BOTTOM_RIGHT, 0, NULL, NULL, NULL, false}, //shadow bar right {sh_br, CC_FBDATA_TYPE_SHADOW_BOX, sh_rx, sh_ry, sw, sh_rdy, col_shadow, 0, CORNER_NONE, 0, NULL, NULL, NULL, false}, @@ -187,7 +187,7 @@ void CComponentsItem::paintInit(bool do_save_bg) {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, dx-2*th, dy-2*th, col_body, box_rad, corner_type, 0, NULL, NULL, NULL, false}, //frame - {true, CC_FBDATA_TYPE_FRAME, ix, iy, dx, dy, col_frame_cur, box_rad+th, corner_type, th, NULL, NULL, NULL, false} + {true, CC_FBDATA_TYPE_FRAME, ix, iy, dx, dy, col_frame_cur, box_rad, corner_type, th, NULL, NULL, NULL, false} }; for(size_t i =0; i< (sizeof(fbdata) / sizeof(fbdata[0])) ;i++) { From bab4bd2782c3970d3024d87124836c39bdccd818 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 10:08:33 +0200 Subject: [PATCH 27/85] CComponentsButton: remove enableShadow() from button class is not required Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/03d010fa29612e7a5fb60b180160a160d32817c3 Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/components/cc_frm_button.cpp | 7 ------- src/gui/components/cc_frm_button.h | 6 ------ 2 files changed, 13 deletions(-) diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index 216a9879f..c20bcf01d 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -290,10 +290,3 @@ void CComponentsButton::paint(bool do_save_bg) //paint form contents paintForm(do_save_bg); } - -void CComponentsButton::enableShadow(int mode, const int& shadow_width, bool force_paint) -{ - shadow_w = shadow_width; - shadow_force = force_paint; - shadow = mode; -} diff --git a/src/gui/components/cc_frm_button.h b/src/gui/components/cc_frm_button.h index 1235dd0b9..80653e2be 100644 --- a/src/gui/components/cc_frm_button.h +++ b/src/gui/components/cc_frm_button.h @@ -195,12 +195,6 @@ class CComponentsButton : public CComponentsFrmChain, public CCTextScreen inline virtual void setButtonAlias(const int& alias_value){cc_btn_alias = alias_value;}; ///returns an alias value from button object, see also cc_btn_alias inline virtual int getButtonAlias(){return cc_btn_alias;}; - - /**1st parameter requires defines CC_SHADOW_ON (default), CC_SHADOW_OFF, CC_SHADOW_BOTTOM or CC_SHADOW_RIGHT, see also cc_types.h - * 2nd parameter defines shadow width, default = defined by system - * 3rd parameter forces paint of shadow layer, default = false, Note: default shadow will paint only on first paint, use 3rd parameter=true ignores this - */ - void enableShadow(int mode = CC_SHADOW_ON, const int& shadow_width = -1, bool force_paint = false); }; //! Sub class of CComponentsButton. From 418611f057c27907911d601c24810d9db156751f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 10:13:32 +0200 Subject: [PATCH 28/85] CComponentsItem: ensure some dimensions for shadow are not < 0 Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/59e8a170613b7f10ad50f81e24457fd1fdf2345a Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/components/cc_item.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index f3be06b96..f26883be7 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -82,6 +82,8 @@ void CComponentsItem::paintInit(bool do_save_bg) //and ensure sw is not larger than body dimensions, max x% int sw = (shadow) ? min(shadow_w, min(dx, dy)*50/100) : 0; + /*ensure shadow is never < 0*/ + sw = max(0, sw); //set current needed corner main box radius int box_rad = corner_rad; @@ -131,7 +133,7 @@ void CComponentsItem::paintInit(bool do_save_bg) int sh_cbl_y = sh_cbr_y; //handle general shadow bar dimensions - int sh_bdx = dx-sh_cdx-sh_cdx; + int sh_bdx = max(0, dx-sh_cdx-sh_cdx); /*ensure value is never < 0*/ int sh_rdy = dy-sh_cdy-sh_cdy; //...bar bottom From a9f00a51b8e6c90b1dffcbe1795d508a1ddb7b25 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 10:33:05 +0200 Subject: [PATCH 29/85] cc_item.cpp: subtract frame width from the inner radius Box Is necessary, because otherwise the frame radius would not match with outside radius This would mean that there are "holes" at the box corners. So now it seems to work. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/5bd4903b273479fe18a61cdeb85e30daa24587c5 Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/components/cc_item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index f26883be7..35d2ec981 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -186,7 +186,7 @@ void CComponentsItem::paintInit(bool do_save_bg) {sh_ctr, CC_FBDATA_TYPE_SHADOW_BOX, sh_ctr_x-sw, sh_ctr_y-sw+th, sh_cdx, sh_cdy-sh_cdy_size_offset+sw, col_shadow_clean, box_rad, corner_type & CORNER_TOP_RIGHT, 0, NULL, NULL, NULL, false}, //main box - {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, dx-2*th, dy-2*th, col_body, box_rad, corner_type, 0, NULL, NULL, NULL, false}, + {true, CC_FBDATA_TYPE_BOX, ix+th, iy+th, dx-2*th, dy-2*th, col_body, box_rad-th, corner_type, 0, NULL, NULL, NULL, false}, //frame {true, CC_FBDATA_TYPE_FRAME, ix, iy, dx, dy, col_frame_cur, box_rad, corner_type, th, NULL, NULL, NULL, false} From 6f30f1b2740165eaed864c019fba7d705d88439e Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 13:49:55 +0200 Subject: [PATCH 30/85] CComponentsFooter: use different select color for button, if count = 1 TODO: should be configurable. Not all theme color combinations have matched contrasts. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/b3e7e49592a4e530e8c3efeabb09963258281f92 Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/components/cc_frm_footer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 39fc6411a..bf7e1bf09 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -347,8 +347,12 @@ void CComponentsFooter::enableButtonBg(bool enable) void CComponentsFooter::setSelectedButton(size_t item_id) { - if (chain) - chain->setSelectedItem(item_id, COL_GREEN, COL_SHADOW_PLUS_0, COL_MENUCONTENT_PLUS_0, COL_MENUCONTENT_PLUS_0, 2, 2); + if (chain){ + fb_pixel_t sel_col = COL_MENUCONTENTSELECTED_PLUS_2; + if (chain->size() > 1) + sel_col = COL_MENUCONTENTSELECTED_PLUS_0; //TODO: make it configurable + chain->setSelectedItem(item_id, sel_col, COL_MENUCONTENTSELECTED_PLUS_2, COL_MENUCONTENT_PLUS_0, COL_MENUCONTENT_PLUS_0, 1, 2); + } } int CComponentsFooter::getSelectedButton() From 1cb41d0ba7bcad8d43809419f4fbad8db78f58df Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 13:58:08 +0200 Subject: [PATCH 31/85] CComponentsButton: remake caption size to 85% of button height Better optical matching size. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/ce11a3a0dfbc00d75d881533aa689390f79320ee Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/components/cc_frm_button.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index c20bcf01d..0331a5a75 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -195,7 +195,7 @@ void CComponentsButton::initCaption() x_cap += cc_btn_icon_obj ? cc_btn_icon_obj->getWidth() : 0; int w_cap = width - w_frame - append_x_offset - x_cap - w_frame; - int h_cap = (height*75/100) - 2*w_frame; + int h_cap = (height*85/100) - 2*w_frame; /*NOTE: paint of centered text in y direction without y_offset looks unlovely displaced in y direction especially besides small icons and inside small areas, From df41f8f7681d3b4529577c259580eb470f5f856a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 17:10:48 +0200 Subject: [PATCH 32/85] CHintBox: reduce window size for used auto size depends on text content Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3b60a55f594ff8d777208e3eae191e08e51e54eb Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/widget/hintbox.cpp | 1 + src/gui/widget/hintbox.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 8e669af40..557f87b76 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -215,6 +215,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const //set required font and line size Font* font = font_text == NULL ? g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] : font_text; + width = max(width, min(font->getRenderWidth(Text), HINTBOX_MIN_WIDTH)); int h_line = font->getHeight(); //init side picon object diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index eaf743cb9..01e46174f 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -32,7 +32,7 @@ #include -#define HINTBOX_MIN_WIDTH 600 +#define HINTBOX_MIN_WIDTH 400 #define HINTBOX_MIN_HEIGHT 125 #define HINTBOX_MAX_HEIGHT 420 #define HINTBOX_DEFAULT_TIMEOUT 5 From ee41a420a43f96d8214e3b0ed559d289ad099d47 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 7 Oct 2016 17:16:01 +0200 Subject: [PATCH 33/85] Helpbox: use current shadow color Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/bd57627b8fcb17f1e98eeee794cb2f4bb563e21c Author: Thilo Graf Date: 2016-10-07 (Fri, 07 Oct 2016) --- src/gui/widget/helpbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/helpbox.cpp b/src/gui/widget/helpbox.cpp index 8d963e8e9..19bf55978 100644 --- a/src/gui/widget/helpbox.cpp +++ b/src/gui/widget/helpbox.cpp @@ -45,7 +45,7 @@ Helpbox::Helpbox( const string& Title, CC_SHADOW_ON, COL_MENUCONTENT_PLUS_6, COL_MENUCONTENT_PLUS_0, - COL_MENUCONTENTDARK_PLUS_0) + COL_SHADOW_PLUS_0) { page = 0; hbox_y = 1; From 9d24f238191792f2ab280b27b6b124ca2d940067 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 9 Oct 2016 14:53:37 +0200 Subject: [PATCH 34/85] Helpbox: use auto sized width for footer button Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3221b7467eb7a0b0ca15bde274da3f64c91c6440 Author: Thilo Graf Date: 2016-10-09 (Sun, 09 Oct 2016) --- src/gui/widget/helpbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/helpbox.cpp b/src/gui/widget/helpbox.cpp index 19bf55978..cea87e3e3 100644 --- a/src/gui/widget/helpbox.cpp +++ b/src/gui/widget/helpbox.cpp @@ -50,7 +50,7 @@ Helpbox::Helpbox( const string& Title, page = 0; hbox_y = 1; setWindowHeaderButtons(CComponentsHeader::CC_BTN_MENU | CComponentsHeader::CC_BTN_EXIT); - ccw_footer->setButtonLabel(NEUTRINO_ICON_BUTTON_HOME, LOCALE_MESSAGEBOX_BACK, 0, 150); + ccw_footer->setButtonLabel(NEUTRINO_ICON_BUTTON_HOME, LOCALE_MESSAGEBOX_BACK); hbox_font = default_font_text; if (default_font_text == NULL) From 12c95b76dd3c83c8cbc51a5419c0a79b7653bc1e Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 9 Oct 2016 15:07:01 +0200 Subject: [PATCH 35/85] CPersonalizeGui: remove centered text alignment fro helptext Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/87a9a695787a6d9ee11cb5e9d8e4a5ceb4a842b2 Author: Thilo Graf Date: 2016-10-09 (Sun, 09 Oct 2016) --- src/gui/personalize.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/personalize.cpp b/src/gui/personalize.cpp index 243f1584e..053368990 100644 --- a/src/gui/personalize.cpp +++ b/src/gui/personalize.cpp @@ -737,7 +737,7 @@ void CPersonalizeGui::ShowHelpPersonalize() Helpbox helpbox(g_Locale->getText(LOCALE_PERSONALIZE_HELP)); for (int i = (int)LOCALE_PERSONALIZE_HELP_LINE1; i<= (int)LOCALE_PERSONALIZE_HELP_LINE8; i++) - helpbox.addLine(g_Locale->getText((neutrino_locale_t)i), CTextBox::CENTER); + helpbox.addLine(g_Locale->getText((neutrino_locale_t)i)); helpbox.addExitKey(CRCInput::RC_ok); helpbox.show(); From 134c3e53cb99fcf93aed6cd3d19944871561125b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 9 Oct 2016 16:50:48 +0200 Subject: [PATCH 36/85] CMovieHelp: add localized items TODO: add missings locales Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/1338ce2b8e51d1e8a2c6fcc239d1a3d632471772 Author: Thilo Graf Date: 2016-10-09 (Sun, 09 Oct 2016) --- data/locale/slovak.locale | 1 + src/gui/moviebrowser/mb_help.h | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/data/locale/slovak.locale b/data/locale/slovak.locale index 9088325c2..ce50da111 100644 --- a/data/locale/slovak.locale +++ b/data/locale/slovak.locale @@ -775,6 +775,7 @@ hdd_statfs_recording len pri nahrávaní hdd_umount Odpojenie hdd_umount_warn Chyba odpájania disku! hdd_umounted Zariadenie odstránené +help_box_title Help imageinfo.api API: imageinfo.creator Vytvoril: imageinfo.date Dátum: diff --git a/src/gui/moviebrowser/mb_help.h b/src/gui/moviebrowser/mb_help.h index b16a1dd47..5e20cd69c 100644 --- a/src/gui/moviebrowser/mb_help.h +++ b/src/gui/moviebrowser/mb_help.h @@ -53,14 +53,16 @@ class CMovieHelp : public CMenuTarget { Helpbox helpbox(g_Locale->getText(LOCALE_HELP_BOX_TITLE)); helpbox.addLine("Standard functions", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_OKAY), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_PLAY), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_MUTE, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_MUTE), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); helpbox.addSeparatorLine(); - helpbox.addLine(NEUTRINO_ICON_BUTTON_RED, "Change sort", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); - helpbox.addLine(NEUTRINO_ICON_BUTTON_GREEN, "Show filter window", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); - helpbox.addLine(NEUTRINO_ICON_BUTTON_YELLOW, "Changing the active window", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); - helpbox.addLine(NEUTRINO_ICON_BUTTON_BLUE, "Reload recording info", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); - helpbox.addLine(NEUTRINO_ICON_BUTTON_MENU, "Open Moviebrowser menue", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_RED, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_RED), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_GREEN, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_GREEN), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_YELLOW, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_YELLOW), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_BLUE, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_BLUE), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); + helpbox.addLine(NEUTRINO_ICON_BUTTON_MENU, g_Locale->getText(LOCALE_MOVIEBROWSER_HELP_BUTTON_MENU), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); helpbox.addLine("+/- Change view", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 30); - helpbox.addSeparator(); #if 0 helpbox.addPagebreak(); #endif From ba90b113f07a1f457343e591c0fdfd98f4b7f32d Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 9 Oct 2016 17:11:43 +0200 Subject: [PATCH 37/85] Helpbox: fix possible transparent holes behind images Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/85797588847cb45ea2b63a23cfbe7cfb0378406b Author: Thilo Graf Date: 2016-10-09 (Sun, 09 Oct 2016) Origin message was: ------------------ Helpbox: fix possible transparent holes behind images --- src/gui/widget/helpbox.cpp | 2 ++ src/gui/widget/hintbox.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/src/gui/widget/helpbox.cpp b/src/gui/widget/helpbox.cpp index cea87e3e3..66cd9d4f2 100644 --- a/src/gui/widget/helpbox.cpp +++ b/src/gui/widget/helpbox.cpp @@ -97,7 +97,9 @@ void Helpbox::addLine(const std::string& icon, const std::string& text, const in if (!icon.empty()){ picon = new CComponentsPicture (0, 0, icon); w_picon = picon->getHeight(); + picon->doPaintBg(false); picon->setYPos(line->getHeight()/2 - w_picon/2); + picon->SetTransparent(CFrameBuffer::TM_BLACK); line->addCCItem(picon); } diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 557f87b76..5584c477e 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -221,6 +221,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const //init side picon object CComponentsPicture *obj_picon = new CComponentsPicture(0, 0, Picon); obj_picon->doPaintBg(false); + obj_picon->SetTransparent(CFrameBuffer::TM_BLACK); int w_picon = obj_picon->getWidth(); //init text item object From 3c1dc9d12369023d552e39f79ccf186ba6699876 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 9 Oct 2016 17:29:59 +0200 Subject: [PATCH 38/85] CHintbox: use default text frame depends from default height and width Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/b9d44a3fc8d063e09c3a4d88517af8f3c94cabac Author: Thilo Graf Date: 2016-10-09 (Sun, 09 Oct 2016) --- src/gui/widget/hintbox.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 01e46174f..b96db3834 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -37,7 +37,7 @@ #define HINTBOX_MAX_HEIGHT 420 #define HINTBOX_DEFAULT_TIMEOUT 5 //frame around hint container as indent -#define W_FRAME 15 +#define W_FRAME std::max(HINTBOX_MIN_WIDTH, HINTBOX_MIN_HEIGHT) * 2/100 //frame color around hint/message box #define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME From deca218ec8fe4b9ab69436b503ecd4b1c6569a0c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 11 Oct 2016 23:50:25 +0200 Subject: [PATCH 39/85] CHintbox/CMsgBox: add vizualized timeout bar Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/cb3699deb56b9a6163d9b2256ab247080d991876 Author: Thilo Graf Date: 2016-10-11 (Tue, 11 Oct 2016) --- src/gui/widget/hintbox.cpp | 35 ++++++++++++++++++++++++++++++++++- src/gui/widget/hintbox.h | 10 ++++++++-- src/gui/widget/msgbox.cpp | 7 +++---- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 5584c477e..c483c0df8 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -125,6 +125,7 @@ CHintBox::CHintBox( const char * const Caption, init(g_Locale->getText(Text), Width, string(Picon == NULL ? "" : Picon), header_buttons, text_mode, indent); } + void CHintBox::init(const std::string& Text, const int& Width, const std::string& Picon, const int& header_buttons, const int& text_mode, const int& indent) { lines = 0; @@ -154,10 +155,40 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string y_hint_obj = 0; h_hint_obj = obj_content->getHeight(); + //initialize timeout bar and its timer + timeout_pb = NULL; + timeout_pb_timer= NULL; + if (!Text.empty()) addHintItem(Text, text_mode, Picon); } +CHintBox::~CHintBox() +{ + if(timeout_pb){ + delete timeout_pb; timeout_pb = NULL; + } + if(timeout_pb_timer){ + delete timeout_pb_timer; timeout_pb_timer = NULL; + } +} + +void CHintBox::showTimeOutBar() +{ + if(timeout_pb){ + timeout_pb->paint0(); + timeout_pb->setValues(timeout_pb->getValue()+1, timeout); + }else{ + timeout_pb = new CProgressBar(); + timeout_pb->setDimensionsAll(ccw_body->getRealXPos(), ccw_body->getRealYPos(), ccw_body->getWidth(), 8); + timeout_pb->setValues(0, timeout); + if (!timeout_pb_timer) + timeout_pb_timer = new CComponentsTimer(1); + timeout_pb_timer->OnTimer.connect(sigc::mem_fun0(this, &CHintBox::showTimeOutBar)); + timeout_pb_timer->startTimer(); + } +} + int CHintBox::exec() { neutrino_msg_t msg; @@ -165,6 +196,9 @@ int CHintBox::exec() int res = messages_return::none; uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); + if (timeout > 0) + showTimeOutBar(); + while ( ! ( res & ( messages_return::cancel_info | messages_return::cancel_all ) ) ) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); @@ -394,7 +428,6 @@ void CHintBox::scroll_down(const uint& hint_id) Scroll(true, hint_id); } - int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) { int res = messages_return::none; diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index b96db3834..b4a7fb357 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -64,6 +64,10 @@ class CHintBox : public CComponentsWindow ///content container object, contains the hint objects, it's a child of body object CComponentsFrmChain *obj_content; + ///timeout bar + CProgressBar *timeout_pb; + CComponentsTimer *timeout_pb_timer; + ///scroll handler, default down and for the 1st hint item (=0), NOTE: exec() must be called! see also scroll_down()/scroll_up() void Scroll(bool down, const uint& hint_id = 0); @@ -115,11 +119,13 @@ class CHintBox : public CComponentsWindow const int& text_mode = 0, const int& indent = W_FRAME); - //~CHintBox(); //inherited + virtual ~CHintBox(); int exec(); ///define timeout, timeout is enabled if parameter1 > -1 - virtual void setTimeOut(const int& Timeout){timeout = Timeout;}; + virtual void setTimeOut(const int& Timeout){timeout = Timeout;} + ///shows timeout as progressbar + void showTimeOutBar(); ///scroll handler for text objects: NOTE: exec() must be called ! see also Scroll() ///scroll up handler, default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 67679e027..bee06c37d 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -218,12 +218,11 @@ int CMsgBox::exec() ccw_footer->getSelectedButtonObject()->setButtonAlias(mb_show_button); int selected = ccw_footer->getSelectedButton(); - - - dprintf(DEBUG_NORMAL, "\033[32m[CMsgBox] [%s - %d] getSelectedButton()= %d\033[0m\n", __func__, __LINE__,ccw_footer->getSelectedButton()); - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + if (timeout > 0) + showTimeOutBar(); + bool loop = true; while (loop) { From cc3cf7931fc5146afcab723b2110c6945a3e1119 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 12 Oct 2016 09:13:18 +0200 Subject: [PATCH 40/85] CPictureViewerGui: add helpbox Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/52abf18c2235fa4593149348dd67c40f6111bc7b Author: Thilo Graf Date: 2016-10-12 (Wed, 12 Oct 2016) --- src/gui/pictureviewer.cpp | 42 ++-------------- src/gui/pictureviewer.h | 2 +- src/gui/pictureviewer_help.h | 96 ++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 src/gui/pictureviewer_help.h diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index d7cc78419..7d09f898f 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -61,7 +61,7 @@ // remove this #include -#include +#include #include #include @@ -858,42 +858,8 @@ void CPictureViewerGui::deletePicFile(unsigned int index, bool mode) } } -void CPictureViewerGui::showHelp() +int CPictureViewerGui::showHelp() { - Helpbox helpbox(g_Locale->getText(LOCALE_MESSAGEBOX_INFO)); - helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP1)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP2)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP4)); - helpbox.addPagebreak(); - helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP5)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP6)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP7)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); - helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); -// helpbox.addPagebreak(); -// helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP9)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP10)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP11)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP12)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_1, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP13)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_3, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP14)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_2, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP15)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_4, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP16)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_6, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP17)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_8, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP18)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP19)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); -// if(audioplayer) -// { -// helpbox.addPagebreak(); -// helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP30)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP31)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_PAUSE, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP32)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_STOP, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP33)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_FORWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP34)); -// helpbox.addLine(NEUTRINO_ICON_BUTTON_BACKWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP35)); -// } - helpbox.show(); + CPictureViewerHelp help(audioplayer); + return help.exec(NULL, ""); } diff --git a/src/gui/pictureviewer.h b/src/gui/pictureviewer.h index 2d5410148..6b17ec2dd 100644 --- a/src/gui/pictureviewer.h +++ b/src/gui/pictureviewer.h @@ -108,7 +108,7 @@ class CPictureViewerGui : public CMenuTarget void endView(); int show(); - void showHelp(); + int showHelp(); void deletePicFile(unsigned int index, bool mode); bool audioplayer; diff --git a/src/gui/pictureviewer_help.h b/src/gui/pictureviewer_help.h new file mode 100644 index 000000000..b82b30445 --- /dev/null +++ b/src/gui/pictureviewer_help.h @@ -0,0 +1,96 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + 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, see . + + *********************************************************** +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifndef _PVIEWER_HELP_H_ +#define _PVIEWER_HELP_H_ + + +#include + +// Class to show Pictureviewer help, to be used by menu +class CPictureViewerHelp : public CMenuTarget +{ + private: + bool audioplayer; + + public: + CPictureViewerHelp(bool enable_audioplayer_help) + { + audioplayer = enable_audioplayer_help; + } + ~CPictureViewerHelp(){}; + + int exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) + { + Helpbox helpbox(g_Locale->getText(LOCALE_HELP_BOX_TITLE)); + + helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP1), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP2)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP4)); + helpbox.addSeparatorLine(); + helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP5), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP6)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP7)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); + helpbox.addPagebreak(); + helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP9), CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, 35, 10, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]); + helpbox.addLine(NEUTRINO_ICON_BUTTON_OKAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP10)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_LEFT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP11)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_RIGHT, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP12)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_1, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP13)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_3, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP14)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_2, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP15)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_4, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP16)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_6, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP17)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_8, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP18)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_5, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP3)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_0, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP19)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_HOME, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP8)); + + if(audioplayer){ + helpbox.addPagebreak(); + helpbox.addLine(g_Locale->getText(LOCALE_PICTUREVIEWER_HELP30)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_PLAY, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP31)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_PAUSE, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP32)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_STOP, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP33)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_FORWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP34)); + helpbox.addLine(NEUTRINO_ICON_BUTTON_BACKWARD, g_Locale->getText(LOCALE_PICTUREVIEWER_HELP35)); + } + + helpbox.addExitKey(CRCInput::RC_ok); + + helpbox.show(); + int ret = helpbox.exec(); + helpbox.hide(); + + return ret; + } +}; + +#endif /*_PVIEWER_HELP_H_*/ + From c9972f68a000bb1359c18ae068bc47591ce231b4 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 13 Oct 2016 01:10:39 +0200 Subject: [PATCH 41/85] CHintBox: add space for timeout bar Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/c035b2fc150ecd80807e7b0490ad915535ffebc1 Author: Thilo Graf Date: 2016-10-13 (Thu, 13 Oct 2016) --- src/gui/widget/hintbox.cpp | 6 +++--- src/gui/widget/hintbox.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index c483c0df8..84e450e31 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -180,7 +180,7 @@ void CHintBox::showTimeOutBar() timeout_pb->setValues(timeout_pb->getValue()+1, timeout); }else{ timeout_pb = new CProgressBar(); - timeout_pb->setDimensionsAll(ccw_body->getRealXPos(), ccw_body->getRealYPos(), ccw_body->getWidth(), 8); + timeout_pb->setDimensionsAll(ccw_body->getRealXPos(), ccw_body->getRealYPos(), ccw_body->getWidth(), TIMEOUT_BAR_HEIGHT); timeout_pb->setValues(0, timeout); if (!timeout_pb_timer) timeout_pb_timer = new CComponentsTimer(1); @@ -253,7 +253,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const int h_line = font->getHeight(); //init side picon object - CComponentsPicture *obj_picon = new CComponentsPicture(0, 0, Picon); + CComponentsPicture *obj_picon = new CComponentsPicture(0, timeout > 0 ? TIMEOUT_BAR_HEIGHT : 0, Picon); obj_picon->doPaintBg(false); obj_picon->SetTransparent(CFrameBuffer::TM_BLACK); int w_picon = obj_picon->getWidth(); @@ -263,7 +263,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const int w_text_obj = obj_content->getWidth() - w_picon - w_indentation; int h_text_obj = max(h_line, obj_picon->getHeight()); CComponentsText *obj_text = new CComponentsText(x_text_obj, - 0, + timeout > 0 ? TIMEOUT_BAR_HEIGHT : 0, w_text_obj, h_text_obj, Text, diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index b4a7fb357..e8a08fde3 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -40,6 +40,7 @@ #define W_FRAME std::max(HINTBOX_MIN_WIDTH, HINTBOX_MIN_HEIGHT) * 2/100 //frame color around hint/message box #define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME +#define TIMEOUT_BAR_HEIGHT OFFSET_SHADOW/2 //! Sub class of CComponentsWindow. Shows a window as a hintbox with text and optional icon beside of text. /*! From 3278e0e10312434de8d13b97df43badb1bc82894 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 13 Oct 2016 10:06:18 +0200 Subject: [PATCH 42/85] CComponentsForm: try to fix possible transparent bars Ion enabled frame it's possible we have transparent bars between frame and the last item on window bottom. This should avoid this. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/edd2e48bbe35801acae4cd81cad4a3a488baa3fe Author: Thilo Graf Date: 2016-10-13 (Thu, 13 Oct 2016) --- src/gui/components/cc_frm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index 45c086101..3efb2da8b 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -492,7 +492,7 @@ void CComponentsForm::paintCCItems() } //check height and adapt if required - int bottom_frm = (cc_parent ? cc_yr : y) + height - 2*fr_thickness; + int bottom_frm = (cc_parent ? cc_yr : y) + height/* - 2*fr_thickness*/; int bottom_item = cc_item->getRealYPos() + h_item; int h_diff = bottom_item - bottom_frm; int new_h = h_item - h_diff; From 77f953cdbb0920623f97b4fe1be2e4a73317a92b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 14 Oct 2016 00:43:34 +0200 Subject: [PATCH 43/85] CComponentsWindow: prepare possibility to change footer height Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/013cd1f2ccf73d3f643c85cbedbd2f335d60dd21 Author: Thilo Graf Date: 2016-10-14 (Fri, 14 Oct 2016) --- src/gui/components/cc_frm_window.cpp | 7 +++++-- src/gui/components/cc_frm_window.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_window.cpp b/src/gui/components/cc_frm_window.cpp index 6d52dd36f..982219e1b 100644 --- a/src/gui/components/cc_frm_window.cpp +++ b/src/gui/components/cc_frm_window.cpp @@ -126,6 +126,7 @@ void CComponentsWindow::initVarWindow( const int& x_pos, const int& y_pos, const y = y_pos; width = w; height = h; + ccw_h_footer = 0; //auto initWindowSize(); initWindowPos(); @@ -216,6 +217,8 @@ void CComponentsWindow::initFooter() //add of footer item happens initCCWItems() //set footer properties if (ccw_footer){ + if (ccw_h_footer) + ccw_footer->setHeight(ccw_h_footer); ccw_footer->setPos(0, cc_yr + height - ccw_footer->getHeight()- fr_thickness); ccw_footer->setWidth(width-2*fr_thickness); ccw_footer->enableShadow(false/*shadow*/); @@ -291,10 +294,10 @@ void CComponentsWindow::initBody() int h_body = height - h_header - h_footer - fr_thickness; int x_body = w_l_sidebar; int w_body = width-2*fr_thickness - w_l_sidebar - w_r_sidebar; - + ccw_body->setDimensionsAll(x_body, h_header, w_body, h_body); ccw_body->doPaintBg(true); - + //handle corner behavior if (!ccw_show_header) ccw_body->setCornerType(CORNER_TOP); diff --git a/src/gui/components/cc_frm_window.h b/src/gui/components/cc_frm_window.h index 6d1807798..ca2fb296e 100644 --- a/src/gui/components/cc_frm_window.h +++ b/src/gui/components/cc_frm_window.h @@ -89,6 +89,8 @@ class CComponentsWindow : public CComponentsForm fb_pixel_t ccw_col_head_text; ///footer bg color fb_pixel_t ccw_col_footer; + ///footer heigh, default defined by footer object itself + int ccw_h_footer; ///footer button font Font* ccw_button_font; From d16159d80aedaafdb920b1fbe6695deb22ea46ab Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 14 Oct 2016 00:47:42 +0200 Subject: [PATCH 44/85] CMsgBox: enlarge footer height Buttons has too small offset to bottom of footer. Framed and shaded buttons are arranged on the top of footer, so we have a larger offset. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/d50ef787a2738bcf53763e1650441c26416c266c Author: Thilo Graf Date: 2016-10-14 (Fri, 14 Oct 2016) --- src/gui/widget/msgbox.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index bee06c37d..bf8607f6e 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -87,6 +87,8 @@ void CMsgBox::init(const int& Height, const int& ShowButtons, const msg_result_t //enable footer and add its height showFooter(true); + ccw_h_footer = ccw_footer->getHeight()+OFFSET_INNER_MID; + ccw_footer->setHeight(ccw_h_footer); btn_enable_bg = false; ccw_col_footer = ccw_body->getColorBody(); ccw_footer->doPaintBg(false); From c28b7d4a23326146ac2b525d527f63a1d72e5372 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 17 Oct 2016 21:08:31 +0200 Subject: [PATCH 45/85] CMsgBox: ensure reset of progress value on used key Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3280b44471d54fc9fe32989264eb92543a94e4bd Author: Thilo Graf Date: 2016-10-17 (Mon, 17 Oct 2016) --- src/gui/widget/msgbox.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index bf8607f6e..dfe855cad 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -271,8 +271,10 @@ int CMsgBox::exec() refreshFoot(); //refresh timeout on any pressed navi key! This resets current timeout end to the initial value - if (timeout > 0) + if (timeout > 0){ + timeout_pb->setValues(0, timeout); timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + } dprintf(DEBUG_INFO, "\033[32m[CMsgBox] [%s - %d] result = %d, mb_show_button = %d\033[0m\n", __func__, __LINE__, result, mb_show_button); } //***action buttons without preselection*** From 254d9366c32c8cc0078eb0496f0083e65b9414d0 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 17 Oct 2016 21:10:16 +0200 Subject: [PATCH 46/85] CCDraw: add signals into hide() methode alows to use slots Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/78259c6ec318a7474a84501239b5744126c60c90 Author: Thilo Graf Date: 2016-10-17 (Mon, 17 Oct 2016) --- src/gui/components/cc_draw.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index 4174e8f81..1e7372974 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -633,6 +633,7 @@ void CCDraw::paintFbItems(bool do_save_bg) void CCDraw::hide() { + OnBeforeHide(); //restore saved screen background of item if available for(size_t i =0; i< v_fbdata.size() ;i++) { if (v_fbdata[i].fbdata_type == CC_FBDATA_TYPE_BGSCREEN){ @@ -646,6 +647,7 @@ void CCDraw::hide() } is_painted = false; firstPaint = true; + OnAfterHide(); } //erase or paint over rendered objects From 3534f404419860d07cbc7e50816c4834885551f9 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 17 Oct 2016 21:17:01 +0200 Subject: [PATCH 47/85] CComponentsFooter: reduce button height inside footer TODO: more optimization seems required Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/542de648f5cd6c39580032e1f55358969dc261cc Author: Thilo Graf Date: 2016-10-17 (Mon, 17 Oct 2016) --- src/gui/components/cc_frm_footer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index bf7e1bf09..2d777a7b5 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -167,7 +167,7 @@ void CComponentsFooter::setButtonLabels(const struct button_label_s * const cont * with default width to chain object. */ vector v_btns; - int h_btn = /*(ccf_enable_button_bg ? */(height*85/100)-2*fr_thickness/* : height)*/-ccf_button_shadow_width; + int h_btn = /*(ccf_enable_button_bg ? */(height*85/100)-2*fr_thickness-OFFSET_INNER_SMALL/* : height)*/-ccf_button_shadow_width; for (size_t i= 0; i< label_count; i++){ string txt = content[i].text; string icon_name = string(content[i].button); From fc538b20128c3cb9d3aeac6a3e551d106c7de68c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 20 Oct 2016 23:49:09 +0200 Subject: [PATCH 48/85] CComponentsTimer: add support for nano seconds To enable nano mode, parameter is_nano must set to true. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/d0dd14040f6b3f8084ff5deeb669a65a7032aa4b Author: Thilo Graf Date: 2016-10-20 (Thu, 20 Oct 2016) --- src/gui/components/cc_timer.cpp | 15 ++++++++++----- src/gui/components/cc_timer.h | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/gui/components/cc_timer.cpp b/src/gui/components/cc_timer.cpp index 966d0bcc2..9c8b1aa7b 100644 --- a/src/gui/components/cc_timer.cpp +++ b/src/gui/components/cc_timer.cpp @@ -36,10 +36,11 @@ using namespace std; -CComponentsTimer::CComponentsTimer(const int& interval) +CComponentsTimer::CComponentsTimer(const int& interval, bool is_nano) { tm_thread = 0; tm_interval = interval; + tm_enable_nano = is_nano; sl_stop_timer = sigc::mem_fun(*this, &CComponentsTimer::stopTimer); @@ -59,7 +60,10 @@ void CComponentsTimer::runSharedTimerAction() while(tm_enable && tm_interval > 0) { tm_mutex.lock(); OnTimer(); - mySleep(tm_interval); + if (!tm_enable_nano) + mySleep(tm_interval); + else + usleep((useconds_t)tm_interval); tm_mutex.unlock(); } @@ -142,10 +146,11 @@ bool CComponentsTimer::stopTimer() return false; } -void CComponentsTimer::setTimerInterval(const int& seconds) +void CComponentsTimer::setTimerInterval(const int& interval, bool is_nano) { - if (tm_interval == seconds) + if (tm_interval == interval && tm_enable_nano == is_nano) return; - tm_interval = seconds; + tm_enable_nano = is_nano; + tm_interval = interval; } diff --git a/src/gui/components/cc_timer.h b/src/gui/components/cc_timer.h index a653889c3..530224f40 100644 --- a/src/gui/components/cc_timer.h +++ b/src/gui/components/cc_timer.h @@ -47,6 +47,8 @@ class CComponentsTimer : public sigc::trackable ///refresh interval in seconds int tm_interval; + + bool tm_enable_nano; ///init function to init shared timer action static void* initThreadAction(void *arg); @@ -71,10 +73,12 @@ class CComponentsTimer : public sigc::trackable * @param[in] interval * @li int interval in seconds, default value=1 (1 sec) * If init value for interval > 0, timer starts immediately + * @li bool default = false as seconds mode, true = nano seconds mode * @see * setTimerInterval(); */ - CComponentsTimer(const int& interval = 1); + CComponentsTimer(const int& interval = 1, bool is_nano = false); + ~CComponentsTimer(); /**Starts timer thread @@ -105,15 +109,16 @@ class CComponentsTimer : public sigc::trackable */ bool isRun() const {return tm_thread;}; - /**set interval in seconds - * @param[in] seconds - * @li int + /**set timer interval + * @param[in] interval + * @li int default interval in seconds, if second parameter = true interval is used as nano seconds + * @li bool default = false as seconds mode, true = nano seconds mode * @return * void * @see * tm_interval */ - void setTimerInterval(const int& seconds); + void setTimerInterval(const int& interval, bool is_nano = false); /**Provides a signal handler to receive any function or methode. * Use this in your class where ever you need time controled actions. From 28ba1cbc8632ce5ef1de1af3e6e7b85b4b01726c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 20 Oct 2016 23:53:42 +0200 Subject: [PATCH 49/85] CHintBox: visualize timeoutbar with smooth progress Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/4ff7bd8f7ee2d898bea82d366a3e7daf2ed89ed4 Author: Thilo Graf Date: 2016-10-20 (Thu, 20 Oct 2016) --- src/gui/widget/hintbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 84e450e31..e8a8aee00 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -177,13 +177,13 @@ void CHintBox::showTimeOutBar() { if(timeout_pb){ timeout_pb->paint0(); - timeout_pb->setValues(timeout_pb->getValue()+1, timeout); + timeout_pb->setValues(timeout_pb->getValue()+1, 100*timeout); }else{ timeout_pb = new CProgressBar(); timeout_pb->setDimensionsAll(ccw_body->getRealXPos(), ccw_body->getRealYPos(), ccw_body->getWidth(), TIMEOUT_BAR_HEIGHT); - timeout_pb->setValues(0, timeout); + timeout_pb->setValues(0, 100*timeout); if (!timeout_pb_timer) - timeout_pb_timer = new CComponentsTimer(1); + timeout_pb_timer = new CComponentsTimer(1, true); timeout_pb_timer->OnTimer.connect(sigc::mem_fun0(this, &CHintBox::showTimeOutBar)); timeout_pb_timer->startTimer(); } From c004c300565080925768c453ca2b2fba94278f35 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 21 Oct 2016 00:10:38 +0200 Subject: [PATCH 50/85] CHintBox: fix text mode pass Rquired in inherited classes Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/2952dcc124b6f0c7bcedca1c1a0b8787061c44d8 Author: Thilo Graf Date: 2016-10-21 (Fri, 21 Oct 2016) --- src/gui/widget/hintbox.cpp | 3 ++- src/gui/widget/hintbox.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index e8a8aee00..a75bd1c56 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -131,6 +131,7 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string lines = 0; timeout = HINTBOX_DEFAULT_TIMEOUT; w_indentation = indent; + hb_text_mode = text_mode; //set required window width and basic height width = max(HINTBOX_MIN_WIDTH, Width); @@ -160,7 +161,7 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string timeout_pb_timer= NULL; if (!Text.empty()) - addHintItem(Text, text_mode, Picon); + addHintItem(Text, hb_text_mode, Picon); } CHintBox::~CHintBox() diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index e8a08fde3..80f89fa50 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -55,6 +55,7 @@ class CHintBox : public CComponentsWindow int y_hint_obj; int h_hint_obj; int w_indentation; + int hb_text_mode; ///global count of lines uint lines; From c8c22653a17c0d9ef9fc047fe51677c37eefac44 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 21 Oct 2016 09:21:39 +0200 Subject: [PATCH 51/85] CHintBox: ensure remove timeout bar from screen if hintbox object is closed Timeout bar is not embedded like other cc items in this form, therefor is is better to kill this object explicit from screen otherwise it is possible we hab artefacts after closing of hintbox window. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/6580c5a54a3bc4d58f7394b497ef032aca5e1c12 Author: Thilo Graf Date: 2016-10-21 (Fri, 21 Oct 2016) Origin message was: ------------------ CHintBox: ensure remove timeout bar from screen if hintbox object is closed Timeout bar is not embedded like other cc items in this form, therefor is is better to kill this object explicit from screen otherwise it is possible we hab artefacts after closing of hintbox window. --- src/gui/widget/hintbox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index a75bd1c56..a7e3a7d19 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -167,6 +167,7 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string CHintBox::~CHintBox() { if(timeout_pb){ + timeout_pb->kill(); //ensure cleanup from screen delete timeout_pb; timeout_pb = NULL; } if(timeout_pb_timer){ From 4c8e3c6fd4c9e3813d46e27e1ad89edab8c528d1 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 22 Oct 2016 13:57:46 +0200 Subject: [PATCH 52/85] CTestMenu: ensure remove hintbox from screen after pressed exit button. call of hide() was missed. Use hintbox object on stack. Is completely sufficient here. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/912ca8647ec66083a859a8f34566065d05b9b073 Author: Thilo Graf Date: 2016-10-22 (Sat, 22 Oct 2016) --- src/gui/test_menu.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 53fd1b09e..7120cdfa9 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -283,8 +283,8 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) neutrino_msg_t msg; neutrino_msg_data_t data; CHintBox * khintBox = NULL; - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Press button, or press EXIT to return"); - hintBox->paint(); + CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, "Press button, or press EXIT to return"); + hintBox.paint(); while (1) { g_RCInput->getMsg(&msg, &data, 100); @@ -300,15 +300,15 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) delete khintBox; } khintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, keyname); - hintBox->hide(); + hintBox.hide(); khintBox->paint(); } } if (khintBox) delete khintBox; - - delete hintBox; - + + hintBox.hide(); + return res; } #if 0 //some parts DEPRECATED From 8def652574c4fa93fbd3a1279fbe348df0274c2a Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 23 Oct 2016 16:51:46 +0200 Subject: [PATCH 53/85] CHintBox: add doc with doxygen tags Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/969e2fe600bb6096d15db2032f4ad861dc12ff7a Author: Thilo Graf Date: 2016-10-23 (Sun, 23 Oct 2016) --- src/gui/widget/hintbox.h | 196 ++++++++++++++++++++++++++++++++------- 1 file changed, 165 insertions(+), 31 deletions(-) diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 80f89fa50..49c907e8c 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -8,7 +8,7 @@ Copyright (C) 2008-2009, 2011, 2013 Stefan Seyfried Implementation of CComponent Window class. - Copyright (C) 2014-2015 Thilo Graf 'dbt' + Copyright (C) 2014-2016 Thilo Graf 'dbt' License: GPL @@ -81,10 +81,40 @@ class CHintBox : public CComponentsWindow const int& text_mode, const int& indent); - void ReSize(); + virtual void ReSize(); public: - // Text is UTF-8 encoded + /**CHintBox Constructor + * @param[in] Caption + * @li exepts type neutrino_locale_t with locale entry from /system/locals.h + * @param[in] Text + * @li exepts type const char*, this is the message text inside the window, text is UTF-8 encoded + * @param[in] Width + * @li optional: exepts type int, defines box width, default value = HINTBOX_MIN_WIDTH + * @param[in] Icon + * @li optional: exepts type const char*, defines the icon name on the left side of titlebar, default = NULL (non Icon) + * @param[in] Picon + * @li optional: exepts type const char*, defines the picon name on the left side of message text, default = NULL (non Icon) + * @param[in] header_buttons + * @li optional: exepts type int, defines the icon name on the left side of titlebar, default = 0 (non Icon) + * @see class CComponentsWindow() + * @param[in] text_mode + * @li optional: exepts type int, defines the text modes for embedded text lines + * Possible Modes defined in /gui/widget/textbox.h + * AUTO_WIDTH + * AUTO_HIGH + * SCROLL + * CENTER + * RIGHT + * TOP + * BOTTOM + * NO_AUTO_LINEBREAK + * AUTO_LINEBREAK_NO_BREAKCHARS + * @param[in] indent + * @li optional: exepts type int, defines indent of text + * + * @see classes CComponentsText(), CTextBox() + */ CHintBox( const neutrino_locale_t Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, @@ -94,6 +124,11 @@ class CHintBox : public CComponentsWindow const int& text_mode = 0, const int& indent = W_FRAME); + /**CHintBox Constructor + * @param[in] Caption + * @li exepts type const char* + * @see for other parameters take a look to basic class CHintBox() + */ CHintBox( const char * const Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, @@ -103,6 +138,13 @@ class CHintBox : public CComponentsWindow const int& text_mode = 0, const int& indent = W_FRAME); + /**CHintBox Constructor + * @param[in] Caption + * @li exepts type neutrino_locale_t with locale entry from /system/locals.h + * @param[in] Text + * @li exepts type neutrino_locale_t with locale entry from /system/locals.h + * @see for other parameters take a look to basic class CHintBox() + */ CHintBox( const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width = HINTBOX_MIN_WIDTH, @@ -112,6 +154,13 @@ class CHintBox : public CComponentsWindow const int& text_mode = 0, const int& indent = W_FRAME); + /**CHintBox Constructor + * @param[in] Caption + * @li exepts type const char* + * @param[in] Text + * @li exepts type neutrino_locale_t with locale entry from /system/locals.h + * @see for other parameters take a look to basic class CHintBox() + */ CHintBox( const char * const Caption, const neutrino_locale_t Text, const int Width = HINTBOX_MIN_WIDTH, @@ -122,48 +171,109 @@ class CHintBox : public CComponentsWindow const int& indent = W_FRAME); virtual ~CHintBox(); + /** + * exec caller + * @return int + */ int exec(); - ///define timeout, timeout is enabled if parameter1 > -1 + /** + * Defines timeout, timeout is enabled if parameter1 > -1 + * @param[in] Timeout as int as seconds + */ virtual void setTimeOut(const int& Timeout){timeout = Timeout;} - ///shows timeout as progressbar + + /** + * enable visualized timeout as progressbar under titelbar + */ void showTimeOutBar(); - ///scroll handler for text objects: NOTE: exec() must be called ! see also Scroll() - ///scroll up handler, default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 + /** + * scroll handler for text objects: NOTE: exec() must be called ! + * @param[in] hint_id + * @li optional: exepts type unsigned int, default = 0 + * default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 + * @see Scroll() + */ void scroll_up(const uint& hint_id = 0); - ///scroll down handler, default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we have minimal one item with id=0 + + /** + * scroll down handler for text objects: NOTE: exec() must be called ! + * @param[in] hint_id + * @li exepts type unsigned int, default = 0 + * default for the 1st hint item (=0), item id arises from the order of added items with addHintItem(), default we h + * @see Scroll() + */ void scroll_down(const uint& hint_id = 0); - ///specialized member to add a hint item, parameter1: UTF8 text that will be showed, parameter2: (optional) textmode, see gui/widget/textbox.h for possible modes, parameter3: (optional) = an icon that will be showed left beside of text + /** + * Member to add a hint item + * @param[in] Text + * @li exepts type std::string, this is the message text inside the window, text is UTF-8 encoded + * @param[in] text_mode + * @li optional: exepts type int, defines the text modes for embedded text lines + * Possible Modes defined in /gui/widget/textbox.h + * AUTO_WIDTH + * AUTO_HIGH + * SCROLL + * CENTER + * RIGHT + * TOP + * BOTTOM + * NO_AUTO_LINEBREAK + * AUTO_LINEBREAK_NO_BREAKCHARS + * @param[in] Picon + * @li optional: exepts type std::string, defines the picon name on the left side of message text, default = NULL (non Icon) + * @param[in] at_page_number + * @li optional: exepts type int, defines the page number on that this hint will be, default = 0 (first page) + * @param[in] color_text + * @li optional: exepts type fb_pixel_t, defines the text color, default = COL_MENUCONTENT_TEXT + * * @param[in] font_text + * @li optional: exepts type Font*, defines the text font type, default = NULL for system preset for message contents + */ void addHintItem( const std::string& Text, const int& text_mode = 0, const std::string& Picon = std::string(), const u_int8_t& at_page_number = 0, const fb_pixel_t& color_text = COL_MENUCONTENT_TEXT, Font* font_text = NULL); - ///add any cc-item to body object, also usable is addWindowItem() to add items to the window body object + + /** + * Member to add a hint item from specified cc-item type + * @param[in] cc_Item + * @li exepts type CComponentsItem*, allows to add any possible cc-item type + * + * @see /gui/components/cc_types.h + */ void addHintItem(CComponentsItem* cc_Item){obj_content->addCCItem(cc_Item);} - /*! - * Sets a new text to a hint item, - 2nd parameter expects an item number, default = 0 (1st item). Mostly this should be the only one, but if more than one items are exist, it's possible to select a target item. - 3rd parameter expects modes from CTextBox (default = CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER) - AUTO_WIDTH - AUTO_HIGH - SCROLL - CENTER - RIGHT - TOP - BOTTOM - NO_AUTO_LINEBREAK - AUTO_LINEBREAK_NO_BREAKCHARS - 4th parameter font_text expects a font object, if default value = NULL, then g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] is used - 5th parameter expects value from /gui/color.h or compatible color numbers - 6th parameter expects - FONT_STYLE_REGULAR (default) - FONT_STYLE_BOLD - FONT_STYLE_ITALIC + /** + * Sets a text to a hint item. + * @param[in] Text + * @li exepts type std::string, this is the message text inside the hint item, text is UTF-8 encoded + * @param[in] hint_id + * @li optional: exepts type unsigned int, default = 0 for the first or one and only item + * @param[in] text_mode + * @li optional: exepts type int, defines the text modes for embedded text lines + * Possible Modes defined in /gui/widget/textbox.h + * AUTO_WIDTH + * AUTO_HIGH + * SCROLL + * CENTER + * RIGHT + * TOP + * BOTTOM + * NO_AUTO_LINEBREAK + * AUTO_LINEBREAK_NO_BREAKCHARS + * default: CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER + * @param[in] color_text + * @li optional: exepts type fb_pixel_t, defines the text color, default = COL_MENUCONTENT_TEXT + * * @param[in] style + * @li optional: exepts type int, defines the text style NOTE: only for dynamic font + * possible styles are: + * FONT_STYLE_REGULAR (default) + * FONT_STYLE_BOLD + * FONT_STYLE_ITALIC */ void setMsgText(const std::string& Text, const uint& hint_id = 0, @@ -173,7 +283,11 @@ class CHintBox : public CComponentsWindow const int& style = CComponentsText::FONT_STYLE_REGULAR); }; -// Text is UTF-8 encoded +/** +* Simplified methodes to show hintboxes on screen +* Text is UTF-8 encoded +* @see for possible parameters take a look to CHintBox() +*/ int ShowHint(const neutrino_locale_t Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); int ShowHint(const neutrino_locale_t Caption, const neutrino_locale_t Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); int ShowHint(const char * const Caption, const char * const Text, const int Width = HINTBOX_MIN_WIDTH, int timeout = HINTBOX_DEFAULT_TIMEOUT, const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0); @@ -190,11 +304,31 @@ optional disable/enable background class CHint : public CHintBox { public: + /**CHint Constructor + * @param[in] Text + * @li exepts type const char*, this is the message text inside the window, text is UTF-8 encoded + * @param[in] show_background + * @li optional: exepts type bool, enable/disable backround paint, default = true + */ CHint(const char * const Text, bool show_background = true); + /**CHint Constructor + * @param[in] Text + * @li exepts type neutrino_locale_t, this is the message text inside the window, text is UTF-8 encoded + * @param[in] show_background + * @li optional: exepts type bool, enable/disable backround paint, default = true + */ CHint(const neutrino_locale_t Text, bool show_background = true); }; -//methods to show simplified hints +/** +* Simplified methodes to show hintboxes without titlebar and footer +* Text is UTF-8 encoded +* @param[in] timeout +* @li optional: exepts type int as seconds, default = HINTBOX_DEFAULT_TIMEOUT (5 sec) +* @param[in] show_background +* @li optional: exepts type bool, enable/disable backround paint, default = true +* @see for possible text parameters take a look to CHintBox() +*/ int ShowHintS(const neutrino_locale_t Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true); int ShowHintS(const char * const Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true); From 9dcee01e694f573f894377dded99699e812c48b6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 23 Oct 2016 17:08:51 +0200 Subject: [PATCH 54/85] CComponentsFooter: optimize select buttons, try to assign better contrast Now it's possible to set parameters for frames and text. Parameters are prdefined for better contrasts in select or default mode. TODO: background modes have no effects at the moment. Here are other things need to be done. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/55ac5815230c2547970901e088a0213c6161c853 Author: Thilo Graf Date: 2016-10-23 (Sun, 23 Oct 2016) --- src/gui/components/cc_frm_footer.cpp | 15 +++++++++++---- src/gui/components/cc_frm_footer.h | 25 +++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 2d777a7b5..8256752cd 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -345,13 +345,20 @@ void CComponentsFooter::enableButtonBg(bool enable) } } -void CComponentsFooter::setSelectedButton(size_t item_id) +void CComponentsFooter::setSelectedButton(size_t item_id, const fb_pixel_t& fr_col, const fb_pixel_t& sel_fr_col, const fb_pixel_t& bg_col, const fb_pixel_t& sel_bg_col, const fb_pixel_t& text_col, const fb_pixel_t& sel_text_col) { if (chain){ - fb_pixel_t sel_col = COL_MENUCONTENTSELECTED_PLUS_2; + for (size_t i= 0; i< chain->size(); i++){ + CComponentsButton *btn = static_cast(chain->getCCItem(i)); + btn->setButtonTextColor(text_col); + } + fb_pixel_t sel_col = fr_col; if (chain->size() > 1) - sel_col = COL_MENUCONTENTSELECTED_PLUS_0; //TODO: make it configurable - chain->setSelectedItem(item_id, sel_col, COL_MENUCONTENTSELECTED_PLUS_2, COL_MENUCONTENT_PLUS_0, COL_MENUCONTENT_PLUS_0, 1, 2); + sel_col = sel_fr_col; //TODO: make it configurable + chain->setSelectedItem(item_id, sel_col, fr_col, sel_bg_col, bg_col, 1, 2); + + if (chain->size() > 1) + getSelectedButtonObject()->setButtonTextColor(sel_text_col); } } diff --git a/src/gui/components/cc_frm_footer.h b/src/gui/components/cc_frm_footer.h index 301a93362..7796aac39 100644 --- a/src/gui/components/cc_frm_footer.h +++ b/src/gui/components/cc_frm_footer.h @@ -137,8 +137,29 @@ class CComponentsFooter : public CComponentsHeader ///disables background of buttons void disableButtonBg(){enableButtonBg(false);} - ///select a definied button, parameter1 as size_t - void setSelectedButton(size_t item_id); + /**Select a definied button inside button chain object + * @param[in] item_id + * @li optional: exepts type size_t + * @param[in] fr_col + * @li optional: exepts type fb_pixel_t, as default frame color + * @param[in] sel_fr_col + * @li optional: exepts type fb_pixel_t, as selected frame color + * @param[in] bg_col + * @li optional: exepts type fb_pixel_t, as default background color + * @param[in] sel_bg_col + * @li optional: exepts type fb_pixel_t, as selected background color + * @param[in] text_col + * @li optional: exepts type fb_pixel_t, as default text color + * @param[in] sel_text_col + * @li optional: exepts type fb_pixel_t, as selected text color + */ + void setSelectedButton(size_t item_id, + const fb_pixel_t& fr_col = COL_MENUCONTENTSELECTED_PLUS_2, + const fb_pixel_t& sel_fr_col = COL_MENUCONTENTSELECTED_PLUS_0, + const fb_pixel_t& bg_col = COL_MENUFOOT_PLUS_0, /*TODO disabled at the moment, without effect*/ + const fb_pixel_t& sel_bg_col = COL_MENUCONTENTSELECTED_PLUS_2, /*TODO disabled at the moment, without effect*/ + const fb_pixel_t& text_col = COL_MENUCONTENTDARK_TEXT_PLUS_2, + const fb_pixel_t& sel_text_col = COL_MENUCONTENT_TEXT); ///returns id of select button, return value as int, -1 = nothing is selected int getSelectedButton(); ///returns selected button object, return value as pointer to object, NULL means nothing is selected From 9f8d4b4386cce554f131f8f46e47445ccc6535cd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 23 Oct 2016 20:40:06 +0200 Subject: [PATCH 55/85] CMsgBox: use default text mode parameter with scroll for all derivatives Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/21e8188b5bf710e9a6305598b728095cf2147558 Author: Thilo Graf Date: 2016-10-23 (Sun, 23 Oct 2016) --- src/gui/widget/msgbox.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index 0cf3a8fc9..eda0c941d 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -7,7 +7,7 @@ Günther@tuxbox.berlios.org Implementation of CComponent Window class. - Copyright (C) 2014-2015 Thilo Graf 'dbt' + Copyright (C) 2014-2016 Thilo Graf 'dbt' License: GPL @@ -38,6 +38,7 @@ #define MSGBOX_MIN_WIDTH HINTBOX_MIN_WIDTH #define MSGBOX_MIN_HEIGHT HINTBOX_MIN_HEIGHT + 75 +#define DEFAULT_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH | CMsgBox::SCROLL) //! Sub class of CHintBox. Shows a window as a messagebox /*! @@ -126,7 +127,7 @@ class CMsgBox : public CHintBox const int& Height = MSGBOX_MIN_HEIGHT, const int& ShowButtons = mbCancel, const msg_result_t& Default_result = mbrCancel, - const int& Text_mode = CMsgBox::CENTER | CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::SCROLL); + const int& Text_mode = DEFAULT_TEXT_MODE); CMsgBox(const char* Text, const neutrino_locale_t locale_Title = NONEXISTANT_LOCALE, @@ -136,7 +137,7 @@ class CMsgBox : public CHintBox const int& Height = MSGBOX_MIN_HEIGHT, const int& ShowButtons = mbCancel, const msg_result_t& Default_result = mbrCancel, - const int& Text_mode = CMsgBox::CENTER | CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::SCROLL); + const int& Text_mode = DEFAULT_TEXT_MODE); // ~CMsgBox(); //inherited int exec(); @@ -192,8 +193,6 @@ class CMsgBox : public CHintBox // bool setText(const std::string* newText); }; -#define DEFAULT_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH) - int ShowMsg2UTF( const neutrino_locale_t Title, const char * const Text, const CMsgBox::msg_result_t Default, From ebc13d46b341518685c686843f846066122fb6e3 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 23 Oct 2016 21:39:17 +0200 Subject: [PATCH 56/85] CHintBox: try to optimize height and width of message window Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/a5ce26dfd969765d8cfe09b42abe587fa57632cc Author: Thilo Graf Date: 2016-10-23 (Sun, 23 Oct 2016) --- src/gui/widget/hintbox.cpp | 19 +++++++++++-------- src/gui/widget/hintbox.h | 2 ++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index a7e3a7d19..d5f80d796 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -8,7 +8,7 @@ Copyright (C) 2008-2009, 2011, 2013 Stefan Seyfried Implementation of CComponent Window class. - Copyright (C) 2014-2015 Thilo Graf 'dbt' + Copyright (C) 2014-2016 Thilo Graf 'dbt' License: GPL @@ -133,8 +133,10 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string w_indentation = indent; hb_text_mode = text_mode; + hb_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]; + //set required window width and basic height - width = max(HINTBOX_MIN_WIDTH, Width); + width = max(HINTBOX_MIN_WIDTH, max(Width, min(hb_font->getRenderWidth(Text), (int)frameBuffer->getScreenWidth()))); height = max(HINTBOX_MIN_HEIGHT, height); ccw_buttons = header_buttons; @@ -250,9 +252,9 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const dprintf(DEBUG_INFO, "[CHintBox] [%s - %d] add new hint '%s' %s\n", __func__, __LINE__, Text.c_str(), Picon.c_str()); //set required font and line size - Font* font = font_text == NULL ? g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] : font_text; - width = max(width, min(font->getRenderWidth(Text), HINTBOX_MIN_WIDTH)); - int h_line = font->getHeight(); + hb_font = !font_text ? hb_font : font_text; + width = max(width, min(hb_font->getRenderWidth(Text), HINTBOX_MIN_WIDTH)); + int h_line = hb_font->getHeight(); //init side picon object CComponentsPicture *obj_picon = new CComponentsPicture(0, timeout > 0 ? TIMEOUT_BAR_HEIGHT : 0, Picon); @@ -270,14 +272,15 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const h_text_obj, Text, text_mode, - font); + hb_font); //provide the internal textbox object CTextBox *textbox = obj_text->getCTextBoxObject(); int lines_count = textbox->getLines(); - //get required height of text object related to lines count and height of head and footer, if available - int h_required = lines_count * h_line + (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0); + //get required height of text object related to height of current text object, header and footer + int fh_h = (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0) + obj_text->getHeight(); + int h_required = min( max(height,fh_h), (int)frameBuffer->getScreenHeight()) ;//lines_count * h_line + (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0); //set minimal required height height = max(height, min(HINTBOX_MAX_HEIGHT, max(HINTBOX_MIN_HEIGHT, h_required))); diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 49c907e8c..e7a066161 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -57,6 +57,8 @@ class CHintBox : public CComponentsWindow int w_indentation; int hb_text_mode; + Font* hb_font; + ///global count of lines uint lines; From 5716e576507361214fcd568be4a34bdb1d61f0d0 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 23 Oct 2016 22:39:05 +0200 Subject: [PATCH 57/85] CMsgBox: add doc for CMsgBox Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/527e65df77d7779bdf34fef91939d77bca285ec7 Author: Thilo Graf Date: 2016-10-23 (Sun, 23 Oct 2016) --- src/gui/widget/msgbox.h | 192 ++++++++++++++++++++++++++++++++-------- 1 file changed, 156 insertions(+), 36 deletions(-) diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index eda0c941d..3c927f0fa 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -118,7 +118,50 @@ class CMsgBox : public CHintBox void initButtons(); public: - /* Constructor */ + /**CMsgBox Constructor + * @param[in] Text + * @li exepts type const char*, this is the message text inside the window, text is UTF-8 encoded + * @param[in] Title + * @li optional: exepts type const char*, default = NULL, this causes default title "Information" + * @param[in] Icon + * @li optional: exepts type const char*, defines the icon name on the left side of titlebar, default = NULL (non Icon) + * @param[in] Picon + * @li optional: exepts type const char*, defines the picon name on the left side of message text, default = NULL (non Icon) + * @param[in] Width + * @li optional: exepts type int, defines box width, default value = MSGBOX_MIN_WIDTH + * @param[in] Height + * @li optional: exepts type int, defines box width, default value = MSGBOX_MIN_HEIGHT + * @param[in] ShowButtons + * @li optional: exepts type int, defines which buttons are available on screen, default value = mbCancel + * @see setShowedButtons() + * @param[in] Default_result + * @li optional: exepts type int, defines default result value, default value = mbrCancel + * possible values are: + * mbrYes = 0, + * mbrNo = 1, + * mbrCancel = 2, + * mbrBack = 3, + * mbrOk = 4, + * mbrTimeout = 5, + * + * mbrNone = -1 + * @see setDefaultResult(), getResult(); getDefaultResult(), enableDefaultResultOnTimeOut() + * @param[in] text_mode + * @li optional: exepts type int, defines the text modes for embedded text lines + * Possible Modes defined in /gui/widget/textbox.h + * AUTO_WIDTH + * AUTO_HIGH + * SCROLL + * CENTER + * RIGHT + * TOP + * BOTTOM + * NO_AUTO_LINEBREAK + * AUTO_LINEBREAK_NO_BREAKCHARS + * NOTE: default parameter to find in macro DEFAULT_TEXT_MODE + * + * @see class CHintBox() + */ CMsgBox(const char* Text, const char* Title = NULL, const char* Icon = NULL, @@ -129,6 +172,50 @@ class CMsgBox : public CHintBox const msg_result_t& Default_result = mbrCancel, const int& Text_mode = DEFAULT_TEXT_MODE); + /**CMsgBox Constructor + * @param[in] Text + * @li exepts type const char*, this is the message text inside the window, text is UTF-8 encoded + * @param[in] Title + * @li optional: exepts type neutrino_locale_t with locale entry from /system/locals.h default = NONEXISTANT_LOCALE, this causes default title "Information" + * @param[in] Icon + * @li optional: exepts type const char*, defines the icon name on the left side of titlebar, default = NULL (non Icon) + * @param[in] Picon + * @li optional: exepts type const char*, defines the picon name on the left side of message text, default = NULL (non Icon) + * @param[in] Width + * @li optional: exepts type int, defines box width, default value = MSGBOX_MIN_WIDTH + * @param[in] Height + * @li optional: exepts type int, defines box width, default value = MSGBOX_MIN_HEIGHT + * @param[in] ShowButtons + * @li optional: exepts type int, defines which buttons are available on screen, default value = mbCancel + * @see setShowedButtons() + * @param[in] Default_result + * @li optional: exepts type int, defines default result value, default value = mbrCancel + * possible values are: + * mbrYes = 0, + * mbrNo = 1, + * mbrCancel = 2, + * mbrBack = 3, + * mbrOk = 4, + * mbrTimeout = 5, + * + * mbrNone = -1 + * @see setDefaultResult(), getResult(); getDefaultResult(), enableDefaultResultOnTimeOut() + * @param[in] text_mode + * @li optional: exepts type int, defines the text modes for embedded text lines + * Possible Modes defined in /gui/widget/textbox.h + * AUTO_WIDTH + * AUTO_HIGH + * SCROLL + * CENTER + * RIGHT + * TOP + * BOTTOM + * NO_AUTO_LINEBREAK + * AUTO_LINEBREAK_NO_BREAKCHARS + * NOTE: default parameter to find in macro DEFAULT_TEXT_MODE + * + * @see class CHintBox() + */ CMsgBox(const char* Text, const neutrino_locale_t locale_Title = NONEXISTANT_LOCALE, const char* Icon = NULL, @@ -140,54 +227,87 @@ class CMsgBox : public CHintBox const int& Text_mode = DEFAULT_TEXT_MODE); // ~CMsgBox(); //inherited - int exec(); + /** + * exec caller + * @return int + */ + int exec(); - ///returns current result as msg_result_t, result corresponds to the current result value of selected button - msg_result_t getResult(){return result;}; - ///returns current default result as msg_result_t, independently from current selected button result - msg_result_t getDefaultResult(){return default_result;}; - ///sets current default result as msg_result_t, independently from current selected button result + /** + * returns current result as msg_result_t, result corresponds to the current result value of selected button + * @return result as int + */ + + msg_result_t getResult(){return result;} + /** + * returns current default result as msg_result_t, independently from current selected button result + * @return result as int + */ + + msg_result_t getDefaultResult(){return default_result;} + /** + * sets current default result as msg_result_t, independently from current selected button result + * @param[in] Default_result + * @li exepts type msg_result_t + */ void setDefaultResult(const msg_result_t& Default_result){default_result = Default_result;} - /*! - Sets the displayed buttons. - This member allows to set and overrides already defined buttons from constructor, - parameter ''ShowButtons'' accepts given types, find under button_define_t enumeration - mbYes - mbNo - mbCancel - mbBack - mbOk - mbOKCancel - mbYesNoCancel - mbYesNo - mbAll + /** + * Sets the displayed buttons. + * This member allows to set and overrides already defined buttons from constructor, + * parameter ''ShowButtons'' accepts given types, find under button_define_t enumeration + * @param[in] ShowButtons + * @li optional: exepts type int, defines which buttons are available on screen, default value = mbCancel + * possible values are: + * mbYes = 0x01, + * mbNo = 0x02, + * mbCancel = 0x04, + * mbBack = 0x08, + * mbOk = 0x10, + * mbOKCancel = 0x20, + * mbYesNoCancel = 0x40, + * mbYesNo = 0x80, + * mbAll = 0x100, + * NOTE: allign parameters are currently not supported, these values are existing for compatibility only! */ void setShowedButtons(const int& ShowButtons){mb_show_button = ShowButtons; initButtons();} - ///define timeout, timeout is enabled if parmeter 1 > -1, otherwise it will be disabled, + /** + * define timeout, timeout is enabled if parmeter 1 > -1, otherwise it will be disabled, + * @param[in] Timeout + * @li exepts type int + */ void setTimeOut(const int& Timeout){timeout = Timeout;}; - ///enable/disable defined timeout, otherwise it will be ignored, parameter 1: bool default = true + + /** + * enable/disable defined timeout, otherwise it will be ignored + * @param[in] enable + * @li exepts type bool, default = true + */ void enableDefaultResultOnTimeOut(bool enable = true); - /*! - Default defined button text is already predefiend with parameter 'ShowButtons' from constructor. - This member allows to define an alternate text for an already defined button, - 1st parameter ''showed button'' accepts - mbYes - mbNo - mbCancel - mbBack - mbOk - others will be ignored! - 2nd parameter sets the new text for button as std::string. - Result values are not touched! + /** + * Default defined button text is already predefiend with parameter 'ShowButtons' from constructor. + * This member allows to define an alternate text for an already defined button, + * Result values are not touched! + * @param[in] showed_button + * @li exepts type int + * @see setShowedButtons() + * @param[in] text + * @li exepts type std::string, sets the new text for button */ void setButtonText(const int& showed_button, const std::string& text); - ///enables background of buttons, parameter bool show, default= true + /** + * enables background of buttons + * @param[in] enable + * @li exepts type bool, default = true + */ void enableButtonBg(bool enable = true); - ///disables background of buttons + + /** + * disables background of buttons + */ void disableButtonBg(){enableButtonBg(false);} // bool setText(const std::string* newText); From 23a56859aa71dc45848d85413438615804c1a22f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 25 Oct 2016 08:53:23 +0200 Subject: [PATCH 58/85] CHintBox: move showTimeOutBar() to protected, add params to enableTimeOutBar() Explicit call of disableTimeOutBar() after exec() is required to ensure we have no timebar opened objects. I'm not shure, but otherwise crashs could be possible. showTimeOutBar() is required for OnTimer(). It doesn't need any parameter. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/a80b861cb50d4aa56f6f28f8924171f57477be27 Author: Thilo Graf Date: 2016-10-25 (Tue, 25 Oct 2016) --- src/gui/widget/hintbox.cpp | 24 +++++++++++++++--------- src/gui/widget/hintbox.h | 13 +++++++++++-- src/gui/widget/msgbox.cpp | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index d5f80d796..0a0217fca 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -168,17 +168,21 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string CHintBox::~CHintBox() { - if(timeout_pb){ - timeout_pb->kill(); //ensure cleanup from screen - delete timeout_pb; timeout_pb = NULL; - } - if(timeout_pb_timer){ - delete timeout_pb_timer; timeout_pb_timer = NULL; - } + disableTimeOutBar(); } -void CHintBox::showTimeOutBar() +void CHintBox::enableTimeOutBar(bool enable) { + if(!enable){ + if(timeout_pb_timer){ + delete timeout_pb_timer; timeout_pb_timer = NULL; + } + if(timeout_pb){ + delete timeout_pb; timeout_pb = NULL; + } + return; + } + if(timeout_pb){ timeout_pb->paint0(); timeout_pb->setValues(timeout_pb->getValue()+1, 100*timeout); @@ -201,7 +205,7 @@ int CHintBox::exec() uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); if (timeout > 0) - showTimeOutBar(); + enableTimeOutBar(); while ( ! ( res & ( messages_return::cancel_info | messages_return::cancel_all ) ) ) { @@ -244,6 +248,8 @@ int CHintBox::exec() } } } + + disableTimeOutBar(); return res; } diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index e7a066161..3f5a35724 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -84,6 +84,7 @@ class CHintBox : public CComponentsWindow const int& indent); virtual void ReSize(); + void showTimeOutBar(){enableTimeOutBar();} public: /**CHintBox Constructor @@ -186,9 +187,17 @@ class CHintBox : public CComponentsWindow virtual void setTimeOut(const int& Timeout){timeout = Timeout;} /** - * enable visualized timeout as progressbar under titelbar + * enable/disable visualized timeout as progressbar under titlebar + * @param[in] enable + * @li optional: exepts type bool, default = true */ - void showTimeOutBar(); + void enableTimeOutBar(bool enable = true); + + /** + * disable visualized timeout as progressbar + * @see enableTimeOutBar + */ + void disableTimeOutBar(){enableTimeOutBar(false);} /** * scroll handler for text objects: NOTE: exec() must be called ! diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index dfe855cad..0c08d924c 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -223,7 +223,7 @@ int CMsgBox::exec() uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); if (timeout > 0) - showTimeOutBar(); + enableTimeOutBar(); bool loop = true; while (loop) From 1b71ff63e9ce42be62982a23b63508f1f8d9b254 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 26 Oct 2016 07:46:41 +0200 Subject: [PATCH 59/85] CMsgBox: add missing disableTimeOutBar() addendum to CHintBox: move showTimeOutBar() to protected, add params to enableTimeOutBar() Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3a6f9e5ffa69171fc7afa70e7452df220016d51e Author: Thilo Graf Date: 2016-10-26 (Wed, 26 Oct 2016) --- src/gui/widget/msgbox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 0c08d924c..7ed4f207c 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -304,6 +304,7 @@ int CMsgBox::exec() } } + disableTimeOutBar(); return res; } From 87b0dfa6dfb0318ce3ac93a8b2631522f61b7ef1 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 26 Oct 2016 09:18:29 +0200 Subject: [PATCH 60/85] CNeutrinoApp: add missing hide() Hintbox was not removed from scrren after paint. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/ca97793ef0e5e3089654aaa68894255c73289ae3 Author: Thilo Graf Date: 2016-10-26 (Wed, 26 Oct 2016) --- src/neutrino.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 6ac3c30cf..f295fde90 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2681,8 +2681,8 @@ _repeat: } if (channels_changed || favorites_changed || bouquets_changed || channels_init) { neutrino_locale_t loc = channels_init ? LOCALE_SERVICEMENU_RELOAD_HINT : LOCALE_BOUQUETEDITOR_SAVINGCHANGES; - CHintBox* hintBox= new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(loc)); - hintBox->paint(); + CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(loc)); + hintBox.paint(); if (favorites_changed) { g_bouquetManager->saveUBouquets(); @@ -2710,7 +2710,7 @@ _repeat: if(!live_channel_id) live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); adjustToChannelID(live_channel_id);//FIXME what if deleted ? - delete hintBox; + hintBox.hide(); } if (g_settings.easymenu) { CBouquetList * blist = (mode == mode_radio) ? RADIOfavList : TVfavList; From e216fc68241bbcf7c1f665f08acb67b3f9900938 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 26 Oct 2016 10:23:40 +0200 Subject: [PATCH 61/85] Includes: remove unused includes Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/e19536fe9933afc9c3c5084012698d1819c50a83 Author: Thilo Graf Date: 2016-10-26 (Wed, 26 Oct 2016) --- src/gui/cam_menu.cpp | 2 +- src/gui/followscreenings.cpp | 2 +- src/gui/lua/luainstance.cpp | 2 +- src/gui/plugins.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/cam_menu.cpp b/src/gui/cam_menu.cpp index da9c5723a..28c195ee5 100644 --- a/src/gui/cam_menu.cpp +++ b/src/gui/cam_menu.cpp @@ -41,7 +41,7 @@ #include #include "widget/icons.h" #include "widget/stringinput.h" -#include "widget/messagebox.h" + #include "widget/progresswindow.h" #include diff --git a/src/gui/followscreenings.cpp b/src/gui/followscreenings.cpp index f8a63edf0..eb77e989c 100644 --- a/src/gui/followscreenings.cpp +++ b/src/gui/followscreenings.cpp @@ -42,7 +42,7 @@ #include #include #include -#include + #include #include diff --git a/src/gui/lua/luainstance.cpp b/src/gui/lua/luainstance.cpp index e7e0b80bc..ea7eb8bb3 100644 --- a/src/gui/lua/luainstance.cpp +++ b/src/gui/lua/luainstance.cpp @@ -30,7 +30,7 @@ #include #include #include -#include + #include #include #include diff --git a/src/gui/plugins.cpp b/src/gui/plugins.cpp index 1a8bb2fee..9f0b5f29e 100644 --- a/src/gui/plugins.cpp +++ b/src/gui/plugins.cpp @@ -58,7 +58,7 @@ #include #include "widget/shellwindow.h" -#include "widget/messagebox.h" + #include #include #include From faa780b9bcd0ac17bb5792c773e0c5db9586de3f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 26 Oct 2016 10:24:24 +0200 Subject: [PATCH 62/85] Clean up: remove unused files Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/d2038a499e1380834d5d3b15c34394a557bd5064 Author: Thilo Graf Date: 2016-10-26 (Wed, 26 Oct 2016) --- src/gui/widget/hintboxext.cpp | 378 ---------------------------------- src/gui/widget/hintboxext.h | 90 -------- src/gui/widget/messagebox.cpp | 349 ------------------------------- src/gui/widget/messagebox.h | 119 ----------- 4 files changed, 936 deletions(-) delete mode 100644 src/gui/widget/hintboxext.cpp delete mode 100644 src/gui/widget/hintboxext.h delete mode 100644 src/gui/widget/messagebox.cpp delete mode 100644 src/gui/widget/messagebox.h diff --git a/src/gui/widget/hintboxext.cpp b/src/gui/widget/hintboxext.cpp deleted file mode 100644 index ea89a0f1b..000000000 --- a/src/gui/widget/hintboxext.cpp +++ /dev/null @@ -1,378 +0,0 @@ -/* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - - 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. -*/ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include - -#include - -CHintBoxExt::CHintBoxExt(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon) -{ - m_message = strdup(Text); - - char *begin = strtok(m_message, "\n"); - while (begin != NULL) - { - std::vector oneLine; - std::string s(begin); - DText *d = new DText(s); - oneLine.push_back(d); - m_lines.push_back(oneLine); - begin = strtok(NULL, "\n"); - } - m_bbheight = 0; - init(Caption, "", Width, Icon); -} - -CHintBoxExt::CHintBoxExt(const std::string &CaptionString, const char * const Text, const int Width, const char * const Icon) -{ - m_message = strdup(Text); - - char *begin = strtok(m_message, "\n"); - while (begin != NULL) - { - std::vector oneLine; - std::string s(begin); - DText *d = new DText(s); - oneLine.push_back(d); - m_lines.push_back(oneLine); - begin = strtok(NULL, "\n"); - } - m_bbheight = 0; - init(NONEXISTANT_LOCALE, CaptionString, Width, Icon); -} - -CHintBoxExt::CHintBoxExt(const neutrino_locale_t Caption, ContentLines& lines, const int Width, const char * const Icon) -{ - m_message = NULL; - m_lines = lines; - m_bbheight = 0; - init(Caption, "", Width, Icon); -} - -CHintBoxExt::CHintBoxExt(const std::string &CaptionString, ContentLines& lines, const int Width, const char * const Icon) -{ - m_message = NULL; - m_lines = lines; - m_bbheight = 0; - init(NONEXISTANT_LOCALE, CaptionString, Width, Icon); -} - -CHintBoxExt::~CHintBoxExt(void) -{ - if (m_window != NULL) - { - delete m_window; - m_window = NULL; - } - if (m_message != NULL) { - free(m_message); - - // content has been set using "m_message" so we are responsible to - // delete it - for (ContentLines::iterator it = m_lines.begin(); - it != m_lines.end(); ++it) - { - for (std::vector::iterator it2 = it->begin(); - it2 != it->end(); ++it2) - { - //(*it2)->print(); - delete *it2; - } - } - } -} - -void CHintBoxExt::init(const neutrino_locale_t Caption, const std::string &CaptionString, const int Width, const char * const Icon) -{ - m_width = Width; - int nw = 0; - m_theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); - m_fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); - m_height = m_theight + m_fheight; - m_maxEntriesPerPage = 0; - int maxLineWidth = 0; - int scrollWidth = 0; - textStartX = 0; - bgPainted = false; - - m_caption = Caption; - m_captionString = CaptionString; - - int page = 0; - int line = 0; - int maxWidth = m_width > 0 ? m_width : 0; - int maxOverallHeight = 0; - int screenheight = CFrameBuffer::getInstance()->getScreenHeight() * 9 / 10 - m_bbheight; - m_startEntryOfPage.clear(); - m_startEntryOfPage.push_back(0); - for (ContentLines::iterator it = m_lines.begin(); it!=m_lines.end(); ++it) - { - bool pagebreak = false; - int maxHeight = 0; - int lineWidth = 0; - for (std::vector::iterator item = it->begin(); - item != it->end(); ++item) { - if ((*item)->getHeight() > maxHeight) - maxHeight = (*item)->getHeight(); - lineWidth += (*item)->getWidth(); - if ((*item)->getType() == Drawable::DTYPE_PAGEBREAK) - pagebreak = true; - } - maxLineWidth = std::max(maxLineWidth, lineWidth); - if (lineWidth > maxWidth) - maxWidth = lineWidth; - m_height += maxHeight; - if (m_height > screenheight || pagebreak) { - if (m_height-maxHeight > maxOverallHeight) - maxOverallHeight = m_height - maxHeight; - m_height = m_theight + m_fheight + maxHeight; - if (pagebreak) - m_startEntryOfPage.push_back(line+1); - else - m_startEntryOfPage.push_back(line); - page++; - if (m_maxEntriesPerPage < (m_startEntryOfPage[page] - m_startEntryOfPage[page-1])) - { - m_maxEntriesPerPage = m_startEntryOfPage[page] - m_startEntryOfPage[page-1]; - } - } - else { - if (m_height > maxOverallHeight) - maxOverallHeight = m_height; - m_maxEntriesPerPage = maxOverallHeight / m_fheight; - } - line++; - } - - // if there is only one page m_height is already correct - // but m_maxEntries has not been set - if (m_startEntryOfPage.size() > 1) - { - m_height = maxOverallHeight; - } else { - m_maxEntriesPerPage = line; - } - - m_startEntryOfPage.push_back(line+1); // needed to calculate amount of items on last page - -// for (std::vector::iterator it=m_startEntryOfPage.begin(); -// it!=m_startEntryOfPage.end();it++) -// printf("startentryofpage: %d\n",*it); -// printf("pages: %d, startEntryVec: %d\n",page+1,m_startEntryOfPage.size()-1); -// printf("maxEntries: %d\n", m_maxEntriesPerPage); - - m_width = w_max(maxWidth,OFFSET_SHADOW); - m_currentPage = 0; - m_pages = page + 1; - unsigned int additional_width; - - if (has_scrollbar()) - scrollWidth = 15; - else - scrollWidth = 0; - additional_width = 30 + scrollWidth; - m_width += additional_width; - - if (Icon != NULL) - { - m_iconfile = Icon; - additional_width += 30; - } - else - m_iconfile = ""; - - const char *l_caption = (m_caption == NONEXISTANT_LOCALE) ? m_captionString.c_str() : g_Locale->getText(m_caption); - nw = additional_width + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(l_caption); - - if (nw > m_width) - m_width = nw; - - /* if the output does not fit, make sure we at least - * stay inside the screen... */ - m_width = w_max(m_width ,OFFSET_SHADOW); - if (maxLineWidth + scrollWidth > m_width) - maxLineWidth = m_width - scrollWidth; - - textStartX = (m_width - scrollWidth - maxLineWidth) / 2; - - m_window = NULL; -} - -void CHintBoxExt::paint(bool toround) -{ - if (m_window != NULL) - { - /* - * do not paint stuff twice: - * => thread safety needed by movieplayer.cpp: - * one thread calls our paint method, the other one our hide method - * => no memory leaks - */ - return; - } - - bgPainted = false; - m_window = new CFBWindow(getScreenStartX(m_width + OFFSET_SHADOW), - getScreenStartY(m_height + OFFSET_SHADOW), - m_width + OFFSET_SHADOW, - m_height + OFFSET_SHADOW); - - refresh(toround); -} - -void CHintBoxExt::refresh(bool toround) -{ - if (m_window == NULL) - { - return; - } - - if (!bgPainted) { - // bottom, right shadow - m_window->paintBoxRel(OFFSET_SHADOW, OFFSET_SHADOW, m_width, m_height, COL_SHADOW_PLUS_0, RADIUS_LARGE, toround ? CORNER_ALL : CORNER_BOTTOM | CORNER_TOP_RIGHT); - bgPainted = true; - } - - std::string title_text = (m_caption == NONEXISTANT_LOCALE) ? m_captionString : g_Locale->getText(m_caption); - CComponentsHeader header(m_window->x, m_window->y, m_width, m_theight, title_text, m_iconfile); - header.paint(CC_SAVE_SCREEN_NO); -#if 0 - // title bar - m_window->paintBoxRel(0, 0, m_width, m_theight, (CFBWindow::color_t)COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round - - // icon - int x_offset = 6, icon_space = x_offset, x_text; - const char *title_text = (m_caption == NONEXISTANT_LOCALE) ? m_captionString.c_str() : g_Locale->getText(m_caption); - - if (!m_iconfile.empty()) - { - int w, h; - CFrameBuffer::getInstance()->getIconSize(m_iconfile.c_str(), &w, &h); - icon_space = w + 2*x_offset; - int y_icon = 0+ (m_theight >> 1) - (h >> 1); - m_window->paintIcon(m_iconfile.c_str(), x_offset, y_icon); - x_text = icon_space; - } - else - x_text = x_offset; - - // title text - m_window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], x_text, m_theight, m_width, title_text, COL_MENUHEAD_TEXT); -#endif - // background of text panel - m_window->paintBoxRel(0, m_theight, m_width, (m_maxEntriesPerPage + 1) * m_fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0, toround ? RADIUS_LARGE : 0, CORNER_BOTTOM);//round - - int yPos = m_theight + (m_fheight >> 1); - -// for(std::vector::iterator it = m_startEntryOfPage.begin(); -// it != m_startEntryOfPage.end();it++) { -// printf(" %d",*it); -// } -// printf("\n current page: %d lines %d ",m_currentPage, m_lines.size()); -// printf("start %d bis %d\n",m_startEntryOfPage[m_currentPage],m_startEntryOfPage[m_currentPage+1]-1); - -#if 0 - for (ContentLines::iterator it = m_lines.begin() + m_startEntryOfPage[m_currentPage]; - it != m_lines.begin() + m_startEntryOfPage[m_currentPage+1] - && it != m_lines.end(); ++it) -#endif - for (int count = 0; count < (int) m_lines.size(); count++) - { - if ((count >= m_startEntryOfPage[m_currentPage]) && - (count < m_startEntryOfPage[m_currentPage+1])) - { - int xPos = textStartX; - int maxHeight = 0; - for (std::vector::iterator d = m_lines[count].begin(); d != m_lines[count].end(); ++d) - { - // (*d)->print(); - // printf("\n"); - //(*d)->draw(m_window,xPos,yPos,m_width); - (*d)->draw(m_window,xPos,yPos,m_width-20); - xPos += (*d)->getWidth() + 20; - if ((*d)->getHeight() > maxHeight) - maxHeight = (*d)->getHeight(); - } - yPos += maxHeight; - } - } - - if (has_scrollbar()) - { -// yPos = m_theight + (m_fheight >> 1); - yPos = m_theight; - m_window->paintBoxRel(m_width - 15, yPos, 15, m_maxEntriesPerPage * m_fheight, COL_SCROLLBAR_PASSIVE_PLUS_0); - unsigned int marker_size = (m_maxEntriesPerPage * m_fheight) / m_pages; - m_window->paintBoxRel(m_width - 13, yPos + m_currentPage * marker_size, 11, marker_size, COL_SCROLLBAR_ACTIVE_PLUS_0); - } -} - -bool CHintBoxExt::has_scrollbar(void) -{ - return (m_startEntryOfPage.size() > 2); -} - -void CHintBoxExt::scroll_up(void) -{ - if (m_currentPage > 0) - { - m_currentPage--; - refresh(); - } -} - -void CHintBoxExt::scroll_down(void) -{ - if (m_currentPage +1 < m_startEntryOfPage.size()-1) - { - m_currentPage++; - refresh(); - } -} - -void CHintBoxExt::hide(void) -{ - if (m_window != NULL) - { - delete m_window; - m_window = NULL; - } -} diff --git a/src/gui/widget/hintboxext.h b/src/gui/widget/hintboxext.h deleted file mode 100644 index 445c2aaeb..000000000 --- a/src/gui/widget/hintboxext.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - - 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. -*/ - - -#ifndef __hintboxext__ -#define __hintboxext__ - -#include -#include - -#include -#include - -#include -#include - -class CHintBoxExt -{ - protected: - - CFBWindow * m_window; - - unsigned int m_currentPage; - std::vector m_startEntryOfPage; - int m_maxEntriesPerPage; - int m_pages; - - int m_width; - int m_height; - int m_bbheight; /* a button bar at the bottom? */ - int textStartX; - - int m_fheight; - int m_theight; - neutrino_locale_t m_caption; - std::string m_captionString; - char * m_message; - ContentLines m_lines; - std::string m_iconfile; - bool bgPainted; - - void refresh(bool toround = 1); - - public: - CHintBoxExt(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon); - CHintBoxExt(const neutrino_locale_t Caption, ContentLines& lines, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - CHintBoxExt(const std::string &Caption, const char * const Text, const int Width, const char * const Icon); - CHintBoxExt(const std::string &Caption, ContentLines& lines, const int Width = 450, const char * const Icon = NEUTRINO_ICON_INFO); - - ~CHintBoxExt(void); - - void init(const neutrino_locale_t Caption, const std::string &CaptionString, const int Width, const char * const Icon); - - bool has_scrollbar(void); - void scroll_up(void); - void scroll_down(void); - - void paint(bool toround = 1); - void hide(void); -}; - -#endif diff --git a/src/gui/widget/messagebox.cpp b/src/gui/widget/messagebox.cpp deleted file mode 100644 index ea416384c..000000000 --- a/src/gui/widget/messagebox.cpp +++ /dev/null @@ -1,349 +0,0 @@ -/* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - - 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. -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include - -CMessageBox::CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Text, Width, Icon) -{ - Init(Default, ShowButtons); -} - -CMessageBox::CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Lines, Width, Icon) -{ - Init(Default, ShowButtons); -} - -CMessageBox::CMessageBox(const std::string &Caption, const char * const Text, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Text, Width, Icon) -{ - Init(Default, ShowButtons); -} - -CMessageBox::CMessageBox(const std::string &Caption, ContentLines& Lines, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Lines, Width, Icon) -{ - Init(Default, ShowButtons); -} - -void CMessageBox::Init(const CMessageBox::result_ &Default, const uint32_t ShowButtons) -{ -#define BtnCount 3 - returnDefaultOnTimeout = false; - ButtonSpacing = 15; - int w = 0, h = 0, ih = 0; - i_maxw = 0; - std::string Btns[BtnCount] = {NEUTRINO_ICON_BUTTON_RED, NEUTRINO_ICON_BUTTON_GREEN, NEUTRINO_ICON_BUTTON_HOME}; - for (int i = 0; i < BtnCount; i++) { - CFrameBuffer::getInstance()->getIconSize(Btns[i].c_str(), &w, &h); - ih = std::max(h, ih); - i_maxw = std::max(w, i_maxw); - } - fh = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getHeight(); - b_height = std::max(fh, ih) + 8 + (RADIUS_MID / 2); - m_bbheight = b_height + fh/2 + ButtonSpacing + OFFSET_SHADOW; - result = Default; - b_width = getButtonWidth(); - if (ShowButtons & CMessageBox::mbBtnAlignCenter1) - mbBtnAlign = CMessageBox::mbBtnAlignCenter1; // centered, large distances - else if (ShowButtons & CMessageBox::mbBtnAlignCenter2) - mbBtnAlign = CMessageBox::mbBtnAlignCenter2; // centered, small distances - else if (ShowButtons & CMessageBox::mbBtnAlignLeft) - mbBtnAlign = CMessageBox::mbBtnAlignLeft; - else if (ShowButtons & CMessageBox::mbBtnAlignRight) - mbBtnAlign = CMessageBox::mbBtnAlignRight; - else - mbBtnAlign = CMessageBox::mbBtnAlignCenter1; // or g_settings.mbBtnAlign? ;-) - showbuttons = ShowButtons & 0xFF; - - ButtonCount = 0; - if (showbuttons & mbYes) { - Buttons[ButtonCount].icon = NEUTRINO_ICON_BUTTON_RED; - Buttons[ButtonCount].text = g_Locale->getText(LOCALE_MESSAGEBOX_YES); - ButtonCount++; - } - if (showbuttons & mbNo) { - Buttons[ButtonCount].icon = NEUTRINO_ICON_BUTTON_GREEN; - Buttons[ButtonCount].text = g_Locale->getText(LOCALE_MESSAGEBOX_NO); - ButtonCount++; - } - if (showbuttons & (mbCancel | mbBack | mbOk)) { - Buttons[ButtonCount].icon = NEUTRINO_ICON_BUTTON_HOME; - Buttons[ButtonCount].text = g_Locale->getText((showbuttons & mbCancel) ? LOCALE_MESSAGEBOX_CANCEL : (showbuttons & mbOk) ? LOCALE_MESSAGEBOX_OK : LOCALE_MESSAGEBOX_BACK); - ButtonCount++; - } - - ButtonDistance = ButtonSpacing; - bb_width = b_width * ButtonCount + ButtonDistance * (ButtonCount - 1); - if(bb_width > m_width) - m_width = bb_width; /* FIXME: what if bigger than screen area? */ - else - if (mbBtnAlign == CMessageBox::mbBtnAlignCenter1) - ButtonDistance = (m_width - b_width * ButtonCount) / (ButtonCount + 1); - - /* this is ugly: re-init (CHintBoxExt) to recalculate the number of lines and pages */ - init(m_caption, m_captionString, m_width, m_iconfile.empty() ? NULL : m_iconfile.c_str()); - m_height += m_bbheight; -} - -void CMessageBox::returnDefaultValueOnTimeout(bool returnDefault) -{ - returnDefaultOnTimeout = returnDefault; -} - -int CMessageBox::getButtonWidth() -{ -#define localeMsgCount 5 - neutrino_locale_t localeMsg[localeMsgCount] = {LOCALE_MESSAGEBOX_YES, LOCALE_MESSAGEBOX_NO, LOCALE_MESSAGEBOX_CANCEL, LOCALE_MESSAGEBOX_OK, LOCALE_MESSAGEBOX_BACK}; - int MaxButtonTextWidth = 0; - for (int i = 0; i < localeMsgCount; i++) - MaxButtonTextWidth = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT]->getRenderWidth(g_Locale->getText(localeMsg[i])), MaxButtonTextWidth); - return MaxButtonTextWidth + i_maxw + 36 + (RADIUS_LARGE / 2); -} - -void CMessageBox::paintButtons() -{ - fb_pixel_t color; - fb_pixel_t bgcolor; - int iw, ih, i; - - int xpos = (m_width - bb_width) / 2; - if (mbBtnAlign == CMessageBox::mbBtnAlignCenter1) - xpos = ButtonDistance; - else if (mbBtnAlign == CMessageBox::mbBtnAlignCenter2) - xpos = (m_width - bb_width) / 2; - else if (mbBtnAlign == CMessageBox::mbBtnAlignLeft) - xpos = ButtonSpacing; - else if (mbBtnAlign == CMessageBox::mbBtnAlignRight) - xpos = m_width - bb_width - ButtonSpacing; - - int ypos = (m_height - m_bbheight) + fh/2; - - m_window->paintBoxRel(0, m_height - m_bbheight, m_width, m_bbheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); - - i = 0; - if (showbuttons & mbYes) { - Buttons[i].def = (result == mbrYes) ? true : false; - i++; - } - if (showbuttons & mbNo) { - Buttons[i].def = (result == mbrNo) ? true : false; - i++; - } - if (showbuttons & (mbCancel | mbBack | mbOk)) - Buttons[i].def = (result >= mbrCancel) ? true : false; - - for (i = 0; i < ButtonCount; i++) { - if (Buttons[i].def) { - color = COL_MENUCONTENTSELECTED_TEXT; - bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - } else { - color = COL_MENUCONTENTINACTIVE_TEXT; - bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; - } - CFrameBuffer::getInstance()->getIconSize(Buttons[i].icon, &iw, &ih); - m_window->paintBoxRel(xpos + OFFSET_SHADOW, ypos + OFFSET_SHADOW, b_width, b_height, COL_SHADOW_PLUS_0, RADIUS_MID); - m_window->paintBoxRel(xpos, ypos, b_width, b_height, (CFBWindow::color_t)bgcolor, RADIUS_MID); - m_window->paintBoxFrame(xpos, ypos, b_width, b_height, 1, COL_SHADOW_PLUS_0, RADIUS_MID); - m_window->paintIcon(Buttons[i].icon, xpos + ((b_height - ih) / 2), ypos + ((b_height - ih) / 2), ih); - m_window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_FOOT], xpos + iw + 17, ypos + fh + ((b_height - fh) / 2), - b_width - (iw + 21), Buttons[i].text, (CFBWindow::color_t)color); - xpos += b_width + ButtonDistance; - } -} - -int CMessageBox::exec(int timeout) -{ - neutrino_msg_t msg; - neutrino_msg_data_t data; - - int res = menu_return::RETURN_REPAINT; - - CHintBoxExt::paint(0); - - if (m_window == NULL) - { - return res; /* out of memory */ - } - - paintButtons(); - - if ( timeout == -1 ) - timeout = g_settings.timing[SNeutrinoSettings::TIMING_EPG]; - - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); - - bool loop=true; - while (loop) - { - g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); - if (msg == CRCInput::RC_timeout && returnDefaultOnTimeout) - { - // return default - loop = false; - } - else if (((msg == CRCInput::RC_timeout) || - (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) && - (showbuttons & (mbCancel | mbBack | mbOk))) - { - result = (showbuttons & mbCancel) ? mbrCancel : (showbuttons & mbOk) ? mbrOk: mbrBack; - loop = false; - } - else if ((msg == CRCInput::RC_green) && (showbuttons & mbNo)) - { - result = mbrNo; - loop = false; - } - else if ((msg == CRCInput::RC_red) && (showbuttons & mbYes)) - { - result = mbrYes; - loop = false; - } - else if(msg==CRCInput::RC_right && ButtonCount > 1) - { - bool ok = false; - while (!ok) - { - result = (CMessageBox::result_)((result + 1) & 3); - ok = showbuttons & (1 << result); - } - - paintButtons(); - } - else if (has_scrollbar() && ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down))) - { - if (msg == CRCInput::RC_up) - { - scroll_up(); - paintButtons(); - } - else - { - scroll_down(); - paintButtons(); - } - } - else if(msg==CRCInput::RC_left && ButtonCount > 1) - { - bool ok = false; - while (!ok) - { - result = (CMessageBox::result_)((result - 1) & 3); - ok = showbuttons & (1 << result); - } - - paintButtons(); - - } - else if(msg == CRCInput::RC_ok) - { - loop = false; - } - else if (CNeutrinoApp::getInstance()->listModeKey(msg) || (msg == CRCInput::RC_spkr)) - { - // do nothing - } - else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) - { - res = menu_return::RETURN_EXIT_ALL; - loop = false; - } - - } - - hide(); - - return res; -} - -int ShowMsg(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - std::string tmpText = "msg error"; - if(Text) - tmpText = Text; - CMessageBox* messageBox = new CMessageBox(Caption, tmpText.c_str(), Width, Icon, Default, ShowButtons); - messageBox->returnDefaultValueOnTimeout(returnDefaultOnTimeout); - messageBox->exec(timeout); - int res = messageBox->result; - delete messageBox; - - return res; -} - -int ShowMsg(const std::string &Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - std::string tmpText = "msg error"; - if(Text) - tmpText = Text; - CMessageBox* messageBox = new CMessageBox(Caption, tmpText.c_str(), Width, Icon, Default, ShowButtons); - messageBox->returnDefaultValueOnTimeout(returnDefaultOnTimeout); - messageBox->exec(timeout); - int res = messageBox->result; - delete messageBox; - - return res; -} - -int ShowMsg(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - return ShowMsg(Caption, g_Locale->getText(Text), Default, ShowButtons, Icon, Width, timeout, returnDefaultOnTimeout); -} - -int ShowMsg(const std::string &Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - return ShowMsg(Caption, g_Locale->getText(Text), Default, ShowButtons, Icon, Width, timeout, returnDefaultOnTimeout); -} - -int ShowMsg(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - return ShowMsg(Caption, Text.c_str(), Default, ShowButtons, Icon, Width, timeout,returnDefaultOnTimeout); -} - -int ShowMsg(const std::string &Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) -{ - return ShowMsg(Caption, Text.c_str(), Default, ShowButtons, Icon, Width, timeout,returnDefaultOnTimeout); -} - -// void DisplayErrorMessage(const char * const ErrorMsg) -// { -// ShowMsg(LOCALE_MESSAGEBOX_ERROR, ErrorMsg, CMessageBox::mbrCancel, CMessageBox::mbCancel, NEUTRINO_ICON_ERROR); -// } -// -// void DisplayInfoMessage(const char * const ErrorMsg) -// { -// ShowMsg(LOCALE_MESSAGEBOX_INFO, ErrorMsg, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); -// } diff --git a/src/gui/widget/messagebox.h b/src/gui/widget/messagebox.h deleted file mode 100644 index 8604efe76..000000000 --- a/src/gui/widget/messagebox.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - Neutrino-GUI - DBoxII-Project - - Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - - 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. -*/ - - -#ifndef __messagebox__ -#define __messagebox__ - -#include - -#include -#include - -#define MaxButtons 3 - -class CMessageBox : public CHintBoxExt -{ - private: - struct mbButtons - { - bool def; - const char* icon; - const char* text; - }; - struct mbButtons Buttons[MaxButtons]; - - int showbuttons; - bool returnDefaultOnTimeout; - int mbBtnAlign; - int ButtonSpacing, ButtonDistance; - int fh, i_maxw; - int b_height, b_width, bb_width; - int ButtonCount; - - void paintButtons(); - int getButtonWidth(); - - public: - enum result_ - { - mbrYes = 0, - mbrNo = 1, - mbrCancel = 2, - mbrBack = 3, - mbrOk = 4 - } result; - - enum buttons_ - { - mbYes = 0x01, - mbNo = 0x02, - mbCancel = 0x04, - mbAll = 0x07, - mbBack = 0x08, - mbOk = 0x10, - mbBtnAlignCenter1 = 0x0100, /* centered, large distances */ - mbBtnAlignCenter2 = 0x0200, /* centered, small distances */ - mbBtnAlignLeft = 0x0400, - mbBtnAlignRight = 0x0800 - } buttons; - - // Text & Caption are always UTF-8 encoded - CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); - CMessageBox(const std::string &Caption, const char * const Text, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); - CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); - CMessageBox(const std::string &Caption, ContentLines& Lines, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); - - int exec(int timeout = -1); - void returnDefaultValueOnTimeout(bool returnDefault); - - private: - void Init(const CMessageBox::result_ &Default, const uint32_t ShowButtons); -}; - -// Text is always UTF-8 encoded -int ShowMsg(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsg(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsg(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsg(const std::string &Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsg(const std::string &Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsg(const std::string &Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 - -#if 0 -void DisplayErrorMessage(const char * const ErrorMsg); // UTF-8 -void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t Caption); // UTF-8 -void DisplayErrorMessage(const char * const ErrorMsg, const std::string &Caption); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t Caption); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg, const std::string &Caption); // UTF-8 -#endif - -#endif From b07cc5fa9655fb63efd84263230013c066c24bec Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 27 Oct 2016 12:08:32 +0200 Subject: [PATCH 63/85] CMsgBox: add option for No Yes button arrangement Useful if order of red and green buttons must be changed. Return values are untouched. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/f1e4723964daa476a99024485c2725ac38b2341e Author: Thilo Graf Date: 2016-10-27 (Thu, 27 Oct 2016) --- src/gui/widget/msgbox.cpp | 16 ++++++++++++++++ src/gui/widget/msgbox.h | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 7ed4f207c..369be51bf 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -179,6 +179,22 @@ void CMsgBox::initButtons() btn.btn_alias = mbBack; v_buttons.push_back(btn); } + if (mb_show_button & mbNoYes){ + btn.button = NEUTRINO_ICON_BUTTON_GREEN; + btn.text = BTN_TEXT(mbNo); + btn.directKey = CRCInput::RC_green; + btn.directKeyAlt = CRCInput::RC_home; + btn.btn_result = mbrNo; + btn.btn_alias = mbNo; + v_buttons.push_back(btn); + btn.button = NEUTRINO_ICON_BUTTON_RED; + btn.text = BTN_TEXT(mbYes); + btn.directKey = CRCInput::RC_red; + btn.directKeyAlt = CRCInput::RC_ok; + btn.btn_result = mbrYes; + btn.btn_alias = mbYes; + v_buttons.push_back(btn); + } ccw_footer->setButtonLabels(v_buttons, 0, 125); ccw_footer->getButtonChainObject()->setColorBody(col_body); diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index 3c927f0fa..653aa1fed 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -74,7 +74,8 @@ class CMsgBox : public CHintBox mbOKCancel = 0x20, mbYesNoCancel = 0x40, mbYesNo = 0x80, - mbAll = 0x100, + mbNoYes = 0x100, + mbAll = 0x200, //unused allign stuff, only for compatibility mbBtnAlignCenter1 = 0x0400, /* centered, large distances */ mbBtnAlignCenter2 = 0x0800, /* centered, small distances */ @@ -267,7 +268,8 @@ class CMsgBox : public CHintBox * mbOKCancel = 0x20, * mbYesNoCancel = 0x40, * mbYesNo = 0x80, - * mbAll = 0x100, + * mbNoYes = 0x100, + * mbAll = 0x200, * NOTE: allign parameters are currently not supported, these values are existing for compatibility only! */ void setShowedButtons(const int& ShowButtons){mb_show_button = ShowButtons; initButtons();} From e46fc182dd0f97073826d16b887e5ce8d9d918d9 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 27 Oct 2016 12:15:23 +0200 Subject: [PATCH 64/85] CMsgBox: apply order of color buttons like on remote control Ensures unified conventions over gui. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/f2b781dd6dda84d64624f981fa56f92ef37438aa Author: Thilo Graf Date: 2016-10-27 (Thu, 27 Oct 2016) --- src/gui/widget/msgbox.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 369be51bf..b9fc55d94 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -143,15 +143,6 @@ void CMsgBox::initButtons() btn.btn_alias = mbOk; v_buttons.push_back(btn); } - if (mb_show_button & mbYes){ - btn.button = NEUTRINO_ICON_BUTTON_GREEN; - btn.text = BTN_TEXT(mbYes); - btn.directKey = CRCInput::RC_green; - btn.directKeyAlt = CRCInput::RC_ok; - btn.btn_result = mbrYes; - btn.btn_alias = mbYes; - v_buttons.push_back(btn); - } if (mb_show_button & mbNo){ btn.button = NEUTRINO_ICON_BUTTON_RED; btn.text = BTN_TEXT(mbNo); @@ -161,6 +152,15 @@ void CMsgBox::initButtons() btn.btn_alias = mbNo; v_buttons.push_back(btn); } + if (mb_show_button & mbYes){ + btn.button = NEUTRINO_ICON_BUTTON_GREEN; + btn.text = BTN_TEXT(mbYes); + btn.directKey = CRCInput::RC_green; + btn.directKeyAlt = CRCInput::RC_ok; + btn.btn_result = mbrYes; + btn.btn_alias = mbYes; + v_buttons.push_back(btn); + } if (mb_show_button & mbCancel){ btn.button = NEUTRINO_ICON_BUTTON_HOME; btn.text = BTN_TEXT(mbCancel); @@ -180,13 +180,6 @@ void CMsgBox::initButtons() v_buttons.push_back(btn); } if (mb_show_button & mbNoYes){ - btn.button = NEUTRINO_ICON_BUTTON_GREEN; - btn.text = BTN_TEXT(mbNo); - btn.directKey = CRCInput::RC_green; - btn.directKeyAlt = CRCInput::RC_home; - btn.btn_result = mbrNo; - btn.btn_alias = mbNo; - v_buttons.push_back(btn); btn.button = NEUTRINO_ICON_BUTTON_RED; btn.text = BTN_TEXT(mbYes); btn.directKey = CRCInput::RC_red; @@ -194,6 +187,13 @@ void CMsgBox::initButtons() btn.btn_result = mbrYes; btn.btn_alias = mbYes; v_buttons.push_back(btn); + btn.button = NEUTRINO_ICON_BUTTON_GREEN; + btn.text = BTN_TEXT(mbNo); + btn.directKey = CRCInput::RC_green; + btn.directKeyAlt = CRCInput::RC_home; + btn.btn_result = mbrNo; + btn.btn_alias = mbNo; + v_buttons.push_back(btn); } ccw_footer->setButtonLabels(v_buttons, 0, 125); From 6354af262f0cb8572e3eaa19f1908ae81af61229 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 27 Oct 2016 12:16:14 +0200 Subject: [PATCH 65/85] CTestMenu: add sample for message box with parameter CMsgBox::mbNoYes Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3d12e059c4e0541f8610cb484f09fc08d2a2623d Author: Thilo Graf Date: 2016-10-27 (Thu, 27 Oct 2016) --- src/gui/test_menu.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 7120cdfa9..14efde7ec 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -784,6 +784,14 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) ShowHint("MsgBox test returns", msg_txt.c_str()); return menu_return::RETURN_REPAINT; } + else if (actionKey == "msgbox_test_no_yes"){ + int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press key! ...", CMsgBox::mbrOk, CMsgBox::mbNoYes, NULL, 500, -1); + + std::string msg_txt = "Return value of MsgBox test is "; + msg_txt += to_string(msgRet); + ShowHint("MsgBox test returns", msg_txt.c_str()); + return menu_return::RETURN_REPAINT; + } else if (actionKey == "msgbox_test_ok"){ int msgRet = ShowMsg("Testmenu: MsgBox test", "Test for MsgBox,\nPlease press ok key! ...", CMsgBox::mbrOk, CMsgBox::mbOk, NULL, 500, -1); @@ -972,6 +980,7 @@ void CTestMenu::showMsgTests(CMenuWidget *widget) widget->addItem(new CMenuSeparator(CMenuSeparator::STRING | CMenuSeparator::LINE, "MsgBox")); widget->addItem(new CMenuForwarder("cancel on timeout", true, NULL, this, "msgbox_test_cancel_timeout")); widget->addItem(new CMenuForwarder("yes no", true, NULL, this, "msgbox_test_yes_no")); + widget->addItem(new CMenuForwarder("no yes", true, NULL, this, "msgbox_test_no_yes")); widget->addItem(new CMenuForwarder("cancel", true, NULL, this, "msgbox_test_cancel")); widget->addItem(new CMenuForwarder("ok", true, NULL, this, "msgbox_test_ok")); widget->addItem(new CMenuForwarder("ok cancel", true, NULL, this, "msgbox_test_ok_cancel")); From b7baafa2e5a8ae6c12d979243ca625c66f2cb194 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 27 Oct 2016 12:16:55 +0200 Subject: [PATCH 66/85] CChannelList: delete with red yes button Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/36896849689c552989cf365984de546a4ed5282a Author: Thilo Graf Date: 2016-10-27 (Thu, 27 Oct 2016) --- src/gui/channellist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 176f34315..c37aa9637 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2631,7 +2631,7 @@ void CChannelList::deleteChannel(bool ask) if (!bouquet || !bouquet->zapitBouquet) return; - if (ask && ShowMsg(LOCALE_FILEBROWSER_DELETE, (*chanlist)[selected]->getName(), CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)!=CMsgBox::mbrYes) + if (ask && ShowMsg(LOCALE_FILEBROWSER_DELETE, (*chanlist)[selected]->getName(), CMsgBox::mbrYes, CMsgBox::mbNoYes)!=CMsgBox::mbrYes) return; bouquet->zapitBouquet->removeService((*chanlist)[selected]->getChannelID()); From 699d6a311b7a1e4f18e4c126a0bde6610e7a8bf8 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 6 Nov 2016 18:45:01 +0100 Subject: [PATCH 67/85] src/gui/scan_setup.cpp use CHintBox for reloadchannels Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/c0ce2a0d3b7f3057054059812cbe6878aff5df7d Author: Jacek Jendrzej Date: 2016-11-06 (Sun, 06 Nov 2016) --- src/gui/scan_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 8fa5dced4..a4aa2599b 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -371,7 +371,7 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) else if(actionKey == "reloadchannels") { printf("[neutrino] CScanSetup::%s reloadchannels...\n", __FUNCTION__); - CHint chb(LOCALE_SERVICEMENU_RELOAD_HINT); + CHintBox chb(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SERVICEMENU_RELOAD_HINT)); chb.paint(); /* save if changed, to make sure NEW/REMOVED/... flags are updated */ CServiceManager::getInstance()->SaveServices(true, true); From 1523582d35e0b0fdf9ddee7fd5c75c3378991317 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 9 Nov 2016 23:46:46 +0100 Subject: [PATCH 68/85] CTextBox: add static function to get count of lines from passed text I'm missing a function that returns current line count outside of a CTextBox object. This could be useful eg. for size calculations before object init etc Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/ac8d05f5e1d64756fb37d55c4848402e10246a85 Author: Thilo Graf Date: 2016-11-09 (Wed, 09 Nov 2016) --- src/gui/widget/textbox.cpp | 17 +++++++++++++++++ src/gui/widget/textbox.h | 19 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index bbddf0fb4..d337a89b2 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -64,6 +64,7 @@ #ifdef VISUAL_DEBUG #include #endif +#include #define SCROLL_FRAME_WIDTH 10 #define SCROLL_MARKER_BORDER 2 @@ -870,3 +871,19 @@ bool CTextBox::enableSaveScreen(bool mode) return true; } +int CTextBox::getLines(const std::string& text) +{ + if (text.empty()) + return 0; + + std::stringstream s (text); + if (!s) + return 0; + + int count = 0; + std::string line; + while(getline(s, line)) + count++; + + return count; +} diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index c062b62e7..e2604063b 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -201,10 +201,27 @@ class CTextBox : public sigc::trackable inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);}; inline CBox getWindowsPos(void) {return(m_cFrame);}; inline int getMaxLineWidth(void) {return(m_nMaxTextWidth);}; - inline int getLines(void) {return(m_nNrOfLines);}; + inline int getLinesPerPage(void) {return m_nLinesPerPage;}; inline int getPages(void) {return(m_nNrOfPages);}; inline int getBackGroundRadius(void) {return(m_nBgRadius);}; + + /** + * Returns count of lines of a passed text. + * @param[in] text + * @li exepts type std::string + * @return count of lines as int + * @see getLines() + */ + static int getLines(const std::string& text); + + /** + * Returns count of evaluated lines from an existent CTextBox instance. + * @return count of lines as int + * @see static version getLines() + */ + int getLines(){return(m_nNrOfLines);} + inline void movePosition(int x, int y) {m_cFrame.iX = x; m_cFrame.iY = y;}; int getFontTextHeight(); inline int getTextMode() {return m_nMode;}; From 0704180bf98719678baf96bdc5b766bb3d620963 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 31 Oct 2016 21:38:06 +0100 Subject: [PATCH 69/85] CHintBox: add member to get maximal required width Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/4bdd5e11a909fb060b8e43f51049915f2b9192f5 Author: Thilo Graf Date: 2016-10-31 (Mon, 31 Oct 2016) --- src/gui/widget/hintbox.cpp | 7 ++++++- src/gui/widget/hintbox.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 0a0217fca..1ad1b2f87 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -259,7 +259,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const //set required font and line size hb_font = !font_text ? hb_font : font_text; - width = max(width, min(hb_font->getRenderWidth(Text), HINTBOX_MIN_WIDTH)); + width = getMaxWidth(Text, width); int h_line = hb_font->getHeight(); //init side picon object @@ -439,6 +439,11 @@ void CHintBox::scroll_down(const uint& hint_id) Scroll(true, hint_id); } +int CHintBox::getMaxWidth(const string& Text, const int& minWidth) +{ + return max(HINTBOX_MIN_WIDTH, max(minWidth, min(hb_font->getRenderWidth(Text), (int)frameBuffer->getScreenWidth()))); +} + int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) { int res = messages_return::none; diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 3f5a35724..5cf6b33e4 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -85,6 +85,7 @@ class CHintBox : public CComponentsWindow virtual void ReSize(); void showTimeOutBar(){enableTimeOutBar();} + int getMaxWidth(const std::string& Text, const int& minWidth); public: /**CHintBox Constructor From c337d0449e43184c35019f4f590da69dd98169c0 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 3 Nov 2016 20:10:42 +0100 Subject: [PATCH 70/85] CHintBox/CMsgBox: rework text handling and dynamic size behavior Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/e3f51f2c914bbd3f22112c36dacaef5e48892e11 Author: Thilo Graf Date: 2016-11-03 (Thu, 03 Nov 2016) --- src/gui/widget/hintbox.cpp | 191 ++++++++++++------------------------- src/gui/widget/hintbox.h | 28 ++---- src/gui/widget/msgbox.h | 36 +++---- 3 files changed, 87 insertions(+), 168 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 1ad1b2f87..2dfd390a8 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -128,16 +128,14 @@ CHintBox::CHintBox( const char * const Caption, void CHintBox::init(const std::string& Text, const int& Width, const std::string& Picon, const int& header_buttons, const int& text_mode, const int& indent) { - lines = 0; timeout = HINTBOX_DEFAULT_TIMEOUT; w_indentation = indent; - hb_text_mode = text_mode; hb_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]; //set required window width and basic height - width = max(HINTBOX_MIN_WIDTH, max(Width, min(hb_font->getRenderWidth(Text), (int)frameBuffer->getScreenWidth()))); - height = max(HINTBOX_MIN_HEIGHT, height); + width = getMaxWidth(Text, hb_font, Width); + height = max(HINTBOX_MIN_HEIGHT, min(HINTBOX_MAX_HEIGHT, height)); ccw_buttons = header_buttons; @@ -151,19 +149,14 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string //disable footer for default showFooter(false); - //add the content container, contains the hint objects - obj_content = new CComponentsFrmChain(CC_CENTERED, CC_CENTERED, ccw_body->getWidth(), ccw_body->getHeight(), NULL, CC_DIR_X, ccw_body); - obj_content->doPaintBg(false); - - y_hint_obj = 0; - h_hint_obj = obj_content->getHeight(); + y_hint_obj = CC_CENTERED; //initialize timeout bar and its timer timeout_pb = NULL; timeout_pb_timer= NULL; if (!Text.empty()) - addHintItem(Text, hb_text_mode, Picon); + addHintItem(Text, text_mode, Picon, COL_MENUCONTENT_TEXT, hb_font); } CHintBox::~CHintBox() @@ -253,135 +246,73 @@ int CHintBox::exec() return res; } -void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const std::string& Picon, const u_int8_t& at_page_number, const fb_pixel_t& color_text, Font* font_text) +void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const std::string& Picon, const fb_pixel_t& color_text, Font* font_text) { - dprintf(DEBUG_INFO, "[CHintBox] [%s - %d] add new hint '%s' %s\n", __func__, __LINE__, Text.c_str(), Picon.c_str()); + /* set required font and line height */ + Font* item_font = !font_text ? hb_font : font_text; - //set required font and line size - hb_font = !font_text ? hb_font : font_text; - width = getMaxWidth(Text, width); - int h_line = hb_font->getHeight(); + /* pre define required info height depends of lines and minimal needed height*/ + int line_breaks = CTextBox::getLines(Text); + int h_font = item_font->getHeight(); + int h_lines = h_font * line_breaks; - //init side picon object - CComponentsPicture *obj_picon = new CComponentsPicture(0, timeout > 0 ? TIMEOUT_BAR_HEIGHT : 0, Picon); - obj_picon->doPaintBg(false); - obj_picon->SetTransparent(CFrameBuffer::TM_BLACK); - int w_picon = obj_picon->getWidth(); + /* get required height depends of possible lines and max height */ + h_hint_obj = min(HINTBOX_MAX_HEIGHT - (ccw_head ? ccw_head->getHeight() : 0), h_lines + 2*w_indentation); - //init text item object - int x_text_obj = (w_picon > 0) ? (w_picon + w_indentation) : 0; - int w_text_obj = obj_content->getWidth() - w_picon - w_indentation; - int h_text_obj = max(h_line, obj_picon->getHeight()); - CComponentsText *obj_text = new CComponentsText(x_text_obj, - timeout > 0 ? TIMEOUT_BAR_HEIGHT : 0, - w_text_obj, - h_text_obj, - Text, - text_mode, - hb_font); - - //provide the internal textbox object - CTextBox *textbox = obj_text->getCTextBoxObject(); - int lines_count = textbox->getLines(); - - //get required height of text object related to height of current text object, header and footer - int fh_h = (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0) + obj_text->getHeight(); - int h_required = min( max(height,fh_h), (int)frameBuffer->getScreenHeight()) ;//lines_count * h_line + (ccw_head ? ccw_head->getHeight() : 0) + (ccw_footer ? ccw_footer->getHeight() : 0); - - //set minimal required height - height = max(height, min(HINTBOX_MAX_HEIGHT, max(HINTBOX_MIN_HEIGHT, h_required))); - - //if have no pre defined text mode: - //more than 1 line or a picon is defined, then do not center text and allow scroll if > 1 lines - if (text_mode == 0){ - if (lines_count == 1) - obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER); - if (w_picon > 1) - obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH); - if (lines_count > 1) - obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | (h_required > HINTBOX_MAX_HEIGHT ? CTextBox::SCROLL : CTextBox::AUTO_HIGH)); - if (lines_count > 1 && w_picon == 0) - obj_text->setTextMode(CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::CENTER | (h_required > HINTBOX_MAX_HEIGHT ? CTextBox::SCROLL : CTextBox::AUTO_HIGH)); - } - else - obj_text->setTextMode(text_mode); - - //text item object: don't paint background - obj_text->doPaintBg(false); - obj_text->setCorner(corner_rad, corner_type); - - //set text color - obj_text->setTextColor(color_text); - - //calculate height of hint object - if (obj_content->size() == 0){ - if (lines_count == 1){ - h_hint_obj = max(h_hint_obj, h_text_obj); - obj_text->setYPos(CC_CENTERED); - } - else - h_hint_obj = max(h_hint_obj, h_line*lines_count); - } - else{ - if (lines_count == 1){ - h_hint_obj = h_text_obj; - obj_text->setYPos(CC_CENTERED); - } - else - h_hint_obj = h_line*lines_count; + /* add scroll mode if needed */ + int txt_mode = text_mode; + if (h_lines > h_hint_obj){ + txt_mode = text_mode | CTextBox::SCROLL; + ccw_buttons = ccw_buttons | CComponentsHeader::CC_BTN_TOP | CComponentsHeader::CC_BTN_DOWN; } - //init hint container object - if (isPageChanged()) - y_hint_obj = 0; - CComponentsFrmChain *obj_hint = new CComponentsFrmChain( 0+w_indentation, - y_hint_obj, - obj_content->getWidth()-2*w_indentation, - h_hint_obj, - NULL, - CC_DIR_X, - obj_content); + /* define y start position of infobox inside body */ + if(!ccw_body->empty()){ + ccw_body->front()->setYPos(w_indentation); + y_hint_obj += ccw_body->back()->getYPos()+ ccw_body->back()->getHeight(); + } - //don't paint background for hint container - obj_hint->doPaintBg(false); - obj_hint->setCorner(corner_rad, corner_type); - obj_hint->setPageNumber(at_page_number); + /* calcoulation of maximal hintbox height include possible header*/ + height = min(HINTBOX_MAX_HEIGHT, (ccw_head ? ccw_head->getHeight() : 0)+ h_hint_obj); + height = max(height, HINTBOX_MIN_HEIGHT); - //add the created items to obj_hint - obj_hint->addCCItem(obj_picon); - obj_hint->addCCItem(obj_text); + /* get current maximal width and refresh window items TODO: required maximal width*/ + width = getMaxWidth(Text, item_font, width); - //text object obtains the full height of its parent object - obj_text->setHeightP(100); + /* initialize infobox as container for text and possible picon*/ + CComponentsInfoBox *info_box = new CComponentsInfoBox( 0, + y_hint_obj, + width, // FIXME: not critical here but ccw_body->getWidth() != width, this should be the same value! + h_hint_obj, + Text, + txt_mode, + item_font, + ccw_body, + CC_SHADOW_OFF, + color_text); - //if we have only one line and a defined picon, then do centering picon to text on the left site - if (lines_count == 1) - obj_picon->setYPos(CC_CENTERED); + /* define picon and disable bg */ + info_box->setPicture(Picon); + info_box->doPaintBg(false); - //set next y pos for the next hint object - y_hint_obj += h_hint_obj; - - - //recalculate new hintbox height + /* recalculate new hintbox height */ ReSize(); - //set hint box position general to center and refresh window + /* set hint box position general to center and refresh window */ setCenterPos(); - Refresh(); - lines += lines_count; + Refresh(); } void CHintBox::setMsgText(const std::string& Text, const uint& hint_id, const int& mode, Font* font_text, const fb_pixel_t& color_text, const int& style) { uint id = hint_id; - if (hint_id+1 > obj_content->size()){ + if (hint_id+1 > ccw_body->size()){ id = 0; dprintf(DEBUG_NORMAL, "[CHintBox] [%s - %d] mismatching hint_id [%u]...\n", __func__, __LINE__, id); } - CComponentsFrmChain *obj_hint = static_cast(obj_content->getCCItem(id)); - CComponentsText *obj_text = static_cast(obj_hint->getCCItem(1)); + CComponentsInfoBox *obj_text = static_cast(ccw_body->getCCItem(id)); //set required font and line size Font* font = font_text == NULL ? g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO] : font_text; @@ -391,33 +322,29 @@ void CHintBox::setMsgText(const std::string& Text, const uint& hint_id, const in void CHintBox::ReSize() { - int h_content_old = obj_content->getHeight(); - int h_content_new = 0; - for (size_t i= 0; i< obj_content->size(); i++){ - CComponentsItem *item = obj_content->getCCItem(i); - h_content_new += item->getHeight(); + int h = (ccw_head ? ccw_head->getHeight() : 0); + for (size_t i= 0; i< ccw_body->size(); i++){ + CComponentsItem *item = ccw_body->getCCItem(i); + h += item->getHeight(); } - int h_content_diff = h_content_new - h_content_old; - - obj_content->setHeight(h_content_new); - setHeight(height+h_content_diff); + height = min(HINTBOX_MAX_HEIGHT, max(HINTBOX_MIN_HEIGHT, max(height,h))); + Refresh(); } void CHintBox::Scroll(bool down, const uint& hint_id) { uint id = hint_id; - if (hint_id+1 > obj_content->size()){ + if (hint_id+1 > ccw_body->size()){ id = 0; dprintf(DEBUG_NORMAL, "[CHintBox] [%s - %d] mismatching hint_id [%u]...\n", __func__, __LINE__, id); } - CComponentsFrmChain *obj_hint = static_cast(obj_content->getCCItem(id)); - CComponentsText *obj_text = static_cast(obj_hint->getCCItem(1)); + CComponentsInfoBox *obj_text = static_cast(ccw_body->getCCItem(id)); if (obj_text) { - dprintf(DEBUG_INFO, "[CHintBox] [%s - %d] try to scroll %s hint_id [%u]...Text= %s\n", __func__, __LINE__, down ? "down" : "up", id, obj_text->getText().c_str()); - CTextBox* textbox = obj_text->getCTextBoxObject(); + dprintf(DEBUG_DEBUG, "[CHintBox] [%s - %d] try to scroll %s hint_id [%u]...Text= %s\n", __func__, __LINE__, down ? "down" : "up", id, obj_text->getText().c_str()); + CTextBox* textbox = obj_text->cctext->getCTextBoxObject(); if (textbox) { textbox->enableBackgroundPaint(true); if (down) @@ -439,9 +366,9 @@ void CHintBox::scroll_down(const uint& hint_id) Scroll(true, hint_id); } -int CHintBox::getMaxWidth(const string& Text, const int& minWidth) +int CHintBox::getMaxWidth(const string& Text, Font *font, const int& minWidth) { - return max(HINTBOX_MIN_WIDTH, max(minWidth, min(hb_font->getRenderWidth(Text), (int)frameBuffer->getScreenWidth()))); + return max(HINTBOX_MIN_WIDTH, max(minWidth+w_indentation, min(font->getRenderWidth(Text)+w_indentation, (int)frameBuffer->getScreenWidth()))); } int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 5cf6b33e4..81893eb25 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -32,7 +32,7 @@ #include -#define HINTBOX_MIN_WIDTH 400 +#define HINTBOX_MIN_WIDTH 420 #define HINTBOX_MIN_HEIGHT 125 #define HINTBOX_MAX_HEIGHT 420 #define HINTBOX_DEFAULT_TIMEOUT 5 @@ -42,6 +42,8 @@ #define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME #define TIMEOUT_BAR_HEIGHT OFFSET_SHADOW/2 +#define DEFAULT_HINTBOX_TEXT_MODE (CTextBox::NO_AUTO_LINEBREAK) + //! Sub class of CComponentsWindow. Shows a window as a hintbox with text and optional icon beside of text. /*! CHintBox provides a small window with header and a text item, @@ -55,19 +57,12 @@ class CHintBox : public CComponentsWindow int y_hint_obj; int h_hint_obj; int w_indentation; - int hb_text_mode; Font* hb_font; - ///global count of lines - uint lines; - ///timeout value, see also setTimeOut() int timeout; - ///content container object, contains the hint objects, it's a child of body object - CComponentsFrmChain *obj_content; - ///timeout bar CProgressBar *timeout_pb; CComponentsTimer *timeout_pb_timer; @@ -85,7 +80,7 @@ class CHintBox : public CComponentsWindow virtual void ReSize(); void showTimeOutBar(){enableTimeOutBar();} - int getMaxWidth(const std::string& Text, const int& minWidth); + int getMaxWidth(const std::string& Text, Font *font, const int& minWidth); public: /**CHintBox Constructor @@ -125,7 +120,7 @@ class CHintBox : public CComponentsWindow const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0, - const int& text_mode = 0, + const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME); /**CHintBox Constructor @@ -139,7 +134,7 @@ class CHintBox : public CComponentsWindow const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0, - const int& text_mode = 0, + const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME); /**CHintBox Constructor @@ -155,7 +150,7 @@ class CHintBox : public CComponentsWindow const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0, - const int& text_mode = 0, + const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME); /**CHintBox Constructor @@ -171,7 +166,7 @@ class CHintBox : public CComponentsWindow const char * const Icon = NULL, const char * const Picon = NULL, const int& header_buttons = 0, - const int& text_mode = 0, + const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME); virtual ~CHintBox(); @@ -236,17 +231,14 @@ class CHintBox : public CComponentsWindow * AUTO_LINEBREAK_NO_BREAKCHARS * @param[in] Picon * @li optional: exepts type std::string, defines the picon name on the left side of message text, default = NULL (non Icon) - * @param[in] at_page_number - * @li optional: exepts type int, defines the page number on that this hint will be, default = 0 (first page) * @param[in] color_text * @li optional: exepts type fb_pixel_t, defines the text color, default = COL_MENUCONTENT_TEXT * * @param[in] font_text * @li optional: exepts type Font*, defines the text font type, default = NULL for system preset for message contents */ void addHintItem( const std::string& Text, - const int& text_mode = 0, + const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const std::string& Picon = std::string(), - const u_int8_t& at_page_number = 0, const fb_pixel_t& color_text = COL_MENUCONTENT_TEXT, Font* font_text = NULL); @@ -257,7 +249,7 @@ class CHintBox : public CComponentsWindow * * @see /gui/components/cc_types.h */ - void addHintItem(CComponentsItem* cc_Item){obj_content->addCCItem(cc_Item);} + void addHintItem(CComponentsItem* cc_Item){ccw_body->addCCItem(cc_Item);} /** * Sets a text to a hint item. diff --git a/src/gui/widget/msgbox.h b/src/gui/widget/msgbox.h index 653aa1fed..028bba5d5 100644 --- a/src/gui/widget/msgbox.h +++ b/src/gui/widget/msgbox.h @@ -38,7 +38,7 @@ #define MSGBOX_MIN_WIDTH HINTBOX_MIN_WIDTH #define MSGBOX_MIN_HEIGHT HINTBOX_MIN_HEIGHT + 75 -#define DEFAULT_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH | CMsgBox::SCROLL) +#define DEFAULT_MSGBOX_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH) //! Sub class of CHintBox. Shows a window as a messagebox /*! @@ -159,7 +159,7 @@ class CMsgBox : public CHintBox * BOTTOM * NO_AUTO_LINEBREAK * AUTO_LINEBREAK_NO_BREAKCHARS - * NOTE: default parameter to find in macro DEFAULT_TEXT_MODE + * NOTE: default parameter to find in macro DEFAULT_MSGBOX_TEXT_MODE * * @see class CHintBox() */ @@ -171,7 +171,7 @@ class CMsgBox : public CHintBox const int& Height = MSGBOX_MIN_HEIGHT, const int& ShowButtons = mbCancel, const msg_result_t& Default_result = mbrCancel, - const int& Text_mode = DEFAULT_TEXT_MODE); + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE); /**CMsgBox Constructor * @param[in] Text @@ -213,7 +213,7 @@ class CMsgBox : public CHintBox * BOTTOM * NO_AUTO_LINEBREAK * AUTO_LINEBREAK_NO_BREAKCHARS - * NOTE: default parameter to find in macro DEFAULT_TEXT_MODE + * NOTE: default parameter to find in macro DEFAULT_MSGBOX_TEXT_MODE * * @see class CHintBox() */ @@ -225,7 +225,7 @@ class CMsgBox : public CHintBox const int& Height = MSGBOX_MIN_HEIGHT, const int& ShowButtons = mbCancel, const msg_result_t& Default_result = mbrCancel, - const int& Text_mode = DEFAULT_TEXT_MODE); + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE); // ~CMsgBox(); //inherited /** @@ -323,7 +323,7 @@ int ShowMsg2UTF( const neutrino_locale_t Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg2UTF( const char * const Title, @@ -334,7 +334,7 @@ int ShowMsg2UTF( const char * const Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg( const neutrino_locale_t Title, @@ -345,7 +345,7 @@ int ShowMsg( const neutrino_locale_t Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg( const char * const Title, @@ -356,7 +356,7 @@ int ShowMsg( const char * const Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg( const neutrino_locale_t Title, @@ -367,7 +367,7 @@ int ShowMsg( const neutrino_locale_t Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg( const neutrino_locale_t Title, @@ -378,7 +378,7 @@ int ShowMsg( const neutrino_locale_t Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 int ShowMsg( const std::string & Title, @@ -389,13 +389,13 @@ int ShowMsg( const std::string & Title, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = -1, bool returnDefaultOnTimeout = false, - const int& Text_mode = DEFAULT_TEXT_MODE, + const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = HINTBOX_DEFAULT_FRAME_COLOR); // UTF-8 -void DisplayErrorMessage(const char * const ErrorMsg, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 -void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 -void DisplayErrorMessage(const char * const ErrorMsg, const std::string& caption, const int& Text_mode = DEFAULT_TEXT_MODE); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 -void DisplayInfoMessage(const char * const InfoMsg, const std::string& caption, const int& Text_mode = DEFAULT_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 +void DisplayErrorMessage(const char * const ErrorMsg, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE); // UTF-8 +void DisplayErrorMessage(const char * const ErrorMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE); // UTF-8 +void DisplayErrorMessage(const char * const ErrorMsg, const std::string& caption, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const neutrino_locale_t& caption, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 +void DisplayInfoMessage(const char * const InfoMsg, const std::string& caption, const int& Text_mode = DEFAULT_MSGBOX_TEXT_MODE, fb_pixel_t color_frame = COL_DARK_GRAY); // UTF-8 #endif From 4a2a66399d3aeddb325e2f349ed9f2b514de000b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 10 Nov 2016 00:30:57 +0100 Subject: [PATCH 71/85] CTextBox: add static function to get largest line of passed text This could be useful eg. for size calculations. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/91c7588aa6bb993e29abee1d374363c3ba7bc566 Author: Thilo Graf Date: 2016-11-10 (Thu, 10 Nov 2016) --- src/gui/widget/textbox.cpp | 18 ++++++++++++++++++ src/gui/widget/textbox.h | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index d337a89b2..bbf678e33 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -887,3 +887,21 @@ int CTextBox::getLines(const std::string& text) return count; } + +int CTextBox::getMaxLineWidth(const std::string& text, Font* font) +{ + // if found no linebreak, return pure size only + if (text.find('\n', 0) == std::string::npos) + return font->getRenderWidth(text.c_str()); + + std::stringstream in (text); + if (!in) + return 0; + + int len = 0; + std::string line; + while(getline(in, line)) + len = std::max(len, font->getRenderWidth(line.c_str())); + + return len; +} diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index e2604063b..5df0762a7 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -200,7 +200,6 @@ class CTextBox : public sigc::trackable inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);}; inline CBox getWindowsPos(void) {return(m_cFrame);}; - inline int getMaxLineWidth(void) {return(m_nMaxTextWidth);}; inline int getLinesPerPage(void) {return m_nLinesPerPage;}; inline int getPages(void) {return(m_nNrOfPages);}; @@ -222,6 +221,24 @@ class CTextBox : public sigc::trackable */ int getLines(){return(m_nNrOfLines);} + /** + * Returns maximal width of passed text + * @param[in] text + * @li exepts type std::string + * @param[in] font + * @li exepts font type object + * @return width of largest line as int + * @see getMaxLineWidth(void) + */ + static int getMaxLineWidth(const std::string& text, Font* font); + + /** + * Returns internal defined maximal line width of an existent CTextBox instance. + * @return width of largest line as int + * @see static version getMaxLineWidth() + */ + int getMaxLineWidth() {return(m_nMaxTextWidth);} + inline void movePosition(int x, int y) {m_cFrame.iX = x; m_cFrame.iY = y;}; int getFontTextHeight(); inline int getTextMode() {return m_nMode;}; From 2f89d7ff7615c881671a03890003fd36f5115772 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 10 Nov 2016 00:34:00 +0100 Subject: [PATCH 72/85] CHintBox: optimize dynamic window width bahavior on different line sizes Width calculation is now depends on largest line of text. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/0952efaba4ca66aee0823231150b133d85ca210e Author: Thilo Graf Date: 2016-11-10 (Thu, 10 Nov 2016) --- src/gui/widget/hintbox.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 2dfd390a8..cefbe5448 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -133,12 +133,6 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string hb_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]; - //set required window width and basic height - width = getMaxWidth(Text, hb_font, Width); - height = max(HINTBOX_MIN_HEIGHT, min(HINTBOX_MAX_HEIGHT, height)); - - ccw_buttons = header_buttons; - //enable shadow shadow = true; @@ -146,6 +140,12 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string if (ccw_caption.empty()) showHeader(false); + //set required window width and basic height, consider existent header instance and its caption width + width = getMaxWidth(Text, hb_font, Width); + height = max(HINTBOX_MIN_HEIGHT, min(HINTBOX_MAX_HEIGHT, height)); + + ccw_buttons = header_buttons; + //disable footer for default showFooter(false); @@ -276,7 +276,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const height = min(HINTBOX_MAX_HEIGHT, (ccw_head ? ccw_head->getHeight() : 0)+ h_hint_obj); height = max(height, HINTBOX_MIN_HEIGHT); - /* get current maximal width and refresh window items TODO: required maximal width*/ + /* get current maximal width and refresh window items */ width = getMaxWidth(Text, item_font, width); /* initialize infobox as container for text and possible picon*/ @@ -368,7 +368,7 @@ void CHintBox::scroll_down(const uint& hint_id) int CHintBox::getMaxWidth(const string& Text, Font *font, const int& minWidth) { - return max(HINTBOX_MIN_WIDTH, max(minWidth+w_indentation, min(font->getRenderWidth(Text)+w_indentation, (int)frameBuffer->getScreenWidth()))); + return max(HINTBOX_MIN_WIDTH, max(minWidth+w_indentation, min(CTextBox::getMaxLineWidth(Text, font)+w_indentation, (int)frameBuffer->getScreenWidth()))); } int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) From dbf42b9d5c3096243bb4044858e8f4e630794121 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 10 Nov 2016 00:50:13 +0100 Subject: [PATCH 73/85] CTestMenu: add sample for hintbox with timeout Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/43c1349ffa92a182e8e444c4aef29aab8ad96b7f Author: Thilo Graf Date: 2016-11-10 (Thu, 10 Nov 2016) --- src/gui/test_menu.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 14efde7ec..b5b1dd772 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -817,27 +817,19 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return menu_return::RETURN_REPAINT; } else if (actionKey == "footer_key"){ - neutrino_msg_t msg; - neutrino_msg_data_t data; - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Footer-Key pressed. Press EXIT to return", 350, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); + CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, "Footer-Key pressed. Press EXIT to return", 350, NULL, NULL, CComponentsHeader::CC_BTN_EXIT); + hintBox.setTimeOut(15); //optional: it is also possible to add more items into the hint box //here some examples: - hintBox->addHintItem(new CComponentsShapeSquare(CC_CENTERED, CC_APPEND, 330, 2, NULL, false, COL_MENUCONTENT_PLUS_6, COL_RED)); - hintBox->addHintItem("- text with left icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, NEUTRINO_ICON_HINT_INFO); - hintBox->addHintItem("- text right without an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT); - hintBox->addHintItem("- text right with an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT, NEUTRINO_ICON_HINT_INFO); + hintBox.addHintItem(new CComponentsShapeSquare(CC_CENTERED, CC_APPEND, 330, 2, NULL, false, COL_MENUCONTENT_PLUS_6, COL_RED)); + hintBox.addHintItem("- text with left icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH, NEUTRINO_ICON_HINT_INFO); + hintBox.addHintItem("- text right without an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT); + hintBox.addHintItem("- text right with an icon", CTextBox::AUTO_WIDTH | CTextBox::AUTO_HIGH | CTextBox::RIGHT, NEUTRINO_ICON_HINT_INFO); - hintBox->paint(); - while (1) - { - g_RCInput->getMsg(&msg, &data, 100); - if (msg == CRCInput::RC_home) - hintBox->hide(); - break; - } - hintBox->hide(); - delete hintBox; + hintBox.paint(); + res = hintBox.exec(); + hintBox.hide(); return res; } From 9ea70e4ea73beb15418d95e9c9729f376a0f0091 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 11 Nov 2016 21:09:25 +0100 Subject: [PATCH 74/85] CHintBox: try to fix truncated chars Last chars were truncated. Indent and titel text were not considered. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/7f5a576795c03bb153480ca2b40ba80826d302d3 Author: Thilo Graf Date: 2016-11-11 (Fri, 11 Nov 2016) --- src/gui/widget/hintbox.cpp | 14 ++++++++++---- src/gui/widget/hintbox.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index cefbe5448..fe57855e1 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -141,7 +141,7 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string showHeader(false); //set required window width and basic height, consider existent header instance and its caption width - width = getMaxWidth(Text, hb_font, Width); + width = getMaxWidth(Text, ccw_caption, hb_font, Width); height = max(HINTBOX_MIN_HEIGHT, min(HINTBOX_MAX_HEIGHT, height)); ccw_buttons = header_buttons; @@ -277,7 +277,7 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const height = max(height, HINTBOX_MIN_HEIGHT); /* get current maximal width and refresh window items */ - width = getMaxWidth(Text, item_font, width); + width = getMaxWidth(Text, ccw_caption, item_font, width); /* initialize infobox as container for text and possible picon*/ CComponentsInfoBox *info_box = new CComponentsInfoBox( 0, @@ -366,9 +366,15 @@ void CHintBox::scroll_down(const uint& hint_id) Scroll(true, hint_id); } -int CHintBox::getMaxWidth(const string& Text, Font *font, const int& minWidth) +int CHintBox::getMaxWidth(const string& Text, const string& Title, Font *font, const int& minWidth) { - return max(HINTBOX_MIN_WIDTH, max(minWidth+w_indentation, min(CTextBox::getMaxLineWidth(Text, font)+w_indentation, (int)frameBuffer->getScreenWidth()))); + int res = max(HINTBOX_MIN_WIDTH, max(minWidth+2*w_indentation, min(CTextBox::getMaxLineWidth(Text, font)+2*w_indentation, (int)frameBuffer->getScreenWidth()))); + if (ccw_show_header){ + initHeader(); + return max(res, ccw_head->getCaptionFont()->getRenderWidth(Title) + 2*w_indentation); + } + + return res; } int ShowHint(const char * const Caption, const char * const Text, const int Width, int timeout, const char * const Icon, const char * const Picon, const int& header_buttons) diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 81893eb25..510d044c8 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -80,7 +80,7 @@ class CHintBox : public CComponentsWindow virtual void ReSize(); void showTimeOutBar(){enableTimeOutBar();} - int getMaxWidth(const std::string& Text, Font *font, const int& minWidth); + int getMaxWidth(const std::string& Text, const std::string& Title, Font *font, const int& minWidth); public: /**CHintBox Constructor From fac13b98ee07aac8c5a87267af94b4ac2a106bbe Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 11 Nov 2016 21:31:39 +0100 Subject: [PATCH 75/85] CHintbox: enlarge possible max height Better use of available screen size for many lines Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/3193fef4c6e236c543f582030c1799071a0e8ad7 Author: Thilo Graf Date: 2016-11-11 (Fri, 11 Nov 2016) --- src/gui/widget/hintbox.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index 510d044c8..f24fa4b24 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -34,7 +34,7 @@ #define HINTBOX_MIN_WIDTH 420 #define HINTBOX_MIN_HEIGHT 125 -#define HINTBOX_MAX_HEIGHT 420 +#define HINTBOX_MAX_HEIGHT 520 #define HINTBOX_DEFAULT_TIMEOUT 5 //frame around hint container as indent #define W_FRAME std::max(HINTBOX_MIN_WIDTH, HINTBOX_MIN_HEIGHT) * 2/100 From 527a5ad0467053dd361eb087bdb7e581b8171278 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 11 Nov 2016 23:10:39 +0100 Subject: [PATCH 76/85] CHintBox: remove center text mode on used picon Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/075917e32d2e65caf551e7954b7d2c93851e0d3f Author: Thilo Graf Date: 2016-11-11 (Fri, 11 Nov 2016) --- src/gui/widget/hintbox.cpp | 7 ++++++- src/gui/widget/hintbox.h | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index fe57855e1..3851a247f 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -259,8 +259,13 @@ void CHintBox::addHintItem(const std::string& Text, const int& text_mode, const /* get required height depends of possible lines and max height */ h_hint_obj = min(HINTBOX_MAX_HEIGHT - (ccw_head ? ccw_head->getHeight() : 0), h_lines + 2*w_indentation); - /* add scroll mode if needed */ int txt_mode = text_mode; + /* remove CENTER mode if picon defined */ + if (!Picon.empty() && (txt_mode & CTextBox::CENTER)){ + txt_mode &= ~CTextBox::CENTER; + } + + /* add scroll mode if needed */ if (h_lines > h_hint_obj){ txt_mode = text_mode | CTextBox::SCROLL; ccw_buttons = ccw_buttons | CComponentsHeader::CC_BTN_TOP | CComponentsHeader::CC_BTN_DOWN; diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index f24fa4b24..641bb6411 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -42,7 +42,7 @@ #define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME #define TIMEOUT_BAR_HEIGHT OFFSET_SHADOW/2 -#define DEFAULT_HINTBOX_TEXT_MODE (CTextBox::NO_AUTO_LINEBREAK) +#define DEFAULT_HINTBOX_TEXT_MODE (CTextBox::CENTER) //! Sub class of CComponentsWindow. Shows a window as a hintbox with text and optional icon beside of text. /*! From 5bb70ba9e90bc8965ca6997d4cf0d2aba1b24090 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 12 Nov 2016 14:51:18 +0100 Subject: [PATCH 77/85] CHintBox: update ascII scheme Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/27905b9acfc17751c71646dc1da5a3c4350127e6 Author: Thilo Graf Date: 2016-11-12 (Sat, 12 Nov 2016) --- src/gui/widget/hintbox.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index 3851a247f..eeda08a24 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -38,20 +38,21 @@ -/* - x w - y+-ccw_head----------------------------------------------+ - |icon | caption | buttons |header (ccw_head) - +-ccw_body----------------------------------------------+ - |+-obj_content-----------------------------------------+| - ||+-obj_hint 0----------------------------------------+||body (ccw_body) - h||| obj_picon | obj_text ||| | - ||+---------------------------------------------------+|| +-contents (obj_content) - |+-----------------------------------------------------+| | - +-------------------------------------------------------+ +-hint 0 (obj_hint) default added with new instance of CHintBox - | - | - +-hint n optional added with addHintItem() +/** + x width ccw_head [relevant for CHintBox, CMsgBox. not enabled in CHint class] + + y +---------------------------------------------------------------+/ + |[icon]| caption |[context buttons]| + +===============================================================+ timeout_pb + | + W_FRAME (w_indentation)-----------------------------------+ | + | | | | + height | | [picon] [text] | | ccw_body > container for info box object + | | i n f o b o x (added with addHintItem() | |/ + | | | | + | +-----------------------------------------------------------+ | ccw_footer with buttons [relevant for CMsgBox, not enabled in CHintBox and CHint classes] + + +---------------------------------------------------------------+/ + | ... | + + +---------------------------------------------------------------+ + */ using namespace std; From d1b9a4524a581e0c928b42ecf6056d1317a805e8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 12 Nov 2016 15:05:05 +0100 Subject: [PATCH 78/85] CFileBrowser: use mbrYes as default selection TODO: Re-evaluate the logic of current used messages with risky actions and adjust the buttons accordingly. Reason: is now as default assigned to green button (traffic light principle), and we use stricktly the order of colors from remote control (r,g,g,b), but in some cases it is useful to assign the button to red for risky actions. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/5443cc274c1dd028a33c8197c23d07c2c5dc0e9b Author: Thilo Graf Date: 2016-11-12 (Sat, 12 Nov 2016) --- src/gui/filebrowser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 736fc6b0f..5187baf14 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -800,7 +800,7 @@ bool CFileBrowser::exec(const char * const dirname) _msg << filelist[selected].getFileName(); _msg << " " << g_Locale->getText(LOCALE_FILEBROWSER_DODELETE2); - if (ShowMsg(LOCALE_FILEBROWSER_DELETE, _msg.str(), CMsgBox::mbrNo, CMsgBox::mbYes|CMsgBox::mbNo)==CMsgBox::mbrYes) + if (ShowMsg(LOCALE_FILEBROWSER_DELETE, _msg.str(), CMsgBox::mbrYes, CMsgBox::mbNoYes)==CMsgBox::mbrYes) { std::string n = filelist[selected].Name; recursiveDelete(n.c_str()); From 3b780688001b2ba8a010816ec46f1409da48061c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 15 Nov 2016 19:00:21 +0100 Subject: [PATCH 79/85] CInfoViewer: add missing shadow for timescale enableShadow() needs enum option. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/c8ad32b1e4e0fbd3f037fe8ec24b896c5e65554d Author: Thilo Graf Date: 2016-11-15 (Tue, 15 Nov 2016) --- src/gui/infoviewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 50a9e8879..aac4cdc7e 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1755,7 +1755,7 @@ void CInfoViewer::display_Info(const char *current, const char *next, timescale->setDimensionsAll(pb_startx, pb_starty, pb_w, pb_h); timescale->setActiveColor(COL_INFOBAR_PLUS_7); timescale->setPassiveColor(g_settings.infobar_progressbar ? COL_INFOBAR_PLUS_1 : COL_INFOBAR_PLUS_0); - timescale->enableShadow(!g_settings.infobar_progressbar); + timescale->enableShadow(!g_settings.infobar_progressbar ? CC_SHADOW_ON : CC_SHADOW_OFF, OFFSET_SHADOW/2); timescale->setValues(pb_p, pb_w); //printf("paintProgressBar(%d, %d, %d, %d)\n", BoxEndX - pb_w - OFFSET_SHADOW, ChanNameY - (pb_h + 10) , pb_w, pb_h); From 2e5604e3842e59a03f5d74cb9fe41ecc53a18a4b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 18 Nov 2016 17:46:17 +0100 Subject: [PATCH 80/85] Locales: use generic gui name in messages and windows Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/1b4f976c6bb660c4d442c5ab9547565152ce774f Author: Thilo Graf Date: 2016-11-18 (Fri, 18 Nov 2016) --- data/locale/deutsch.locale | 50 +++++++++++++------------- data/locale/english.locale | 24 ++++++------- data/locale/nederlands.locale | 14 ++++---- data/locale/slovak.locale | 16 ++++----- data/locale/unmaintained/czech.locale | 6 ++-- data/locale/unmaintained/polski.locale | 12 +++---- src/gui/imageinfo.cpp | 2 +- src/neutrino.cpp | 7 ++-- 8 files changed, 67 insertions(+), 64 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 27ac2fba7..ab0782e9b 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -321,7 +321,7 @@ colormenu.background Hintergrundfarbe colormenu.clock_textcolor Ziffernfarbe colormenu.contrast_fonts Schriftkontrast colormenu.fade Ein-/Ausblenden -colormenu.font Neutrino-HD Schriftart +colormenu.font Verwendete Schriftart colormenu.font_ttx Teletext Schriftart colormenu.hd_preset LCD colormenu.menucolors Farben @@ -461,7 +461,7 @@ extra.key_timeshift Timeshift extra.key_unlock Entsperrtaste extra.ladirection Breitengrad-Ausrichtung extra.latitude Breitengrad -extra.loadconfig Neutrino-HD Einstellungen: Laden von +extra.loadconfig Einstellungen: Laden von extra.loadkeys Lade Tastenbelegung von extra.lodirection Längengrad-Ausrichtung extra.longitude Längengrad @@ -473,7 +473,7 @@ extra.rotor_swap Rotor dreht Ost/West extra.rounded_corners Eckendarstellung extra.rounded_corners_off eckig extra.rounded_corners_on abgerundet -extra.saveconfig Neutrino-HD Einstellungen: Sichern als +extra.saveconfig Einstellungen: Sichern als extra.savekeys Speichere Tastenbelegung als extra.scrambled_message Verschlüsselung melden extra.show_mute_icon Mute-Icon bei Lautstärke 0 @@ -732,7 +732,7 @@ fontsize.infobar_info Info fontsize.infobar_number Nummer fontsize.infobar_small Klein fontsize.menu Menütext -fontsize.menu_foot Fußleiste (in allen GUI-Elementen) +fontsize.menu_foot Fußleiste (in allen Fenstern) fontsize.menu_hint Menü-Hilfe fontsize.menu_info Menüinfo fontsize.menu_title Menütitel @@ -965,7 +965,7 @@ menu.hint_adzap_setup Einstellungen für den Werbezapper menu.hint_adzap_writedata Schreibe Daten über den Status des Werbezappers nach /tmp/adzap.data menu.hint_aplay Audioplayer menu.hint_aplay_setup Ändern Sie Audioplayer-Einstellungen wie Titel-Anzeige, Startverzeichnis oder Bildschirmschoner. -menu.hint_audio Audio-Ausgang, Dolby Digital und SRS TruVolume Optionen und mehr +menu.hint_audio Audio-Ausgang, Dolby Digital und SRS TruVolume Optionen etc. menu.hint_audio_adjust_vol_ac3 Lautstärkeanpassung für AC3-Tonspuren menu.hint_audio_adjust_vol_clear Alle gespeicherten Werte für AC3- und PCM-Tonspuren löschen menu.hint_audio_adjust_vol_pcm Lautstärkeanpassung für PCM-Tonspuren @@ -1048,7 +1048,7 @@ menu.hint_eventlist_additional Definiert, ob zusätzliche Informationen im Haupt menu.hint_eventlist_epgplus Definiert, ob EPG Plus (Vorschau-Übersicht) mit der EPG-Taste angezeigt werden sollen menu.hint_eventlist_fonts Ändern Sie die Schriftgröße in der Event-Liste menu.hint_eventlist_setup Wählen Sie die Anzeigeoptionen für die Event-Liste -menu.hint_extended Energiespar-, EPG-Speicher- und Lade-Optionen, HDMI-CEC, Startkanal und mehr +menu.hint_extended Energiespar-, EPG-Speicher- und Lade-Optionen, HDMI-CEC, Startkanal etc. menu.hint_factory Zurücksetzen der Box auf Werkseinstellungen.\nDie Box wird danach neu gestartet menu.hint_fade Bei aktivierter Funktion werden die GUI-Fenster 'weich' ein- bzw. ausgeblendet menu.hint_fan_speed Steuerung der Lüftergeschwindigkeit für die CPU @@ -1079,7 +1079,7 @@ menu.hint_inact_timer Ausschalten der Box nach Inaktivität in Minuten.\nDie Box menu.hint_inactive_back Ändern Sie die Hintergrundfarbe für deaktivierte Fensterinhalte menu.hint_inactive_textcolor Ändern Sie die Textfarbe für deaktivierte Fensterinhalte menu.hint_inet_radio Internetradio -menu.hint_info Informationen über das Image, CPU, Arbeitsspeicher und Stream und mehr +menu.hint_info Informationen über das Image, CPU, Arbeitsspeicher und Stream etc. menu.hint_infobar_back Ändern Sie die Hintergrundfarbe für die Infobar menu.hint_infobar_buttons_usertitle Erzwingt die benutzerdefinierten Titel der Farbtasten menu.hint_infobar_casys ein: zeigt alle Aktiven farbig, Mini: einzelnes Symbol ob gesperrt, Diskret: alle Aktiven CA-Systeme @@ -1159,7 +1159,7 @@ menu.hint_key_volumedown Weisen Sie eine Taste für die Reduzierung der Lautstä menu.hint_key_volumeup Weisen Sie eine Taste für die Erhöhung der Lautstärke zu menu.hint_keys Tastenbelegungen und Fernbedienungs-Abstimmung bearbeiten menu.hint_lang_pref Wählen Sie ihre bevorzugten Tonspuren und Untertitel-Sprachen -menu.hint_language Menü-Sprache, Zeitzone, bevorzugte Tonspuren, Untertitel-Sprachen und mehr +menu.hint_language Menü-Sprache, Zeitzone, bevorzugte Tonspuren, Untertitel-Sprachen etc. menu.hint_last_radio Wählen Sie den Start-Sender im Radio-Modus menu.hint_last_tv Wählen Sie den Start-Sender im TV-Modus menu.hint_last_use Speichert den aktuellen Kanal beim Herunterfahren der Box @@ -1168,7 +1168,7 @@ menu.hint_leds_deepstandby Definiert den Status der Power-LEDs im Deep-Standby menu.hint_leds_record Definiert, ob die Power-LEDs blinken sollen, wenn eine Aufnahme aktiv ist menu.hint_leds_standby Definiert den Status der Power-LEDs im Standby menu.hint_leds_tv Definiert den Status der Power-LEDs im TV-Modus -menu.hint_load Laden der Neutrino-HD-Einstellungen aus einer Datei +menu.hint_load Laden der Einstellungen aus einer Datei menu.hint_longkeypress_duration Tasten, die länger als die angegebene Zeit betätigt werden, werden als "langer Tastendruck" behandelt. menu.hint_lua Plugins ausführen menu.hint_make_hdlist Bei aktiver Option wird ein Bouquet namens 'HD' erzeugt, in dem alle HD-Sender zusammengefasst sind @@ -1228,7 +1228,7 @@ menu.hint_net_telnet Aktiviert Telnet auf Ihrer Box menu.hint_net_test Testet die Netzwerkverbindung:\nPing auf Gateway, Name-Server und externe IP-Adressen menu.hint_net_ushare Freigabe verbundener Datenträger über UPnP menu.hint_net_xupnpd Freigabe von Live Channels über UPNP -menu.hint_network IP-Adresse, Gateway, DNS, Zeit-Sync, Netzwerk-Freigaben, Dienste und mehr +menu.hint_network IP-Adresse, Gateway, DNS, Zeit-Sync, Netzwerk-Freigaben, Dienste etc. menu.hint_new_zap_mode Aktiviert Quickzap in der Kanalliste. Nach Betätigen der Mute-Taste wird mit den Hoch/Runter-Tasten direkt umgeschalten menu.hint_next Weiter zum nächsten Menü.\nDie Taste 'Menü' schließt alle Menüs menu.hint_next_brief Weiter zum nächsten Menü @@ -1237,7 +1237,7 @@ menu.hint_opkg Software-Pakete installieren oder vorhandene aktualisieren menu.hint_opkg_feed_addresses_edit Bearbeiten von Feed-Adressen menu.hint_opkg_install_local_package Paket von USB-Stick, SD, Freigabe oder lokalem Ordner installieren. menu.hint_opkg_upgrade Aktualisiert alle installierten Pakete auf die neueste verfügbare Version -menu.hint_osd Farben, Schriftarten, Anzeigegröße, Ansichtsoptionen der Menüs und mehr +menu.hint_osd Farben, Schriftarten, Anzeigegröße, Ansichtsoptionen der Menüs etc. menu.hint_osd_language Wählen Sie ihre Menü-Sprache menu.hint_osd_preset Wählen Sie zwischen Röhren-TV (CRT) oder Flachbildschirm (LCD) menu.hint_osd_timing Einblendzeit, die das OSD auf dem TV angezeigt wird @@ -1304,12 +1304,12 @@ menu.hint_record_zap_pre_time Stellen Sie eine Vorlaufzeit in Minuten für den U menu.hint_recording Aufnahme-, Timeshift- und Timer-Optionen, Einstellung von aufzunehmenden Tonspuren menu.hint_reload_channels Kanallisten neu laden, um Änderungen wirksam zu machen menu.hint_reload_plugins Plugins neu laden, um Änderungen wirksam zu machen -menu.hint_reset Zurücksetzen von Neutrino-HD-Einstellungen auf Standardwerte. Tuner-Einstellungen und Kanäle bleiben erhalten +menu.hint_reset Zurücksetzen der Einstellungen auf Standardwerte. Tuner-Einstellungen und Kanäle bleiben erhalten menu.hint_restore Wiederherstellen von vorher erstellten Sicherungen menu.hint_rotor_swap Tauschen der Rotordrehrichtung Ost/West in den Motor-Einstellungen menu.hint_rounded_corners Aktiviert die Darstellung abgerundeter Ecken für die Menüs menu.hint_save_settings Speichert ihre Einstellungen -menu.hint_saveas Speichern der Neutrino-HD-Einstellungen in eine Datei +menu.hint_saveas Speichern der Einstellungen in eine Datei menu.hint_scan_auto Automatischer Suchlauf ausgewählter Anbieter menu.hint_scan_autoall Automatischer Suchlauf aller ausgewählten Anbieter menu.hint_scan_autoall_select Suchlauf nur in ausgewählten Satelliten @@ -1400,9 +1400,9 @@ menu.hint_screenshot_video Diese Funktion übernimmt das TV-Bild als Hintergrund menu.hint_scripts Shell-Skripte ausführen menu.hint_selected_back Ändern Sie die Hintergrundfarbe für ausgewählte Fensterinhalte menu.hint_selected_text Ändern Sie die Textfarbe für ausgewählte Fensterinhalte -menu.hint_service Sendersuchlauf, Bouquet-Verwaltung, Software-Aktualisierung und mehr +menu.hint_service Sendersuchlauf, Bouquet-Verwaltung, Software-Aktualisierung etc. menu.hint_service_scan Automatischer / manueller Service Suchlauf -menu.hint_settings Konfigurieren von Neutrino-HD,\nNetzwerk, Video, Audio, OSD und mehr +menu.hint_settings Konfigurieren des Systems,\nNetzwerk, Video, Audio, OSD etc. menu.hint_shoutcast_dev_id Geben Sie die SHOUTcast Dev ID ein. Eine leere Eingabe schaltet die SHOUTcast-Unterstützung aus menu.hint_shoutcast_enabled Schaltet die SHOUTcast-Unterstützung ein oder aus menu.hint_show_mute_icon Definiert, ob bei einem Lautstärkewert von 0 das Stumm-Symbol eingeblendet werden soll @@ -1415,7 +1415,7 @@ menu.hint_sleeptimer Zeitschaltuhr auf Ihrer Box aktivieren\nDie Box fährt dann menu.hint_sleeptimer_min Voreinstellung der Zeitschaltuhr auf Ihrer Box menu.hint_sms_channel Wenn es aktiviert ist, können Sie die Nummern-Tasten in der Kanalliste nutzen, um im SMS-Style zu suchen menu.hint_sms_movie Wenn es aktiviert ist, können Sie die Nummern-Tasten im Moviebrowser nutzen, um im SMS-Style zu suchen -menu.hint_soft_restart Neustarten von Neutrino-HD, ohne die Box neu zu starten +menu.hint_soft_restart Neustarten der Benutzeroberfläche, ohne die Box neu zu starten menu.hint_softupdate_check Im Internet nach verfügbaren Updates suchen, herunterladen und installieren menu.hint_softupdate_check_local Lokal nach verfügbaren Updates suchen und installieren menu.hint_softupdate_createimage_menu Sicherung der aktuellen Software inklusive aller Einstellungen @@ -1425,9 +1425,9 @@ menu.hint_softupdate_expert_write Einzelne Partitionen (Splash, Kernel, SystemFS menu.hint_softupdate_settings Das lokale Update-Verzeichnis und die Konfigurationsdatei festlegen menu.hint_standby Receiver in den Standby Modus versetzen menu.hint_start_tostandby Aktiviert den Standby-Modus direkt nach dem Starten der Box -menu.hint_streaminfo Aktuelle Sender-Informationen über PIDs, SNR-Verhältnis, Bitrate und mehr +menu.hint_streaminfo Aktuelle Sender-Informationen über PIDs, SNR-Verhältnis, Bitrate etc. menu.hint_subchannel_pos Wählen Sie die Anzeigeposition der Unterkanäle aus -menu.hint_sw_update Neutrino-HD aktualisieren, Image sichern und wiederherstellen +menu.hint_sw_update System aktualisieren, Image sichern und wiederherstellen menu.hint_theme Wählen Sie ein vordefiniertes Farbschema, speichern oder laden Sie ihre eigenen Farbschemata menu.hint_timeouts Gibt an, nach welcher Zeit in Sekunden die Menüs oder Infofenster sich automatisch schließen (0 deaktiviert) menu.hint_timer_followscreenings Zeige Terminauswahl mit Folge-Events zur Timerprogrammierung @@ -1451,7 +1451,7 @@ menu.hint_vfd_infoline Wählen Sie, was in der Infozeile angezeigt werden soll menu.hint_vfd_notify_rclock Zeigt eine Meldung im Display, wenn bei gesperrter Fernbedienung eine Taste gedrückt wird menu.hint_vfd_scroll Laufschrift im Display ein- oder ausschalten menu.hint_vfd_statusline Wählen Sie, was in der Statuszeile angezeigt werden soll -menu.hint_video Video-Ausgang, Auflösung, Format, Seitenverhältnisse und mehr +menu.hint_video Video-Ausgang, Auflösung, Format, Seitenverhältnisse etc. menu.hint_video_43mode Anzeige-Modus für 4:3-Inhalte auf 16:9-Fernsehern menu.hint_video_analog_mode Wählen Sie den Modus des Ausgangssignals für den CINCH-Anschluss menu.hint_video_brightness Change picture brightness @@ -1886,7 +1886,7 @@ networkmenu.ssid_scan WLAN-Netzwerke suchen networkmenu.ssid_scan_error Keine WLAN-Netzwerke gefunden. networkmenu.ssid_scan_wait WLAN-Netzwerke werden gesucht... networkmenu.test Netzwerk testen -neutrino_starting Neutrino-HD wird gestartet... +neutrino_starting %s %s wird gestartet... nfs.alreadymounted Verzeichnis bereits gemountet. nfs.automount Beim Start mounten nfs.dir Verzeichnis/Freigabe @@ -2256,8 +2256,8 @@ servicemenu.head Service servicemenu.imageinfo Imageinfo servicemenu.reload Kanallisten neu laden servicemenu.reload_hint Kanallisten werden neu geladen,\nbitte warten... -servicemenu.restart Neutrino-HD neu starten -servicemenu.restart_hint Neutrino-HD wird neu gestartet... +servicemenu.restart GUI neu starten +servicemenu.restart_hint GUI wird neu gestartet... servicemenu.restart_refused_recording Aufnahme läuft. Neustart nicht möglich. servicemenu.scants Kanalsuche servicemenu.update Software-Aktualisierung @@ -2267,8 +2267,8 @@ settings.help Hilfe settings.menu_hints Hinweise anzeigen settings.menu_pos Position settings.menus Menüs -settings.missingoptionsconffile Die Neutrino-HD Einstellungen wurden erweitert.\nDie neuen Werte werden auf Standard gesetzt. -settings.noconffile Die Neutrino-HD Einstellungen wurden nicht\ngefunden. Es werden Standardwerte benutzt. +settings.missingoptionsconffile Die Einstellungen wurden erweitert.\nDie neuen Werte werden auf Standard gesetzt. +settings.noconffile Die Einstellungen wurden nicht\ngefunden. Es werden Standardwerte benutzt. settings.pos_bottom_center unten zentriert settings.pos_bottom_left unten links settings.pos_bottom_right unten rechts @@ -2301,7 +2301,7 @@ streaminfo.head Tech. Information streaminfo.not_available nicht verfügbar streaminfo.resolution Auflösung streaminfo.signal Empfangssignal -streaming.busy Ein oder mehrere Aufnahmeprozesse sind aktiv.\nSollte die Aufnahme eigentlich beendet sein,\nschafft ein Neustart von Neutrino-HD Abhilfe. +streaming.busy Ein oder mehrere Aufnahmeprozesse sind aktiv.\nSollte die Aufnahme eigentlich beendet sein,\nschafft ein Neustart der GUI Abhilfe. streaming.dir_not_writable Das Aufnahmeverzeichnis ist nicht beschreibbar.\nAufnahmen sind daher nicht möglich. streaming.overflow Aufnahme-Puffer Überlauf! Bitte ggf. einige Aufnahmen beenden. streaming.slow System oder Datenträger zu langsam! Bitte ggf. einige Aufnahmen beenden. diff --git a/data/locale/english.locale b/data/locale/english.locale index 6b35e7b8e..b27c5d3e1 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -461,7 +461,7 @@ extra.key_timeshift Timeshift extra.key_unlock Unlock key extra.ladirection LaDirection extra.latitude Latitude -extra.loadconfig Neutrino-HD Settings: Load from +extra.loadconfig Settings: Load from extra.loadkeys Load keys from extra.lodirection LoDirection extra.longitude Longitude @@ -473,7 +473,7 @@ extra.rotor_swap Swap rotor east/west extra.rounded_corners Shape of corners extra.rounded_corners_off angular extra.rounded_corners_on rounded -extra.saveconfig Neutrino-HD Settings: Save as +extra.saveconfig Settings: Save as extra.savekeys Save keys as extra.scrambled_message Scrambled Message extra.show_mute_icon mute-icon at volume 0 @@ -1168,7 +1168,7 @@ menu.hint_leds_deepstandby LEDs state in deeps-standby mode menu.hint_leds_record LEDs state when box recording menu.hint_leds_standby LEDs state in soft-standby mode menu.hint_leds_tv Working LEDs state -menu.hint_load Load Neutrino-HD GUI settings from file +menu.hint_load Load GUI settings from file menu.hint_longkeypress_duration A key press will be considered as "long key press" if it's pressed longer than the specified time. menu.hint_lua Run Lua Plugins menu.hint_make_hdlist Auto-create HD channel list based on\nchannel type and name @@ -1245,7 +1245,7 @@ menu.hint_other_fonts Change other font sizes menu.hint_parentallock_changepin Change PIN code menu.hint_parentallock_lockage Select age allowed to watch menu.hint_parentallock_menu Lock menus with pin code -menu.hint_parentallock_prompt Configure when Neutrino-HD will ask you\nfor PIN code +menu.hint_parentallock_prompt Configure when system will ask you\nfor PIN code menu.hint_personalize Enable, disable or Protect menu items\nConfigure color-buttons user menus menu.hint_pictureviewer_defdir Default picture viewer directory menu.hint_pictureviewer_scaling Picture scaling algorithm @@ -1304,12 +1304,12 @@ menu.hint_record_zap_pre_time For ZapTo timers, switch channel\nbefore event sta menu.hint_recording Recording and timeshift options\nTimers safety, audio pids options menu.hint_reload_channels Reload channels from flash menu.hint_reload_plugins Reload plugins from flash -menu.hint_reset Reset Neutrino-HD GUI settings to defaults\nTuner config and channels not affected +menu.hint_reset Reset GUI settings to defaults\nTuner config and channels not affected menu.hint_restore Restore files from selected backup menu.hint_rotor_swap Swap rotor east/west directions\nin motor control menu.hint_rounded_corners Draw round or rectangular windows corners menu.hint_save_settings Save all settings to flash -menu.hint_saveas Save Neutrino-HD GUI settings to file +menu.hint_saveas Save GUI settings to file menu.hint_scan_auto Auto-scan selected provider menu.hint_scan_autoall Scan several selected providers at once menu.hint_scan_autoall_select Add selected satellites to scan @@ -1402,7 +1402,7 @@ menu.hint_selected_back Change selected item background color menu.hint_selected_text Change selected item text color menu.hint_service Tuner setup, service scan,\nbouquet editor, software upgrade menu.hint_service_scan Auto / manual service scan -menu.hint_settings Configure Neutrino-HD\nNetwork, audio, video, OSD and more +menu.hint_settings Configure System\nNetwork, audio, video, OSD and more menu.hint_shoutcast_dev_id Type your SHOUTcast Dev ID. An empty input disables SHOUTcast support menu.hint_shoutcast_enabled Enable or disable SHOUTcast support menu.hint_show_mute_icon Show mute icon, when volume set to 0 @@ -1415,7 +1415,7 @@ menu.hint_sleeptimer Set timer to put your box\nin sleep mode menu.hint_sleeptimer_min Default setting for sleeptimer menu.hint_sms_channel If enabled, numeric buttons in channel list used to search channel in SMS style menu.hint_sms_movie If enabled, numeric buttons in moviebrowser used to search movie in SMS style -menu.hint_soft_restart Restart Neutrino-HD without reboot +menu.hint_soft_restart Restart GUI without reboot menu.hint_softupdate_check Check online update, download and flash firmware menu.hint_softupdate_check_local Select and flash firmware from local file menu.hint_softupdate_createimage_menu Backup of current software, including all settings @@ -1886,7 +1886,7 @@ networkmenu.ssid_scan WLAN network scan networkmenu.ssid_scan_error No WLAN networks are found. networkmenu.ssid_scan_wait WLAN network scan in progress... networkmenu.test Test network now -neutrino_starting Neutrino-HD starting... +neutrino_starting %s %s starting... nfs.alreadymounted directory already mounted nfs.automount Mount on startup nfs.dir directory/share @@ -2267,8 +2267,8 @@ settings.help Help settings.menu_hints Show menu hints settings.menu_pos Menu position settings.menus Menus -settings.missingoptionsconffile The Neutrino-HD settings have been updated.\nNew Options will be set to default. -settings.noconffile No Neutrino-HD settings found.\nUsing defaults. +settings.missingoptionsconffile The settings have been updated.\nNew Options will be set to default. +settings.noconffile No settings found.\nUsing defaults. settings.pos_bottom_center bottom center settings.pos_bottom_left bottom left settings.pos_bottom_right bottom right @@ -2301,7 +2301,7 @@ streaminfo.head Stream-Information streaminfo.not_available not available streaminfo.resolution Resolution streaminfo.signal Receipt signal -streaming.busy One or several recording processes are active.\nIf you encounter this message and no recording is active, please restart Neutrino-HD. +streaming.busy One or several recording processes are active.\nIf you encounter this message and no recording is active, please restart GUI. streaming.dir_not_writable The recording directory is not writable.\nRecording will not work. streaming.overflow Record buffer overflow, consider to stop some records streaming.slow System/hdd too slow, consider to stop some records diff --git a/data/locale/nederlands.locale b/data/locale/nederlands.locale index 5c81c018d..374aa6f8b 100644 --- a/data/locale/nederlands.locale +++ b/data/locale/nederlands.locale @@ -426,7 +426,7 @@ extra.key_timeshift Timeshift extra.key_unlock Ontgrendel toets extra.ladirection LA richting extra.latitude Breedtegraad (latitude) -extra.loadconfig Neutrino-HD Settings: Laden van +extra.loadconfig Settings: Laden van extra.loadkeys Toetsen laden van extra.lodirection LO richting extra.longitude Lengtegraad (Longitude) @@ -438,7 +438,7 @@ extra.rotor_swap Schakelen rotor oost/west extra.rounded_corners Vorm van hoeken extra.rounded_corners_off Rechthoekig extra.rounded_corners_on Rond -extra.saveconfig Neutrino-HD Settings: Opslaan als... +extra.saveconfig Settings: Opslaan als... extra.savekeys Toetsen opslaan extra.scrambled_message Gecodeerd bericht extra.show_mute_icon Weergave Mute icoon wanneer volume niveau 0 is @@ -1081,7 +1081,7 @@ menu.hint_leds_deepstandby LEDs status in deeps-standby mode menu.hint_leds_record LEDs status wanneer een opname gemaakt wordt menu.hint_leds_standby LEDs status in soft-standby mode menu.hint_leds_tv LEDs status indien de ontvanger in werking is -menu.hint_load Laad Neutrino-HD gebruikersinterface \ninstellingen van back-up bestand +menu.hint_load Laad gebruikersinterface \ninstellingen van back-up bestand menu.hint_longkeypress_duration Een toets-indruk wordt gezien als "lange toets indruk" wanneer deze langer is ingedrukt dan de gespecificeerde tijd. menu.hint_lua Start Lua Plugins menu.hint_make_hdlist Automatisch HD kanalenlijst maken \ngebaseerd op kanaaltype en naam @@ -1299,7 +1299,7 @@ menu.hint_selected_back Wijzig achtergrond kleur van het geselecteerde item menu.hint_selected_text Wijzig test kleur van het geselecteerde item menu.hint_service Tuner instellingen, service scan,\nfavorietenlijst editor, software update menu.hint_service_scan Tuner instellingen, service scan -menu.hint_settings Configureer Neutrino-HD\nNetwerk, audio, video, OSD en meer +menu.hint_settings Configureer sytem\nNetwerk, audio, video, OSD en meer menu.hint_show_mute_icon Mute icoon weergeven wanneer volume op 0 staat. menu.hint_shutdown Schakel uw ontvanger in deep standby modus\n geen bevestiging menu.hint_shutdown_count Tijd voordat uw ontvanger in deepstand-by schakelt vanuit soft-standby modus @@ -1308,7 +1308,7 @@ menu.hint_shutdown_rcdelay Deep standby modus inschakelen wanneer de power toets menu.hint_shutdown_real Soft-standby inschakelen indien soft-standby is \nuitgeschakeld schakelt de ontvanger gelijk in deep standby menu.hint_sleeptimer Timer instellen om uw ontvanger in slaapstand te schakelen menu.hint_sleeptimer_min Standaard instelling voor sleeptimer -menu.hint_soft_restart Herstart Neutrino-HD zonder reboot +menu.hint_soft_restart Herstart GUI zonder reboot menu.hint_softupdate_check Controleer online voor updates, download en installeer deze. menu.hint_softupdate_check_local Selecteer en installeer firmware vanaf een lokaal bestand menu.hint_softupdate_createimage_menu Backup van huidige software, inclusief alle instellingen @@ -1722,7 +1722,7 @@ networkmenu.ssid_scan WLAN netwerk scan networkmenu.ssid_scan_error Geen WLAN netwerken gevonden. networkmenu.ssid_scan_wait WLAN netwerk scan is bezig... networkmenu.test Netwerktest uitvoeren -neutrino_starting Een moment geduld a.u.b... +neutrino_starting %s %s starting ... nfs.alreadymounted directory reeds gekoppeld nfs.automount Koppelen tijdens het opstarten nfs.dir directory/locatie @@ -2071,7 +2071,7 @@ settings.menu_hints Menu hints weergeven settings.menu_pos Menu positie settings.menus Menus settings.missingoptionsconffile De instellingen zijn geupdate.\nNieuwe opties zijn standaard ingesteld. -settings.noconffile Geen Neutrino-HD instellingen gevonden.\nGebruikt standaard instellingen. +settings.noconffile Geen instellingen gevonden.\nGebruikt standaard instellingen. settings.pos_bottom_center midden onder settings.pos_bottom_left Links onder settings.pos_bottom_right Rechts onder diff --git a/data/locale/slovak.locale b/data/locale/slovak.locale index 377798975..1f00f767c 100644 --- a/data/locale/slovak.locale +++ b/data/locale/slovak.locale @@ -461,7 +461,7 @@ extra.key_timeshift Časový posun extra.key_unlock Odblokovanie extra.ladirection Umiestnenie zem.šírky extra.latitude Zem.šírka [N/S] -extra.loadconfig Neutrino-HD: Obnoviť nastavenia z... +extra.loadconfig Obnoviť nastavenia z... extra.loadkeys Obnoviť nastavenia kláves z ... extra.lodirection Umiestnenie zem.dľžky extra.longitude Zem.dľžka [E/W] @@ -473,7 +473,7 @@ extra.rotor_swap Vymeniť východ/západ motoru extra.rounded_corners Vzhľad rohov extra.rounded_corners_off hranatý extra.rounded_corners_on zaoblený -extra.saveconfig Neutrino-HD: Uložiť nastavenia do... +extra.saveconfig Uložiť nastavenia do... extra.savekeys Uložiť nastavenia kláves do ... extra.scrambled_message Správa o kódovaní extra.show_mute_icon Ikona umlčania pri hlasitosti 0 @@ -1168,7 +1168,7 @@ menu.hint_leds_deepstandby Stav LED v režime spánku menu.hint_leds_record Stav LED počas nahrávania menu.hint_leds_standby Stav LED v pohotovostnom režime menu.hint_leds_tv Funkčný stav LED -menu.hint_load Načítanie Neutrino-HD nastavení grafického užívateľského rozhrania (GUI) zo súboru +menu.hint_load Načítanie nastavení grafického užívateľského rozhrania (GUI) zo súboru menu.hint_longkeypress_duration Stlačenie klávesy bude vyhodnotené ako "dlhý stisk klávesy" ak bude stlačené dlhšie ako špecifikovaný čas. menu.hint_lua Spustenie doplnkov menu.hint_make_hdlist Automaticky vytvorí HD zoznam kanálov na základe\ntypu kanálu a názvu @@ -1245,7 +1245,7 @@ menu.hint_other_fonts Zmena veľkostí ďaľšieho písma menu.hint_parentallock_changepin Zmena PIN kódu menu.hint_parentallock_lockage Výber povoleného veku pre sledovanie menu.hint_parentallock_menu Zamknutie ponúk s pin kódom -menu.hint_parentallock_prompt Konfigurácia keď sa Neutrino-HD opýta na PIN kód +menu.hint_parentallock_prompt Konfigurácia keď sa system opýta na PIN kód menu.hint_personalize Povolenie/zakázanie alebo Položky menu zabezpečenia\nKonfigurácia farebných tlačidiel užívateľských ponúk menu.hint_pictureviewer_defdir Predvolená zložka prehliadača obrázkov menu.hint_pictureviewer_scaling Algoritmus mierky obrázku @@ -1309,7 +1309,7 @@ menu.hint_restore Obnova konfigurácie a kanálov zo zvolenej zálohy menu.hint_rotor_swap Výmena umiestnenia motora východ/západ v ovládaní motora menu.hint_rounded_corners Kruhové vykreslovanie alebo zaoblené rohy okien menu.hint_save_settings Uloženie všetkých nastavení do pamäte -menu.hint_saveas Uloženie Neutrino-HD nastavení grafického užívateľského rozhrania (GUI) do súboru +menu.hint_saveas Uloženie nastavení grafického užívateľského rozhrania (GUI) do súboru menu.hint_scan_auto Prehľadanie vybraného satelitu menu.hint_scan_autoall Prehľadanie niektorých vybraných satelitov menu.hint_scan_autoall_select Pridá vybrané satelity do prehľadávania @@ -1402,7 +1402,7 @@ menu.hint_selected_back Zmena farby podkladu označenej položky menu.hint_selected_text Zmena farby textu označenej položky menu.hint_service Nastavenie tuneru, vyhľadanie služieb,\núprava buketov, aktualizácia software menu.hint_service_scan Automatické / manuálne vyhľadávanie staníc, FastScan, Test signálu -menu.hint_settings Konfigurácia Neutrino-HD, sieť, zvuk, obraz, OSD a iné +menu.hint_settings Konfigurácia system, sieť, zvuk, obraz, OSD a iné menu.hint_show_mute_icon Zobrazenie ikony umlčania, ak nastavenie hlasitosťi bude 0 menu.hint_shoutcast_dev_id Vložte vaše SHOUTcast údaje. Neuvedením údajov sa vypne podpora SHOUTcast. menu.hint_shoutcast_enabled Povoliť alebo zakázať podporu SHOUTcast @@ -1415,7 +1415,7 @@ menu.hint_sleeptimer Nastavenie časovača pre prechod prijímača do pohotovost menu.hint_sleeptimer_min Prednastavené nastavenia pre časovač vypnutia menu.hint_sms_channel Ak povolené, číselné klávesy v zozname kanálov budú použité pre vyhľadávanie kanálu v štýle SMS menu.hint_sms_movie Ak povolené, číselné klávesy v prehliadači filmov budú použité pre vyhľadávanie filmu v štýle SMS -menu.hint_soft_restart Reštartovanie Neutrino-HD bez rebootu +menu.hint_soft_restart Reštartovanie GUI bez rebootu menu.hint_softupdate_check Kontrola dostupných aktualizácií, stiahnutie a naprogramovanie firmware menu.hint_softupdate_check_local Výber a programovanie firmware z lokálneho súboru menu.hint_softupdate_createimage_menu Zálohovanie aktuálneho firmware vrátane všetkých nastavení @@ -1884,7 +1884,7 @@ networkmenu.ssid_scan Hľadanie WLAN sietí networkmenu.ssid_scan_error Nenájdené WLAN siete networkmenu.ssid_scan_wait Prebieha hľadanie WLAN sietí networkmenu.test Test siete -neutrino_starting Start Neutrino... +neutrino_starting Start %s %s ... nfs.alreadymounted Zložka je už pripojená nfs.automount Pripojiť pri spustení nfs.dir Zložka / Zdielanie diff --git a/data/locale/unmaintained/czech.locale b/data/locale/unmaintained/czech.locale index 11e1e557d..e2858c8cf 100644 --- a/data/locale/unmaintained/czech.locale +++ b/data/locale/unmaintained/czech.locale @@ -1151,7 +1151,7 @@ menu.hint_other_fonts Zmena velikosti další písma menu.hint_parentallock_changepin Změna PIN kódu menu.hint_parentallock_lockage Výběr povoleného věku pro sledování menu.hint_parentallock_menu Zamknutí nabídek s pin kódem -menu.hint_parentallock_prompt Konfigurace když se Neutrino-HD zeptá na PIN kód +menu.hint_parentallock_prompt Konfigurace když se sytem zeptá na PIN kód menu.hint_personalize Povolení / zakázání nebo Položky menu zabezpečení \nKonfigurace barevných tlačítek uživatelských nabídek menu.hint_pictureviewer_defdir Výchozí adresář prohlížeče obrázků menu.hint_pictureviewer_scaling Algoritmus měřítka obrázku @@ -1305,7 +1305,7 @@ menu.hint_selected_back Změna barvy podkladu označené položky menu.hint_selected_text Změna barvy textu označené položky menu.hint_service Nastavení tuneru, vyhledání služeb, \nÚprava buketů, aktualizace software menu.hint_service_scan Nastavení tuneru, vyhledání služeb -menu.hint_settings Konfigurace Neutrino-HD, síť, zvuk, obraz, OSD a jiné +menu.hint_settings Konfigurace system, síť, zvuk, obraz, OSD a jiné menu.hint_show_mute_icon Zobrazení ikony umlčení, pokud nastavení hlasitosti bude 0 menu.hint_shutdown Přepne váš příjmač do spánku \nBez potvrzování menu.hint_shutdown_count Čas přepnutí přijímače do spánku \nz režimu připravenosti @@ -1314,7 +1314,7 @@ menu.hint_shutdown_rcdelay Použije režim spánku, pokud tlačítko zapnutí \n menu.hint_shutdown_real Použije režim připravenosti \nPokud se nepoužije, tlačítko zapnutí přepne příjmač do spánku menu.hint_sleeptimer Nastavení časovače pro přechod vašeho příjmače \ndo režimu připravenosti menu.hint_sleeptimer_min Přednastavené nastavení pro časovač vypnutí -menu.hint_soft_restart Restartování Neutrino-HD bez rebootu +menu.hint_soft_restart Restartování GUI bez rebootu menu.hint_softupdate_check Kontrola dostupných aktualizací, stažení a naprogramování firmware menu.hint_softupdate_check_local Výběr a programování firmware z lokálního souboru menu.hint_softupdate_createimage_menu Zálohování aktuálního firmware včetně všech nastavení diff --git a/data/locale/unmaintained/polski.locale b/data/locale/unmaintained/polski.locale index 080a1a984..305a5b2e1 100644 --- a/data/locale/unmaintained/polski.locale +++ b/data/locale/unmaintained/polski.locale @@ -1082,7 +1082,7 @@ menu.hint_leds_deepstandby LEDs state in deeps-standby mode menu.hint_leds_record LEDs state when box recording menu.hint_leds_standby LEDs state in soft-standby mode menu.hint_leds_tv Working LEDs state -menu.hint_load Load Neutrino-HD GUI settings from file +menu.hint_load Load settings from file menu.hint_longkeypress_duration A key press will be considered as "long key press" if it's pressed longer than the specified time. menu.hint_lua Pluginy Lua menu.hint_make_hdlist Auto-create HD channel list based on\nchannel type and name @@ -1152,7 +1152,7 @@ menu.hint_other_fonts Change other font sizes menu.hint_parentallock_changepin Change PIN code menu.hint_parentallock_lockage Select age allowed to watch menu.hint_parentallock_menu Lock menus with pin code -menu.hint_parentallock_prompt Configure when Neutrino-HD will ask you\nfor PIN code +menu.hint_parentallock_prompt Configure when system will ask you\nfor PIN code menu.hint_personalize Enable, disable or Protect menu items\nConfigure color-buttons user menus menu.hint_pictureviewer_defdir Default picture viewer directory menu.hint_pictureviewer_scaling Picture scaling algorithm @@ -1210,12 +1210,12 @@ menu.hint_record_zap_pre_time For ZapTo timers, switch channel\nbefore event sta menu.hint_recording Recording and timeshift options\nTimers safety, audio pids options menu.hint_reload_channels Reload channels from flash menu.hint_reload_plugins Reload plugins from flash -menu.hint_reset Reset Neutrino-HD GUI settings to defaults\nTuner config and channels not affected +menu.hint_reset Reset GUI settings to defaults\nTuner config and channels not affected menu.hint_restore Restore files from selected backup menu.hint_rotor_swap Swap rotor east/west directions\nin motor control menu.hint_rounded_corners Draw round or rectangular windows corners menu.hint_save_settings Save all settings to flash -menu.hint_saveas Save Neutrino-HD GUI settings to file +menu.hint_saveas Save GUI settings to file menu.hint_scan_auto Auto-scan selected provider menu.hint_scan_autoall Scan several selected providers at once menu.hint_scan_autoall_select Add selected satellites to scan @@ -1306,7 +1306,7 @@ menu.hint_selected_back Change selected item background color menu.hint_selected_text Change selected item text color menu.hint_service Tuner setup, service scan,\nbouquet editor, software upgrade menu.hint_service_scan Auto / manual service scan -menu.hint_settings Configure Neutrino-HD\nNetwork, audio, video, OSD and more +menu.hint_settings Configure system\nNetwork, audio, video, OSD and more menu.hint_show_mute_icon Show mute icon, when volume set to 0 menu.hint_shutdown Put your box in deep standby mode\nNo confirmation menu.hint_shutdown_count Time to put box in deep-standby\nfrom soft-standby mode @@ -1315,7 +1315,7 @@ menu.hint_shutdown_rcdelay Enable deep-standby, if power button\npressed more th menu.hint_shutdown_real Enable soft-standby mode\nIf disabled, power button put box to deep-standby menu.hint_sleeptimer Set timer to put your box\nin sleep mode menu.hint_sleeptimer_min Default setting for sleeptimer -menu.hint_soft_restart Restart Neutrino-HD without reboot +menu.hint_soft_restart Restart GUI without reboot menu.hint_softupdate_check Check online update, download and flash firmware menu.hint_softupdate_check_local Select and flash firmware from local file menu.hint_softupdate_createimage_menu Backup of current software, including all settings diff --git a/src/gui/imageinfo.cpp b/src/gui/imageinfo.cpp index c3de0d622..feda1034f 100644 --- a/src/gui/imageinfo.cpp +++ b/src/gui/imageinfo.cpp @@ -292,7 +292,7 @@ void CImageInfo::InitInfoData() struct utsname uts_info; - image_info_t imagename = {LOCALE_IMAGEINFO_IMAGE, config.getString("imagename", "Neutrino-HD")}; + image_info_t imagename = {LOCALE_IMAGEINFO_IMAGE, config.getString("imagename", PACKAGE_NAME)}; v_info.push_back(imagename); image_info_t version = {LOCALE_IMAGEINFO_VERSION, version_string}; v_info.push_back(version); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 44b1472e9..a983575b6 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2039,12 +2039,15 @@ TIMER_START(); g_PicViewer = new CPictureViewer(); CColorSetupNotifier::setPalette(); - CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_NEUTRINO_STARTING)); + char start_text [100]; + snprintf(start_text, sizeof(start_text), g_Locale->getText(LOCALE_NEUTRINO_STARTING), PACKAGE_NAME, PACKAGE_VERSION ); + start_text[99] = '\0'; + CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, start_text); hintBox->paint(); CVFD::getInstance()->init(neutrinoFonts->fontDescr.filename.c_str(), neutrinoFonts->fontDescr.name.c_str()); CVFD::getInstance()->Clear(); - CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_NEUTRINO_STARTING)); + CVFD::getInstance()->ShowText(start_text); CVFD::getInstance()->setBacklight(g_settings.backlight_tv); if (!scanSettings.loadSettings(NEUTRINO_SCAN_SETTINGS_FILE)) From 8c23a6d2b0c6784fce2b62feea9c266648d47327 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 18 Nov 2016 17:50:41 +0100 Subject: [PATCH 81/85] src/gui/moviebrowser/mb.cpp fix clean bookmarks Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/ce0bb9fcd05a1886a2864985fe95ef79bffd9b7c Author: Jacek Jendrzej Date: 2016-11-18 (Fri, 18 Nov 2016) --- src/gui/moviebrowser/mb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index a1e3e722b..cdc4e7a7f 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -810,7 +810,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) m_movieSelectionHandler->bookmarks.lastPlayStop =0; for (int i = 0; i < MI_MOVIE_BOOK_USER_MAX; i++) { - m_movieSelectionHandler->bookmarks.user[i].name.empty(); + m_movieSelectionHandler->bookmarks.user[i].name = g_Locale->getText(LOCALE_MOVIEBROWSER_BOOK_NEW); m_movieSelectionHandler->bookmarks.user[i].length =0; m_movieSelectionHandler->bookmarks.user[i].pos =0; } @@ -1438,7 +1438,7 @@ void CMovieBrowser::hideMovieCover(void) void CMovieBrowser::refreshMovieInfo(void) { - TRACE("[mb]->%s m_vMovieInfo.size %d\n", __func__, m_vMovieInfo.size()); + TRACE("[mb]->%s m_vMovieInfo.size %d\n", __func__, (int)m_vMovieInfo.size()); // clear m_pcInfo1 text before new init m_pcInfo1->clear(); From 887bc80d8438126d2f1ecf2f9ab448576efbbb91 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 18 Nov 2016 18:17:10 +0100 Subject: [PATCH 82/85] prepare revision, bump version to 3.4.0 Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/4e3d2c854b7d3631244b12e259a335a6de06f65d Author: Thilo Graf Date: 2016-11-18 (Fri, 18 Nov 2016) --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7fd8adc65..ce09f76b2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(tuxbox-neutrino,1.0.1) +AC_INIT(Tuxbox-Neutrino,3.4.0) AM_INIT_AUTOMAKE([1.0.1 nostdinc]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) From da0b9546fb4cff1c98e80837d98a08ddb4a93f6c Mon Sep 17 00:00:00 2001 From: TangoCash Date: Fri, 18 Nov 2016 21:25:38 +0100 Subject: [PATCH 83/85] [timermanager] fix stop recordings Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/a21eeea6f050854eed21fccf2b9f46f65ec6fcca Author: TangoCash Date: 2016-11-18 (Fri, 18 Nov 2016) --- src/timerd/timermanager.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index a7fecdb5c..ce6e7b4e0 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -1246,8 +1246,6 @@ void CTimerEvent_Record::announceEvent() //------------------------------------------------------------ void CTimerEvent_Record::stopEvent() { - if (adjustToCurrentEPG()) - return; CTimerd::RecordingStopInfo stopinfo; // Set EPG-ID if not set stopinfo.eventID = eventID; From b673a5fd884d3a321a9e88d01a8383399fe949ac Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 18 Nov 2016 17:50:41 +0100 Subject: [PATCH 84/85] src/gui/moviebrowser/mb.cpp fix clean bookmarks Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/534fb3d5fe5a3063957857bc57a4c47b138fdcc1 Author: Jacek Jendrzej Date: 2016-11-18 (Fri, 18 Nov 2016) --- src/gui/moviebrowser/mb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index 9bdf4b642..ab8ac7443 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -810,7 +810,7 @@ int CMovieBrowser::exec(CMenuTarget* parent, const std::string & actionKey) m_movieSelectionHandler->bookmarks.lastPlayStop =0; for (int i = 0; i < MI_MOVIE_BOOK_USER_MAX; i++) { - m_movieSelectionHandler->bookmarks.user[i].name.empty(); + m_movieSelectionHandler->bookmarks.user[i].name = g_Locale->getText(LOCALE_MOVIEBROWSER_BOOK_NEW); m_movieSelectionHandler->bookmarks.user[i].length =0; m_movieSelectionHandler->bookmarks.user[i].pos =0; } @@ -1438,7 +1438,7 @@ void CMovieBrowser::hideMovieCover(void) void CMovieBrowser::refreshMovieInfo(void) { - TRACE("[mb]->%s m_vMovieInfo.size %d\n", __func__, m_vMovieInfo.size()); + TRACE("[mb]->%s m_vMovieInfo.size %d\n", __func__, (int)m_vMovieInfo.size()); // clear m_pcInfo1 text before new init m_pcInfo1->clear(); From cf09b84e0092309ba3deb474f7e40f3160ced9e8 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Fri, 18 Nov 2016 21:25:38 +0100 Subject: [PATCH 85/85] [timermanager] fix stop recordings Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/9d3a48d3c078e2842cc49bd11611854f2ca6bd45 Author: TangoCash Date: 2016-11-18 (Fri, 18 Nov 2016) --- src/timerd/timermanager.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index a7fecdb5c..ce6e7b4e0 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -1246,8 +1246,6 @@ void CTimerEvent_Record::announceEvent() //------------------------------------------------------------ void CTimerEvent_Record::stopEvent() { - if (adjustToCurrentEPG()) - return; CTimerd::RecordingStopInfo stopinfo; // Set EPG-ID if not set stopinfo.eventID = eventID;