Files
neutrino/src/gui/components/cc_frm_button.h
Thilo Graf dde298b1b7 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
2016-10-24 10:31:24 +02:00

326 lines
14 KiB
C++

/*
Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 by Steffen Hehn 'McClean'
Classes for generic GUI-related components.
Copyright (C) 2012, 2013, 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, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef __CC_BUTTONS_H__
#define __CC_BUTTONS_H__
#include <config.h>
#include "cc_base.h"
#include "cc_frm_chain.h"
#include "cc_item_picture.h"
#include "cc_item_text.h"
#include <gui/widget/icons.h>
#include <string>
#include <driver/neutrinofonts.h>
#include <driver/rcinput.h>
#define COL_BUTTON_BODY COL_MENUFOOT_PLUS_0
#define COL_BUTTON_TEXT_ENABLED COL_MENUCONTENTSELECTED_PLUS_0
#define COL_BUTTON_TEXT_DISABLED COL_MENUCONTENTINACTIVE_PLUS_0
//! Sub class of CComponentsForm.
/*!
Shows a button box with caption and optional icon.
*/
class CComponentsButton : public CComponentsFrmChain, public CCTextScreen
{
protected:
///object: picture object
CComponentsPictureScalable *cc_btn_icon_obj;
///object: label object
CComponentsLabel *cc_btn_capt_obj;
///initialize all required attributes and objects
void initVarButton( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
const std::string& icon_name,
CComponentsForm* parent,
bool selected,
bool enabled,
int shadow_mode,
fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow);
///property: button text as string, see also setCaption() and getCaptionString()
std::string cc_btn_capt;
///property: button text as locale, see also setCaption() and getCaptionLocale()
neutrino_locale_t cc_btn_capt_locale;
///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 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)
int cc_btn_alias;
///property: text color
fb_pixel_t cc_btn_capt_col;
///property: text color for disabled button
fb_pixel_t cc_btn_capt_disable_col;
///object: text font
Font* cc_btn_font;
///object: dynamic font object handler
CNeutrinoFonts *cc_btn_dy_font;
///initialize picture object
void initIcon();
///initialize label object
void initCaption();
///initialize picture and label object
void initCCBtnItems();
public:
///basic constructor for button object with most needed params, no button icon is definied here
CComponentsButton( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
const std::string& icon_name = "",
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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);
CComponentsButton( const int& x_pos, const int& y_pos, const int& w, const int& h,
const neutrino_locale_t& caption_locale,
const std::string& icon_name = "",
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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);
CComponentsButton( const int& x_pos, const int& y_pos, const int& w, const int& h,
const neutrino_locale_t& caption_locale,
const char* icon_name = NULL,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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);
CComponentsButton( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
const char* icon_name = NULL,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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
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
* @li bool, default = true
* @return
* void
* @see
* Parent member: CCTextScreen::enableTboxSaveScreen()
* CTextBox::enableSaveScreen()
* disableTboxSaveScreen()
*/
virtual void enableTboxSaveScreen(bool mode)
{
if (cc_txt_save_screen == mode)
return;
cc_txt_save_screen = mode;
for(size_t i=0; i<v_cc_items.size(); i++){
if (v_cc_items[i]->getItemType() == CC_ITEMTYPE_LABEL)
static_cast<CComponentsLabel*>(v_cc_items[i])->enableTboxSaveScreen(cc_txt_save_screen);
}
};
///set caption: parameter as string
virtual void setCaption(const std::string& text);
///set caption: parameter as locale
virtual void setCaption(const neutrino_locale_t locale_text);
///get caption, type as std::string
inline virtual std::string getCaptionString(){return cc_btn_capt;};
///get loacalized caption id, type = neutrino_locale_t
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();};
///reinitialize items
virtual void Refresh(){initCCBtnItems();};
///paint button object
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
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
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
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;};
};
//! Sub class of CComponentsButton.
/*!
Shows a button box with caption and prepared red icon.
*/
class CComponentsButtonRed : public CComponentsButton
{
public:
CComponentsButtonRed( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_RED, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_RED;
};
CComponentsButtonRed( const int& x_pos, const int& y_pos, const int& w, const int& h,
const neutrino_locale_t& caption_locale,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption_locale, NEUTRINO_ICON_BUTTON_RED, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_RED;
};
};
//! Sub class of CComponentsButton.
/*!
Shows a button box with caption and prepared green icon.
*/
class CComponentsButtonGreen : public CComponentsButton
{
public:
CComponentsButtonGreen( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
: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,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption_locale, NEUTRINO_ICON_BUTTON_GREEN, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_GREEN;
};
};
//! Sub class of CComponentsButton.
/*!
Shows a button box with caption and prepared yellow icon.
*/
class CComponentsButtonYellow : public CComponentsButton
{
public:
CComponentsButtonYellow( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_YELLOW, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_YELLOW;
};
CComponentsButtonYellow( const int& x_pos, const int& y_pos, const int& w, const int& h,
const neutrino_locale_t& caption_locale,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption_locale, NEUTRINO_ICON_BUTTON_YELLOW, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_YELLOW;
};
};
//! Sub class of CComponentsButton.
/*!
Shows a button box with caption and prepared blue icon.
*/
class CComponentsButtonBlue : public CComponentsButton
{
public:
CComponentsButtonBlue( const int& x_pos, const int& y_pos, const int& w, const int& h,
const std::string& caption,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_BLUE, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_BLUE;
};
CComponentsButtonBlue( const int& x_pos, const int& y_pos, const int& w, const int& h,
const neutrino_locale_t& caption_locale,
CComponentsForm *parent = NULL,
bool selected = false,
bool enabled = true,
int shadow_mode = CC_SHADOW_OFF,
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)
:CComponentsButton(x_pos, y_pos, w, h, caption_locale, NEUTRINO_ICON_BUTTON_BLUE, parent, selected, enabled, shadow_mode, color_frame, color_body, color_shadow)
{
cc_item_type = CC_ITEMTYPE_BUTTON_BLUE;
};
};
#endif /*__CC_BUTTONS_H__*/