/* Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean 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-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_MSGBOX__ #define __C_MSGBOX__ #ifdef HAVE_CONFIG_H #include #endif #include "hintbox.h" #include #define MSGBOX_MIN_WIDTH HINTBOX_MIN_WIDTH #define MSGBOX_MIN_HEIGHT HINTBOX_MIN_HEIGHT + 75 #define DEFAULT_MSGBOX_TEXT_MODE (CMsgBox::CENTER | CMsgBox::AUTO_WIDTH | CMsgBox::AUTO_HIGH) //! 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 msg_result_t { mbrYes = 0, mbrNo = 1, mbrCancel = 2, mbrBack = 3, mbrOk = 4, mbrTimeout = 5, mbrNone = -1 }; enum button_define_t { mbYes = 0x01, mbNo = 0x02, mbCancel = 0x04, mbBack = 0x08, mbOk = 0x10, mbOKCancel = 0x20, mbYesNoCancel = 0x40, mbYesNo = 0x80, mbNoYes = 0x100, mbAll = 0x200, //unused allign stuff, only for compatibility mbBtnAlignCenter1 = 0x0400, /* centered, large distances */ mbBtnAlignCenter2 = 0x0800, /* centered, small distances */ mbBtnAlignLeft = 0x1000, mbBtnAlignRight = 0x2000 }; enum modes //TODO { 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: void init(const int& Height = -1, const int& ShowButtons = -1, const msg_result_t& Default_result = mbrNone); void refreshFoot(void); int mb_show_button; ///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(); ///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); ///enables/disable button background bool btn_enable_bg; void initButtons(); public: /**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_MSGBOX_TEXT_MODE * * @see class CHintBox() */ 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 = DEFAULT_MSGBOX_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_MSGBOX_TEXT_MODE * * @see class CHintBox() */ 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 = DEFAULT_MSGBOX_TEXT_MODE); // ~CMsgBox(); //inherited /** * exec caller * @return int */ int exec(); /** * 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 * @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, * 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();} /** * 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 * @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, * 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 * @param[in] enable * @li exepts type bool, default = true */ void enableButtonBg(bool enable = true); /** * disables background of buttons */ void disableButtonBg(){enableButtonBg(false);} // bool setText(const std::string* newText); }; 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 = NULL, const int Width = MSGBOX_MIN_WIDTH, const int Timeout = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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, 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 = NO_TIMEOUT, bool returnDefaultOnTimeout = false, 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_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