/* Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean 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-2016 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 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 . */ #ifndef __C_HINTBOX__ #define __C_HINTBOX__ #include #define HINTBOX_MIN_WIDTH 320 // scaled in init #define HINTBOX_MIN_HEIGHT CFrameBuffer::getInstance()->scale2Res(125) #define HINTBOX_MAX_HEIGHT CFrameBuffer::getInstance()->scale2Res(520) #define HINTBOX_DEFAULT_TIMEOUT g_settings.timing[SNeutrinoSettings::TIMING_POPUP_MESSAGES] #define NO_TIMEOUT 0 #define DEFAULT_TIMEOUT -1 //frame around hint container as indent #define W_FRAME OFFSET_INNER_MID //frame color around hint/message box #define HINTBOX_DEFAULT_FRAME_COLOR COL_FRAME #define HINTBOX_DEFAULT_FRAME_WIDTH OFFSET_INNER_SMALL #define TIMEOUT_BAR_HEIGHT OFFSET_SHADOW/2 #define DEFAULT_HINTBOX_TEXT_MODE (CTextBox::CENTER) #define DEFAULT_HEADER_ICON NEUTRINO_ICON_INFO //! 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: int y_hint_obj; int h_hint_obj; int w_indentation; bool enable_txt_scroll; sigc::slot0 sl_tbar_on_timer; bool enable_timeout_bar; Font* hb_font; ///timeout value, see also setTimeOut() int timeout; ///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); ///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, const fb_pixel_t& color_frame, const fb_pixel_t& color_body, const fb_pixel_t& color_shadow, const int& frame_width); virtual void ReSize(); void showTimeOutBar(){initTimeOutBar();} int getMaxWidth(const std::string& Text, const std::string& Title, Font *font, const int& minWidth); public: /**CHintBox Constructor * @param[in] Caption * @li expects type neutrino_locale_t with locale entry from /system/locals.h * @param[in] Text * @li expects type const char*, this is the message text inside the window, text is UTF-8 encoded * @param[in] Width * @li optional: expects type int, defines box width, default value = HINTBOX_MIN_WIDTH * @param[in] Icon * @li optional: expects type const char*, defines the icon name on the left side of titlebar, default = DEFAULT_HEADER_ICON * @param[in] Picon * @li optional: expects type const char*, defines the picon name on the left side of message text, default = NULL (non Icon) * special case: If picon == NEUTRINO_ICON_LOADER, then the animated loader icon known from CHourGlass object will be painted. * @see CHourGlass() * @param[in] header_buttons * @li optional: expects type int, defines the icon name on the right side of titlebar, default = 0 (non Icon) * @see class CComponentsWindow() * @param[in] text_mode * @li optional: expects 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: expects 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, const char * const Icon = DEFAULT_HEADER_ICON, const char * const Picon = NULL, const int& header_buttons = 0, const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME, const fb_pixel_t& color_frame = HINTBOX_DEFAULT_FRAME_COLOR, const fb_pixel_t& color_body = COL_MENUCONTENT_PLUS_0, const fb_pixel_t& color_shadow = COL_SHADOW_PLUS_0, const int& frame_width = HINTBOX_DEFAULT_FRAME_WIDTH); /**CHintBox Constructor * @param[in] Caption * @li expects 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, const char * const Icon = DEFAULT_HEADER_ICON, const char * const Picon = NULL, const int& header_buttons = 0, const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME, const fb_pixel_t& color_frame = HINTBOX_DEFAULT_FRAME_COLOR, const fb_pixel_t& color_body = COL_MENUCONTENT_PLUS_0, const fb_pixel_t& color_shadow = COL_SHADOW_PLUS_0, const int& frame_width = HINTBOX_DEFAULT_FRAME_WIDTH); /**CHintBox Constructor * @param[in] Caption * @li expects type neutrino_locale_t with locale entry from /system/locals.h * @param[in] Text * @li expects 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, const char * const Icon = DEFAULT_HEADER_ICON, const char * const Picon = NULL, const int& header_buttons = 0, const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME, const fb_pixel_t& color_frame = HINTBOX_DEFAULT_FRAME_COLOR, const fb_pixel_t& color_body = COL_MENUCONTENT_PLUS_0, const fb_pixel_t& color_shadow = COL_SHADOW_PLUS_0, const int& frame_width = HINTBOX_DEFAULT_FRAME_WIDTH); /**CHintBox Constructor * @param[in] Caption * @li expects type const char* * @param[in] Text * @li expects 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, const char * const Icon = DEFAULT_HEADER_ICON, const char * const Picon = NULL, const int& header_buttons = 0, const int& text_mode = DEFAULT_HINTBOX_TEXT_MODE, const int& indent = W_FRAME, const fb_pixel_t& color_frame = HINTBOX_DEFAULT_FRAME_COLOR, const fb_pixel_t& color_body = COL_MENUCONTENT_PLUS_0, const fb_pixel_t& color_shadow = COL_SHADOW_PLUS_0, const int& frame_width = HINTBOX_DEFAULT_FRAME_WIDTH); virtual ~CHintBox(); /** * exec caller * @return int */ int exec(); /** * Defines timeout for message window. * Timeout is enabled with parameter1 = DEFAULT_TIMEOUT (-1) or any other value > 0 * To disable timeout use NO_TIMEOUT (0) * @param[in] Timeout as int as seconds * @param[in] enable_Timeout_Bar as bool */ void setTimeOut(const int& Timeout, const bool& enable_Timeout_Bar){timeout = Timeout; enable_timeout_bar = enable_Timeout_Bar;} /** * enable/disable visualized timeout as progressbar under titlebar * @param[in] enable * @li expects type bool, default = true */ void enableTimeOutBar(bool enable = true){enable_timeout_bar = enable;} /** * disable visualized timeout as progressbar under titlebar * @see enableTimeOutBar() */ void disableTimeOutBar(){enableTimeOutBar(false);} /** * init or unload visualized timeout as progressbar under titlebar * @param[in] do_init * @li type bool, default = true */ void initTimeOutBar(bool do_init = true); /** * unload visualized timeout as progressbar * @see initTimeOutBar */ void clearTimeOutBar(){initTimeOutBar(false);} /** * scroll handler for text objects: NOTE: exec() must be called ! * @param[in] hint_id * @li optional: expects 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 for text objects: NOTE: exec() must be called ! * @param[in] hint_id * @li expects 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); /** * Member to add a hint item * @param[in] Text * @li expects type std::string, this is the message text inside the window, text is UTF-8 encoded * @param[in] text_mode * @li optional: expects 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: expects type std::string, defines the picon name on the left side of message text, default = NULL (non Icon)\n * special case: If picon == NEUTRINO_ICON_LOADER, then the animated loader icon known from CHourGlass object will be painted. * @see CHourGlass() * @param[in] color_text * @li optional: expects type fb_pixel_t, defines the text color, default = COL_MENUCONTENT_TEXT * * @param[in] font_text * @li optional: expects 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 = DEFAULT_HINTBOX_TEXT_MODE, const std::string& Picon = std::string(), const fb_pixel_t& color_text = COL_MENUCONTENT_TEXT, Font* font_text = NULL); /** * Member to add a hint item from specified cc-item type * @param[in] cc_Item * @li expects type CComponentsItem*, allows to add any possible cc-item type * * @see /gui/components/cc_types.h */ void addHintItem(CComponentsItem* cc_Item){ccw_body->addCCItem(cc_Item);} /** * Sets a text to a hint item. * @param[in] Text * @li expects type std::string, this is the message text inside the hint item, text is UTF-8 encoded * @param[in] hint_id * @li optional: expects type unsigned int, default = 0 for the first or one and only item * @param[in] text_mode * @li optional: expects 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: expects type fb_pixel_t, defines the text color, default = COL_MENUCONTENT_TEXT * * @param[in] style * @li optional: expects 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, 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); void setMsgText(const neutrino_locale_t& locale, 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); }; /** * 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); 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 { private: int delay; void initHint(bool enable_bg) { paint_bg = enable_bg; ccw_show_header = false; ccw_show_footer = false; cc_item_type.name = "wg.hint"; delay = 0; } public: /**CHint Constructor * @param[in] Text * @li expects type const char*, this is the message text inside the window, text is UTF-8 encoded * @param[in] show_background * @li optional: expects type bool, enable/disable backround paint, default = true */ CHint(const char * const Text, bool show_background = true, const char * const Picon = NULL); /**CHint Constructor * @param[in] Text * @li expects type neutrino_locale_t, this is the message text inside the window, text is UTF-8 encoded * @param[in] show_background * @li optional: expects type bool, enable/disable backround paint, default = true */ CHint(const neutrino_locale_t Text, bool show_background = true, const char * const Picon = NULL); virtual void setDelay(int d) {delay = d;} virtual ~CHint() { if (delay) { setTimeOut(delay, false); exec(); } }; }; //! Sub class of CHintBox. Shows a simplified hint as a text hint without footer and optional header. /*! CLoaderHint provides a small window with header and text item, optional disable/enable background, picon and delay */ class CLoaderHint : public CHintBox { private: int delay; void initHint(bool enable_bg, bool enable_header) { paint_bg = enable_bg; ccw_show_header = enable_header; ccw_show_footer = false; cc_item_type.name = "wg.loader_hint"; delay = 1; } public: /**CLoaderHint Constructor * @param[in] Text * @li expects type const char*, this is the message text inside the window, text is UTF-8 encoded * @param[in] show_background * @li optional: expects type bool, enable/disable background paint, default = true * @param[in] Picon * @li optional: expects type std::string, defines the picon name on the left side of message text, default = NEUTRINO_ICON_LOADER * @param[in] enable_header * @li optional: expects type bool, enable or disable header for message window, default = false * @see CHourGlass() */ CLoaderHint(const char * const Text, bool show_background = true, const char * const Picon = NEUTRINO_ICON_LOADER, bool enable_header = false); /**Overloaded localized CLoaderHint Constructor * @param[in] Text * @li expects type neutrino_locale_t, this is the message text inside the window, text is UTF-8 encoded * @see for other parameters: CLoaderHint() */ CLoaderHint(const neutrino_locale_t Text, bool show_background = true, const char * const Picon = NEUTRINO_ICON_LOADER, bool enable_header = false); virtual void setDelay(int d) {delay = d;} virtual ~CLoaderHint() { if (delay) { setTimeOut(delay, false); exec(); } }; }; typedef struct hint_message_data_t { sigc::slot slot; std::string text; neutrino_locale_t text_locale; int timeout; bool show_background; const char *Picon; // hint_message_data_t(): text(std::string()), // text_locale(NONEXISTANT_LOCALE), // timeout(HINTBOX_DEFAULT_TIMEOUT), // show_background(true), // Picon(NULL){} } hint_message_data_struct_t; /** * Simplified methodes to show hintboxes without titlebar and footer * Text is UTF-8 encoded * @param[in] Text * @li expects type neutrino_locale_t or const char* * @param[in] timeout * @li optional: expects type int as seconds, default = HINTBOX_DEFAULT_TIMEOUT (get from settings) * @param[in] show_background * @li optional: expects 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, const char * const Picon = NULL); int ShowHintS(const char * const Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true, const char * const Picon = NULL); int ShowHintS(const std::string &Text, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true, const char * const Picon = NULL); /** * Simplified methodes to show hintboxes without titlebar and footer with mounted function as slot for custom action * Text is UTF-8 encoded * @param[in] Text * @li expects type neutrino_locale_t or const char* * @param[in] Slot * @li expects sigc::slot * @li example: * @li sigc::slot sl = sigc::mem_fun(g_Plugins, &CPlugins::loadPlugins);\n * ShowHintS(LOCALE_SERVICEMENU_GETPLUGINS_HINT, sl, 1); * @li or use a function with parameter(s): * sigc::slot sl = sigc::bind(sigc::mem_fun(*this, &CMyClass::foo), arg1, arg2, arg3, arg4);\n * ShowHintS(LOCALE_SERVICEMENU_GETPLUGINS_HINT, sl, 1); * @param[in] timeout * @li optional: expects type int as seconds, default = HINTBOX_DEFAULT_TIMEOUT (get from settings) * @param[in] show_background * @li optional: expects type bool, enable/disable backround paint, default = true */ int ShowHintS(const neutrino_locale_t Text, const sigc::slot &Slot, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true, const char * const Picon = NULL); int ShowHintS(const char * const Text, const sigc::slot &Slot, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true, const char * const Picon = NULL); int ShowHintS(const std::string &Text, const sigc::slot &Slot, int timeout = HINTBOX_DEFAULT_TIMEOUT, bool show_background = true, const char * const Picon = NULL); int ShowHintS(const hint_message_data_t &hint_data); int ShowHintS(const std::vector &v_hint_data); #endif