diff --git a/src/gui/buildinfo.cpp b/src/gui/buildinfo.cpp index 275209980..a6f424b2a 100644 --- a/src/gui/buildinfo.cpp +++ b/src/gui/buildinfo.cpp @@ -57,11 +57,6 @@ void CBuildInfo::initVarBuildInfo() shadow = true; } -CBuildInfo::~CBuildInfo() -{ - cleanCCForm(); -} - int CBuildInfo::exec(CMenuTarget* parent, const string & /*actionKey*/) { @@ -174,7 +169,7 @@ void CBuildInfo::InitInfoItems() return; //ensure a clean body - ccw_body->clearCCItems(); + ccw_body->clear(); //define size and position int x_info = 10; diff --git a/src/gui/buildinfo.h b/src/gui/buildinfo.h index 4a091506c..14a341232 100644 --- a/src/gui/buildinfo.h +++ b/src/gui/buildinfo.h @@ -70,7 +70,7 @@ class CBuildInfo : public CMenuTarget, public CComponentsWindow }; CBuildInfo(); - ~CBuildInfo(); + ///assigns text Font type void setFontType(Font* font_text); build_info_t getInfo(const info_type_id_t& type_id); diff --git a/src/gui/components/cc.h b/src/gui/components/cc.h index 54e612954..3383752ec 100644 --- a/src/gui/components/cc.h +++ b/src/gui/components/cc.h @@ -46,9 +46,12 @@ Basic attributes and member functions for component sub classes #include "cc_frm_button.h" #include "cc_frm_chain.h" #include "cc_frm_clock.h" +#include "cc_frm_ext_text.h" +#include "cc_frm_header.h" +#include "cc_frm_icons.h" #include "cc_frm_signalbars.h" #include "cc_frm_slider.h" - +#include "cc_frm_window.h" #endif /*__N_COMPONENTS__*/ diff --git a/src/gui/components/cc_base.cpp b/src/gui/components/cc_base.cpp index 4684ceb28..8b30596b9 100644 --- a/src/gui/components/cc_base.cpp +++ b/src/gui/components/cc_base.cpp @@ -44,7 +44,7 @@ CComponents::~CComponents() { hide(); clearSavedScreen(); - clear(); + clearFbData(); } void CComponents::clearSavedScreen() @@ -196,7 +196,7 @@ inline void CComponents::hide() } } - clear(); + clearFbData(); is_painted = false; } @@ -205,13 +205,13 @@ void CComponents::kill() { for(size_t i =0; i< v_fbdata.size() ;i++) frameBuffer->paintBackgroundBoxRel(v_fbdata[i].x, v_fbdata[i].y, v_fbdata[i].dx, v_fbdata[i].dy); - clear(); + clearFbData(); firstPaint = true; is_painted = false; } //clean old screen buffer -inline void CComponents::clear() +inline void CComponents::clearFbData() { for(size_t i =0; i< v_fbdata.size() ;i++) if (v_fbdata[i].pixbuf) diff --git a/src/gui/components/cc_base.h b/src/gui/components/cc_base.h index bf2eeb5cd..a726361a8 100644 --- a/src/gui/components/cc_base.h +++ b/src/gui/components/cc_base.h @@ -105,7 +105,7 @@ class CComponents void paintFbItems(bool do_save_bg = true); ///clean up old screen buffer saved in v_fbdata - virtual void clear(); + virtual void clearFbData(); ///container: contains saved pixel buffer with position and dimensions comp_screen_data_t saved_screen; @@ -166,6 +166,8 @@ class CComponents ///set frame color inline virtual void setColorFrame(fb_pixel_t color){col_frame = color;}; + ///set selected frame color + inline virtual void setColorFrameSel(fb_pixel_t color){col_frame_sel = color;}; ///set body color inline virtual void setColorBody(fb_pixel_t color){col_body = color;}; ///set shadow color diff --git a/src/gui/components/cc_detailsline.cpp b/src/gui/components/cc_detailsline.cpp index 8eab8b047..6a032d454 100644 --- a/src/gui/components/cc_detailsline.cpp +++ b/src/gui/components/cc_detailsline.cpp @@ -85,7 +85,7 @@ CComponentsDetailLine::~CComponentsDetailLine() //paint details line with current parameters void CComponentsDetailLine::paint(bool do_save_bg) { - clear(); + clearFbData(); int y_mark_top = y-h_mark_top/2+thickness/2; int y_mark_down = y_down-h_mark_down/2+thickness/2; diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index bfa2839ae..7ae3f9490 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012, 2013, Thilo Graf 'dbt' + Copyright (C) 2012, 2013, 2014 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -18,10 +18,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -66,21 +64,11 @@ CComponentsForm::CComponentsForm(const int x_pos, const int y_pos, const int w, CComponentsForm::~CComponentsForm() { - cleanCCForm(); -} - -void CComponentsForm::cleanCCForm() -{ -#ifdef DEBUG_CC - printf("[CComponentsForm] [%s - %d] clean up...\n", __func__, __LINE__); -#endif - - clearCCItems(); + clear(); } - -void CComponentsForm::clearCCItems() +void CComponentsForm::clear() { if (v_cc_items.empty()) return; @@ -355,6 +343,9 @@ void CComponentsForm::paintCCItems() int right_item = cc_item->getRealXPos() + w_item; int w_diff = right_item - right_frm; int new_w = w_item - w_diff; + //avoid of width error due to odd values (1 line only) + right_item -= (new_w%2); + w_item -= (new_w%2); if (right_item > right_frm){ printf("[CComponentsForm] %s: [form: %d] [item-index %d] [type=%d] width is too large, definied width=%d, possible width=%d \n", __func__, cc_item_index, cc_item->getIndex(), cc_item->getItemType(), w_item, new_w); @@ -366,6 +357,9 @@ void CComponentsForm::paintCCItems() int bottom_item = cc_item->getRealYPos() + h_item; int h_diff = bottom_item - bottom_frm; int new_h = h_item - h_diff; + //avoid of height error due to odd values (1 line only) + bottom_item -= (new_h%2); + h_item -= (new_h%2); if (bottom_item > bottom_frm){ printf("[CComponentsForm] %s: [form: %d] [item-index %d] [type=%d] height is too large, definied height=%d, possible height=%d \n", __func__, cc_item_index, cc_item->getIndex(), cc_item->getItemType(), h_item, new_h); diff --git a/src/gui/components/cc_frm.h b/src/gui/components/cc_frm.h index 183ca728f..bbd60e263 100644 --- a/src/gui/components/cc_frm.h +++ b/src/gui/components/cc_frm.h @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012, 2013, Thilo Graf 'dbt' + Copyright (C) 2012, 2013, 2014, Thilo Graf 'dbt' License: GPL @@ -17,10 +17,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifndef __CC_FORM_H__ @@ -29,10 +27,6 @@ #include "config.h" #include -#include -#include -#include -#include class CComponentsForm : public CComponentsItem @@ -40,7 +34,7 @@ class CComponentsForm : public CComponentsItem private: void initVarForm(); protected: - std::vector v_cc_items; + std::vector v_cc_items; void paintForm(bool do_save_bg); ///generates next possible index for an item, see also cc_item_index, getIndex(), setIndex() int genIndex(); @@ -68,357 +62,15 @@ class CComponentsForm : public CComponentsItem virtual int getCCItemId(CComponentsItem* cc_Item); virtual CComponentsItem* getCCItem(const uint& cc_item_id); virtual void paintCCItems(); - virtual void clearCCItems(); - virtual void cleanCCForm(); + + ///clean up and deallocate existant items from v_cc_items at once + virtual void clear(); + ///return true, if no items available + virtual bool empty(){return v_cc_items.empty();}; + ///return size (count) of available items + virtual size_t size(){return v_cc_items.size();}; + virtual void setAppendOffset(const int &h_offset, const int& v_offset){append_h_offset = h_offset; append_v_offset = v_offset;}; }; -class CComponentsIconForm : public CComponentsForm -{ - private: - std::vector v_icons; - int ccif_offset, ccif_icon_align; - void initMaxHeight(int *pheight); - - protected: - void initVarIconForm(); - - public: - CComponentsIconForm(); - CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector &v_icon_names, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); -// ~CComponentsIconForm(); //inherited from CComponentsForm - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void initCCIcons(); - void addIcon(const std::string& icon_name); - void addIcon(std::vector icon_name); - void removeIcons(){v_icons.clear();}; - void insertIcon(const uint& icon_id, const std::string& icon_name); - void removeIcon(const uint& icon_id); - void removeIcon(const std::string& icon_name); - void removeAllIcons(); - void setIconOffset(const int offset){ccif_offset = offset;}; - - enum //alignements - { - CC_ICONS_FRM_ALIGN_RIGHT , - CC_ICONS_FRM_ALIGN_LEFT - }; - void setIconAlign(int alignment){ccif_icon_align = alignment;}; - - int getIconId(const std::string& icon_name); -}; - - - -class CComponentsHeader : public CComponentsForm -{ - private: - void initVarHeader(); - protected: - CComponentsPicture * cch_icon_obj; - CComponentsText * cch_text_obj; - CComponentsIconForm * cch_btn_obj; - std::string cch_text; - const char* cch_icon_name; - fb_pixel_t cch_col_text; - Font* cch_font; - int cch_items_y, cch_icon_x, cch_icon_w, cch_text_x, cch_buttons, cch_buttons_w, cch_buttons_h, cch_buttons_space, cch_offset; - std::vector v_cch_btn; - int cch_size_mode; - int cch_caption_align; - bool userHeight; - - void initIcon(); - void initCaption(); - void initButtons(); - void initDefaultButtons(); - void initButtonFormSize(); - - public: - enum - { - CC_BTN_HELP = 0x02, - CC_BTN_INFO = 0x04, - CC_BTN_MENU = 0x40, - CC_BTN_EXIT = 0x80 - - }; - - enum - { - CC_HEADER_ITEM_ICON = 0, - CC_HEADER_ITEM_TEXT = 1, - CC_HEADER_ITEM_BUTTONS = 2 - }; - - enum - { - CC_HEADER_SIZE_LARGE = 0, - CC_HEADER_SIZE_SMALL = 1 - }; - CComponentsHeader(); - CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, const std::string& caption = "header", const char* icon_name = NULL, const int buttons = 0, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, neutrino_locale_t caption_locale = NONEXISTANT_LOCALE, const char* icon_name = NULL, const int buttons = 0,bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - virtual ~CComponentsHeader(); - - - virtual void setCaption(const std::string& caption, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); - virtual void setCaption(neutrino_locale_t caption_locale, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); - virtual void setCaptionAlignment(const int& align_mode){cch_caption_align = align_mode;}; - virtual void setCaptionFont(Font* font_name); - virtual void setCaptionColor(fb_pixel_t text_color){cch_col_text = text_color;}; - virtual void setOffset(const int offset){cch_offset = offset;}; - virtual void setIcon(const char* icon_name); - virtual void addButtonIcon(const std::string& button_name); - virtual void removeButtonIcons(); - virtual void setDefaultButtons(const int buttons); - virtual void setButtonsSpace(const int buttons_space){cch_buttons_space = buttons_space;}; - virtual void initCCItems(); - virtual void setSizeMode(const int& size_mode){cch_size_mode = size_mode;}; - virtual CComponentsText* getTextObject(){return cch_text_obj;}; - virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); -}; - - -class CComponentsFooter : public CComponentsHeader -{ - protected: - void initVarFooter(); - public: - CComponentsFooter(); - CComponentsFooter( const int x_pos, const int y_pos, const int w, const int h = 0, - const int buttons = 0, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_INFOBAR_SHADOW_PLUS_1, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); -}; - -//! Sub class of CComponentsForm. Shows a window with prepared items. -/*! -CComponentsWindow provides prepared items like header, footer and a container for -items like text, labels, pictures ... -*/ -/* - x - y+-------------------------------------------------------+ - |icon caption buttons |header (ccw_head) - +-x-----------------------------------------------------+ - |cc_item0 | - |cc_item1 |body (ccw_body) - | add items here directly with | - | addWindowItem() or | - y with ccw_body->addCCItem() | - | Note: x/y related to body object | - | | - +-------------------------------------------------------+ - | add cc_items with ccw_footer->addCCItem() |footer(ccw_footer) - +-------------------------------------------------------+ - -*/ - -class CComponentsWindow : public CComponentsForm -{ - protected: - ///object: header object, to get access to header properties see also getHeaderObject() - CComponentsHeader * ccw_head; - ///object: body object, this is the container for all needed items, to add with addWindowItem() - CComponentsForm * ccw_body; - ///object: footer object, to get access to header properties see also getFooterObject( - CComponentsFooter * ccw_footer; - ///property: caption in header, see also getHeaderObject() - std::string ccw_caption; - ///property: alignment mode for header caption - int ccw_align_mode; - ///property: icon name in header, see also getHeaderObject() - const char* ccw_icon_name; - ///property: assigned default icon buttons in header, see also getHeaderObject() - int ccw_buttons; - ///property: value = true, let show footer, see showFooter() - bool ccw_show_footer; - ///property: value = true, let show header, see showHeader() - bool ccw_show_header; - - ///initialze header object - void initHeader(); - ///initialze body object - void initBody(); - ///initialze footer object - void initFooter(); - ///initialze all window objects at once - void initCCWItems(); - ///initialize all attributes - void initVarWindow(); - - public: - enum - { - CC_WINDOW_ITEM_HEADER = 0 - }; - ///simple constructor for CComponentsWindow - CComponentsWindow(); - - ///advanced constructor for CComponentsWindow, provides parameters for the most required properties, and caption as string - CComponentsWindow( const int x_pos, const int y_pos, const int w, const int h, - const std::string& caption, - const char* iconname = NULL, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, - fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, - fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - - ///advanced constructor for CComponentsWindow, provides parameters for the most required properties, and caption from locales - CComponentsWindow( const int x_pos, const int y_pos, const int w, const int h, - neutrino_locale_t locale_caption, - const char* iconname = NULL, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, - fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, - fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - - ///simple constructor for CComponentsWindow, provides parameters for caption as string and icon, position of window is general centered and bound - ///to current screen settings, this shows a window over full screen - CComponentsWindow(const std::string& caption, const char* iconname = NULL); - - ///simple constructor for CComponentsWindow, provides parameters for caption from locales and icon, position of window is general centered and bound - ///to current screen settings, this shows a window over full screen - CComponentsWindow(neutrino_locale_t locale_caption, const char* iconname = NULL); - - ~CComponentsWindow(); - - ///add item to body object, also usable is addCCItem() to add items to the windo object - void addWindowItem(CComponentsItem* cc_Item); - - ///allow/disallow paint a footer, default true, see also ccw_show_footer, showHeader() - void showFooter(bool show = true){ccw_show_footer = show; initCCWItems();}; - ///allow/disallow paint a header, default true, see also ccw_show_header, showFooter() - void showHeader(bool show = true){ccw_show_header = show; initCCWItems();}; - - ///set caption in header with string, see also getHeaderObject() - void setWindowCaption(const std::string& text, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK){ccw_caption = text; ccw_align_mode = align_mode;}; - - ///set caption in header from locales, see also getHeaderObject() - void setWindowCaption(neutrino_locale_t locale_text, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); - ///set caption alignment - void setWindowCaptionAlignment(const int& align_mode){ccw_align_mode = align_mode;}; - - ///set icon name in header, see also getHeaderObject() - void setWindowIcon(const char* iconname){ccw_icon_name = iconname;}; - - ///set default header icon buttons, see also getHeaderObject() - void setWindowHeaderButtons(const int& buttons){ccw_buttons = buttons;}; - - ///returns a pointer to the internal header object, use this to get access to header properities - CComponentsHeader* getHeaderObject(){return ccw_head;}; - - ///returns a pointer to the internal body object, use this to get access to body properities - CComponentsForm* getBodyObject(){return ccw_body;}; - ///returns a pointer to the internal footer object, use this to get access to footer properities - CComponentsFooter* getFooterObject(){return ccw_footer;}; - - ///refresh position and dimension and reinitialize elemenatary properties - void Refresh(){initCCWItems();}; - - ///paint all window items, this overwriting paint() from CComponentsForm - virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); -}; - - -class CComponentsExtTextForm : public CComponentsForm -{ - private: - ///property: content of label, see also setLabelAndText() - std::string ccx_label_text; - ///property: content of text, see also setLabelAndText() - std::string ccx_text; - ///property: color of label text, see also setLabelAndTextColor() - fb_pixel_t ccx_label_color; - ///property: color of text, see also setLabelAndTextColor() - fb_pixel_t ccx_text_color; - ///property: mode of label text, see also setTextModes() - int ccx_label_align; - ///property: mode of text, see also setTextModes() - int ccx_text_align; - ///property: width of label, see also setLabelWidthPercent() - int ccx_label_width; - ///property: width of text, see also setLabelWidthPercent() - int ccx_text_width; - ///property: font type of both items (label and text), see also setLabelAndText() - Font* ccx_font; - ///property: percentage val of label width related to full width, causes fit of text automatically into the available remaining size of item, see also setLabelWidthPercent() - uint8_t ccx_percent_label_w; - - ///object: label object - CComponentsLabel *ccx_label_obj; - ///object: text object - CComponentsText *ccx_text_obj; - - ///initialize of properties for all objects - void initCCTextItems(); - ///initialize the label object - void initLabel(); - ///initialize the text object - void initText(); - - protected: - ///initialize basic variables - void initVarExtTextForm(const int x_pos = 1, const int y_pos = 1, const int w = 300, const int h = 27, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t label_color = COL_MENUCONTENTINACTIVE_TEXT, - fb_pixel_t text_color = COL_MENUCONTENT_TEXT, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - - public: - ///simple constructor for CComponentsExtTextForm - CComponentsExtTextForm(); - - ///advanced constructor for CComponentsExtTextForm, provides parameters for the most required properties, and caption as string - CComponentsExtTextForm( const int x_pos, const int y_pos, const int w, const int h, - const std::string& label_text, const std::string& text, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t label_color = COL_MENUCONTENTINACTIVE_TEXT, - fb_pixel_t text_color = COL_MENUCONTENT_TEXT, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - - ///advanced constructor for CComponentsExtTextForm, provides parameters for the most required properties, and caption as locales - CComponentsExtTextForm( const int x_pos, const int y_pos, const int w, const int h, - const neutrino_locale_t& locale_label_text, const neutrino_locale_t& locale_text, - bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t label_color = COL_MENUCONTENTINACTIVE_TEXT, - fb_pixel_t text_color = COL_MENUCONTENT_TEXT, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); -// ~CComponentsExtTextForm(); //inherited from CComponentsForm - - ///assigns texts for label and text, parameter as string, parameter Font is optional for required font type, default font is dependently from defined item height - void setLabelAndText(const std::string& label_text, const std::string& text, Font* font_text = NULL); - ///assigns texts for label and text, parameter as neutrino_locale_t, parameter Font is optional for required font type, default font is dependently from defined item height - void setLabelAndText(const neutrino_locale_t& locale_label_text, const neutrino_locale_t& locale_text, Font* font_text = NULL); - ///assigns text Font type - void setLabelAndTextFont(Font* font); - - ///assigns texts for label and text, parameter as struct (locale_ext_txt_t), parameters provide the same properties like setLabelAndText() - void setLabelAndTexts(const locale_ext_txt_t& texts); - ///assigns texts for label and text, parameter as struct (string_ext_txt_t), parameters provide the same properties like setLabelAndText() - void setLabelAndTexts(const string_ext_txt_t& locale_texts); - - ///assigns colors for text for label text, parameter as fb_pixel_t - void setLabelAndTextColor(const fb_pixel_t label_color , const fb_pixel_t text_color); - - ///assigns width of label and text related to width, parameter as uint8_t in percent of width, fits text automatically into the available remaining size of item - void setLabelWidthPercent(const uint8_t& percent_val); - - ///returns a pointer to the internal label object, use this to get access to its most properties - CComponentsLabel*getLabelObject(){return ccx_label_obj;}; - ///returns a pointer to the internal text object, use this to get access to its most properties - CComponentsText*getTextObject(){return ccx_text_obj;}; - - ///sets the text modes (mainly text alignment) to the label and text object, see /gui/widget/textbox.h for possible modes - void setTextModes(const int& label_mode, const int& text_mode); - - ///paint this item/form - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); -}; - #endif diff --git a/src/gui/components/cc_frm_clock.cpp b/src/gui/components/cc_frm_clock.cpp index 6802476d3..c3d6e6bfe 100644 --- a/src/gui/components/cc_frm_clock.cpp +++ b/src/gui/components/cc_frm_clock.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Generic GUI-related component. - Copyright (C) 2013, Thilo Graf 'dbt' + Copyright (C) 2013, 2014 Thilo Graf 'dbt' License: GPL @@ -17,10 +17,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -135,7 +133,7 @@ void CComponentsFrmClock::initCCLockItems() if (v_cc_items.size() != s_time.size()){ //clean up possible old items before add new items - clearCCItems(); + clear(); //create new empty label objects, set some general properties and add to container for (size_t i = 0; i < s_time.size(); i++){ @@ -355,10 +353,10 @@ void CComponentsFrmClock::paint(bool do_save_bg) paintForm(do_save_bg); } -void CComponentsFrmClock::setClockFontSize(int size) +void CComponentsFrmClock::setClockFontSize(int font_size) { int tmp_w = 0; - dyn_font_size = size; + dyn_font_size = font_size; cl_font = CNeutrinoFonts::getInstance()->getDynFont(tmp_w, dyn_font_size, "", CNeutrinoFonts::FONT_STYLE_BOLD, CNeutrinoFonts::FONT_ID_INFOCLOCK); } diff --git a/src/gui/components/cc_frm_clock.h b/src/gui/components/cc_frm_clock.h index d08336310..f9065f877 100644 --- a/src/gui/components/cc_frm_clock.h +++ b/src/gui/components/cc_frm_clock.h @@ -100,7 +100,7 @@ class CComponentsFrmClock : public CComponentsForm ///set font type or font size for segments virtual void setClockFont(int font); - virtual void setClockFontSize(int size); + virtual void setClockFontSize(int font_size); ///set text color virtual void setTextColor(fb_pixel_t color_text){ cl_col_text = color_text;}; diff --git a/src/gui/components/cc_frm_ext_text.cpp b/src/gui/components/cc_frm_ext_text.cpp index d44c940d0..05196bd78 100644 --- a/src/gui/components/cc_frm_ext_text.cpp +++ b/src/gui/components/cc_frm_ext_text.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2013, Thilo Graf 'dbt' + Copyright (C) 2013, 2014 Thilo Graf 'dbt' License: GPL @@ -17,10 +17,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -29,49 +27,37 @@ #include #include - -#include "cc_frm.h" +#include "cc_frm_ext_text.h" #define DEF_HEIGHT 27 #define DEF_LABEL_WIDTH_PERCENT 30 -#define DEF_WIDTH 300 using namespace std; -CComponentsExtTextForm::CComponentsExtTextForm() -{ - initVarExtTextForm(); - initCCTextItems(); -} - -CComponentsExtTextForm::CComponentsExtTextForm( const int x_pos, const int y_pos, const int w, const int h, +CComponentsExtTextForm::CComponentsExtTextForm( const int& x_pos, const int& y_pos, const int& w, const int& h, const std::string& label_text, const std::string& text, bool has_shadow, fb_pixel_t label_color, fb_pixel_t text_color, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { - initVarExtTextForm(x_pos, y_pos, w, h, has_shadow, label_color, text_color, color_frame, color_body, color_shadow); - ccx_label_text = label_text; - ccx_text = text; + initVarExtTextForm(x_pos, y_pos, w, h, label_text, text, has_shadow, label_color, text_color, color_frame, color_body, color_shadow); initCCTextItems(); } -CComponentsExtTextForm::CComponentsExtTextForm( const int x_pos, const int y_pos, const int w, const int h, - const neutrino_locale_t& locale_label_text, const neutrino_locale_t& locale_text, - bool has_shadow, - fb_pixel_t label_color, - fb_pixel_t text_color, - fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) -{ - initVarExtTextForm(x_pos, y_pos, w, h, has_shadow, label_color, text_color, color_frame, color_body, color_shadow); - ccx_label_text = g_Locale->getText(locale_label_text); - ccx_text = g_Locale->getText(locale_text); +CComponentsExtTextFormLocalized::CComponentsExtTextFormLocalized(const int& x_pos, const int& y_pos, const int& w, const int& h, + const neutrino_locale_t& locale_label_text, const neutrino_locale_t& locale_text, + bool has_shadow, + fb_pixel_t label_color, + fb_pixel_t text_color, + fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) + : CComponentsExtTextForm( x_pos, y_pos, w, h, + g_Locale->getText(locale_label_text), g_Locale->getText(locale_text), + has_shadow, + label_color, text_color, color_frame, color_body, color_shadow){}; - initCCTextItems(); -} - -void CComponentsExtTextForm::initVarExtTextForm(const int x_pos, const int y_pos, const int w, const int h, +void CComponentsExtTextForm::initVarExtTextForm(const int& x_pos, const int& y_pos, const int& w, const int& h, + const std::string& label_text, const std::string& text, bool has_shadow, fb_pixel_t label_color, fb_pixel_t text_color, @@ -90,8 +76,8 @@ void CComponentsExtTextForm::initVarExtTextForm(const int x_pos, const int y_pos height = h; - ccx_label_text = ""; - ccx_text = ""; + ccx_label_text = label_text; + ccx_text = text; shadow = has_shadow; ccx_label_color = label_color; ccx_text_color = text_color; diff --git a/src/gui/components/cc_frm_ext_text.h b/src/gui/components/cc_frm_ext_text.h new file mode 100644 index 000000000..59a837b97 --- /dev/null +++ b/src/gui/components/cc_frm_ext_text.h @@ -0,0 +1,128 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2013, 2014, 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 __CC_FORM_EXT_TEXT_H__ +#define __CC_FORM_EXT_TEXT_H__ + +#include "cc_frm.h" +#include "cc_item_text.h" + + +class CComponentsExtTextForm : public CComponentsForm +{ + private: + ///property: content of label, see also setLabelAndText() + std::string ccx_label_text; + ///property: content of text, see also setLabelAndText() + std::string ccx_text; + ///property: color of label text, see also setLabelAndTextColor() + fb_pixel_t ccx_label_color; + ///property: color of text, see also setLabelAndTextColor() + fb_pixel_t ccx_text_color; + ///property: mode of label text, see also setTextModes() + int ccx_label_align; + ///property: mode of text, see also setTextModes() + int ccx_text_align; + ///property: width of label, see also setLabelWidthPercent() + int ccx_label_width; + ///property: width of text, see also setLabelWidthPercent() + int ccx_text_width; + ///property: font type of both items (label and text), see also setLabelAndText() + Font* ccx_font; + ///property: percentage val of label width related to full width, causes fit of text automatically into the available remaining size of item, see also setLabelWidthPercent() + uint8_t ccx_percent_label_w; + + ///object: label object + CComponentsLabel *ccx_label_obj; + ///object: text object + CComponentsText *ccx_text_obj; + + ///initialize of properties for all objects + void initCCTextItems(); + ///initialize the label object + void initLabel(); + ///initialize the text object + void initText(); + + protected: + ///initialize basic variables + void initVarExtTextForm(const int& x_pos, const int& y_pos, const int& w, const int& h, + const std::string& label_text, const std::string& text, + bool has_shadow, + fb_pixel_t label_color, + fb_pixel_t text_color, + fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow); + + public: + ///advanced constructor for CComponentsExtTextForm, provides parameters for the most required properties, and caption as string + CComponentsExtTextForm( const int& x_pos = 1, const int& y_pos = 1, const int& w = 300, const int& h = 48, + const std::string& label_text = "", const std::string& text = "", + bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t label_color = COL_MENUCONTENTINACTIVE_TEXT, + fb_pixel_t text_color = COL_MENUCONTENT_TEXT, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); +// ~CComponentsExtTextForm(); //inherited from CComponentsForm + + ///assigns texts for label and text, parameter as string, parameter Font is optional for required font type, default font is dependently from defined item height + void setLabelAndText(const std::string& label_text, const std::string& text, Font* font_text = NULL); + ///assigns texts for label and text, parameter as neutrino_locale_t, parameter Font is optional for required font type, default font is dependently from defined item height + void setLabelAndText(const neutrino_locale_t& locale_label_text, const neutrino_locale_t& locale_text, Font* font_text = NULL); + ///assigns text Font type + void setLabelAndTextFont(Font* font); + + ///assigns texts for label and text, parameter as struct (locale_ext_txt_t), parameters provide the same properties like setLabelAndText() + void setLabelAndTexts(const locale_ext_txt_t& texts); + ///assigns texts for label and text, parameter as struct (string_ext_txt_t), parameters provide the same properties like setLabelAndText() + void setLabelAndTexts(const string_ext_txt_t& locale_texts); + + ///assigns colors for text for label text, parameter as fb_pixel_t + void setLabelAndTextColor(const fb_pixel_t label_color , const fb_pixel_t text_color); + + ///assigns width of label and text related to width, parameter as uint8_t in percent of width, fits text automatically into the available remaining size of item + void setLabelWidthPercent(const uint8_t& percent_val); + + ///returns a pointer to the internal label object, use this to get access to its most properties + CComponentsLabel*getLabelObject(){return ccx_label_obj;}; + ///returns a pointer to the internal text object, use this to get access to its most properties + CComponentsText*getTextObject(){return ccx_text_obj;}; + + ///sets the text modes (mainly text alignment) to the label and text object, see /gui/widget/textbox.h for possible modes + void setTextModes(const int& label_mode, const int& text_mode); + + ///paint this item/form + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); +}; + +class CComponentsExtTextFormLocalized : public CComponentsExtTextForm +{ + public: + ///advanced constructor for CComponentsExtTextForm, provides parameters for the most required properties, and caption as locales + CComponentsExtTextFormLocalized(const int& x_pos = 1, const int& y_pos = 1, const int& w = 300, const int& h = 48, + const neutrino_locale_t& locale_label_text = NONEXISTANT_LOCALE, const neutrino_locale_t& locale_text = NONEXISTANT_LOCALE, + bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t label_color = COL_MENUCONTENTINACTIVE_TEXT, + fb_pixel_t text_color = COL_MENUCONTENT_TEXT, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); +}; + +#endif diff --git a/src/gui/components/cc_frm_header.cpp b/src/gui/components/cc_frm_header.cpp index 0270fe618..d1f14e5fd 100644 --- a/src/gui/components/cc_frm_header.cpp +++ b/src/gui/components/cc_frm_header.cpp @@ -1,9 +1,9 @@ /* - Based up Neutrino-GUI - Tuxbox-Project + 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' + Copyright (C) 2012, 2013, 2014 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -18,10 +18,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -30,7 +28,7 @@ #include #include -#include "cc_frm.h" +#include "cc_frm_header.h" using namespace std; diff --git a/src/gui/components/cc_frm_header.h b/src/gui/components/cc_frm_header.h new file mode 100644 index 000000000..d681b57b5 --- /dev/null +++ b/src/gui/components/cc_frm_header.h @@ -0,0 +1,117 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, 2014, 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 __CC_FORM_HEADER_H__ +#define __CC_FORM_HEADER_H__ + + +#include "cc_frm.h" +#include "cc_item_picture.h" +#include "cc_item_text.h" +#include "cc_frm_icons.h" + +class CComponentsHeader : public CComponentsForm +{ + private: + void initVarHeader(); + protected: + CComponentsPicture * cch_icon_obj; + CComponentsText * cch_text_obj; + CComponentsIconForm * cch_btn_obj; + std::string cch_text; + const char* cch_icon_name; + fb_pixel_t cch_col_text; + Font* cch_font; + int cch_items_y, cch_icon_x, cch_icon_w, cch_text_x, cch_buttons, cch_buttons_w, cch_buttons_h, cch_buttons_space, cch_offset; + std::vector v_cch_btn; + int cch_size_mode; + int cch_caption_align; + bool userHeight; + + void initIcon(); + void initCaption(); + void initButtons(); + void initDefaultButtons(); + void initButtonFormSize(); + + public: + enum + { + CC_BTN_HELP = 0x02, + CC_BTN_INFO = 0x04, + CC_BTN_MENU = 0x40, + CC_BTN_EXIT = 0x80 + + }; + + enum + { + CC_HEADER_ITEM_ICON = 0, + CC_HEADER_ITEM_TEXT = 1, + CC_HEADER_ITEM_BUTTONS = 2 + }; + + enum + { + CC_HEADER_SIZE_LARGE = 0, + CC_HEADER_SIZE_SMALL = 1 + }; + CComponentsHeader(); + CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, const std::string& caption = "header", const char* icon_name = NULL, const int buttons = 0, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, neutrino_locale_t caption_locale = NONEXISTANT_LOCALE, const char* icon_name = NULL, const int buttons = 0,bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + virtual ~CComponentsHeader(); + + + virtual void setCaption(const std::string& caption, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); + virtual void setCaption(neutrino_locale_t caption_locale, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); + virtual void setCaptionAlignment(const int& align_mode){cch_caption_align = align_mode;}; + virtual void setCaptionFont(Font* font_name); + virtual void setCaptionColor(fb_pixel_t text_color){cch_col_text = text_color;}; + virtual void setOffset(const int offset){cch_offset = offset;}; + virtual void setIcon(const char* icon_name); + virtual void addButtonIcon(const std::string& button_name); + virtual void removeButtonIcons(); + virtual void setDefaultButtons(const int buttons); + virtual void setButtonsSpace(const int buttons_space){cch_buttons_space = buttons_space;}; + virtual void initCCItems(); + virtual void setSizeMode(const int& size_mode){cch_size_mode = size_mode;}; + virtual CComponentsText* getTextObject(){return cch_text_obj;}; + virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); +}; + + +class CComponentsFooter : public CComponentsHeader +{ + protected: + void initVarFooter(); + public: + CComponentsFooter(); + CComponentsFooter( const int x_pos, const int y_pos, const int w, const int h = 0, + const int buttons = 0, + bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_INFOBAR_SHADOW_PLUS_1, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); +}; + +#endif diff --git a/src/gui/components/cc_frm_icons.cpp b/src/gui/components/cc_frm_icons.cpp index 4bb19468a..1092491f2 100644 --- a/src/gui/components/cc_frm_icons.cpp +++ b/src/gui/components/cc_frm_icons.cpp @@ -3,7 +3,7 @@ Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. - Copyright (C) 2012, 2013, Thilo Graf 'dbt' + Copyright (C) 2012, 2013, 2014 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -18,10 +18,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -30,7 +28,7 @@ #include #include -#include "cc_frm.h" +#include "cc_frm_icons.h" using namespace std; @@ -110,7 +108,7 @@ int CComponentsIconForm::getIconId(const std::string& icon_name) //to remove old items before add new icons, otherwise icons will be appended. void CComponentsIconForm::removeAllIcons() { - clearCCItems(); + clear(); v_icons.clear(); } diff --git a/src/gui/components/cc_frm_icons.h b/src/gui/components/cc_frm_icons.h new file mode 100644 index 000000000..c33755719 --- /dev/null +++ b/src/gui/components/cc_frm_icons.h @@ -0,0 +1,67 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, 2014, 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 __CC_FORM_ICONS_H__ +#define __CC_FORM_ICONS_H__ + +#include "cc_frm.h" +#include "cc_frm_icons.h" + +class CComponentsIconForm : public CComponentsForm +{ + private: + std::vector v_icons; + int ccif_offset, ccif_icon_align; + void initMaxHeight(int *pheight); + + protected: + void initVarIconForm(); + + public: + CComponentsIconForm(); + CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector &v_icon_names, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); +// ~CComponentsIconForm(); //inherited from CComponentsForm + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void initCCIcons(); + void addIcon(const std::string& icon_name); + void addIcon(std::vector icon_name); + void removeIcons(){v_icons.clear();}; + void insertIcon(const uint& icon_id, const std::string& icon_name); + void removeIcon(const uint& icon_id); + void removeIcon(const std::string& icon_name); + void removeAllIcons(); + void setIconOffset(const int offset){ccif_offset = offset;}; + + enum //alignements + { + CC_ICONS_FRM_ALIGN_RIGHT , + CC_ICONS_FRM_ALIGN_LEFT + }; + void setIconAlign(int alignment){ccif_icon_align = alignment;}; + + int getIconId(const std::string& icon_name); +}; + +#endif diff --git a/src/gui/components/cc_frm_slider.cpp b/src/gui/components/cc_frm_slider.cpp index 50b5f5fbd..f61b37fa6 100644 --- a/src/gui/components/cc_frm_slider.cpp +++ b/src/gui/components/cc_frm_slider.cpp @@ -97,17 +97,18 @@ void CComponentsSlider::setValueScale(const int& min_value, const int& max_value void CComponentsSlider::initCCSlBody() { if (!csl_body_icon.empty()){ - printf("[CComponentsSlider] [%s] missing or undefinied slider body icon %s\n", __func__, csl_body_icon.c_str()); if (csl_body_obj == NULL){ - csl_body_obj = new CComponentsPicture(0, 0, 0, height, csl_body_icon); + csl_body_obj = new CComponentsPicture(0, 0, 0, 0, csl_body_icon); csl_body_obj->doPaintBg(false); addCCItem(csl_body_obj); } else csl_body_obj->setPicture(csl_body_icon); } - else + else{ + printf("[CComponentsSlider] [%s] missing or undefinied slider body icon %s\n", __func__, csl_body_icon.c_str()); return; + } //get first icon dimensions int icon_w = csl_body_obj->getWidth(); @@ -127,7 +128,6 @@ void CComponentsSlider::initCCSlBody() void CComponentsSlider::initCCSlSlider() { if (!csl_slider_icon.empty()){ - printf("[CComponentsSlider] [%s] missing or undefinied slider icon %s\n", __func__, csl_slider_icon.c_str()); if (csl_slider_obj == NULL){ csl_slider_obj = new CComponentsPicture(0, 0, 0, 0, csl_slider_icon); csl_slider_obj->doPaintBg(false); @@ -136,8 +136,10 @@ void CComponentsSlider::initCCSlSlider() else csl_slider_obj->setPicture(csl_slider_icon); } - else + else{ + printf("[CComponentsSlider] [%s] missing or undefinied slider icon %s\n", __func__, csl_slider_icon.c_str()); return; + } //get first icon dimensions int slider_w = csl_slider_obj->getWidth(); @@ -157,6 +159,12 @@ void CComponentsSlider::initCCSlItems() initCCSlSlider(); } +void CComponentsSlider::setSliderIcon(const std::string &icon_name) +{ + csl_slider_icon = icon_name; + initCCSlSlider(); +} + // void CComponentsSlider::paint(bool do_save_bg) // { // //prepare items before paint diff --git a/src/gui/components/cc_frm_slider.h b/src/gui/components/cc_frm_slider.h index 9f6672f9d..9241dc49c 100644 --- a/src/gui/components/cc_frm_slider.h +++ b/src/gui/components/cc_frm_slider.h @@ -85,6 +85,7 @@ class CComponentsSlider : public CComponentsForm void setValuePos(const int& current_value); void setValueScale(const int& min_value, const int& max_value); + void setSliderIcon(const std::string &icon_name); // void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); }; diff --git a/src/gui/components/cc_frm_window.cpp b/src/gui/components/cc_frm_window.cpp index fd24999cf..8bd6e4c74 100644 --- a/src/gui/components/cc_frm_window.cpp +++ b/src/gui/components/cc_frm_window.cpp @@ -1,9 +1,9 @@ /* - Based up Neutrino-GUI - Tuxbox-Project + 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' + Copyright (C) 2012, 2013, 2014 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -18,10 +18,8 @@ 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. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -30,7 +28,7 @@ #include #include -#include "cc_frm.h" +#include "cc_frm_window.h" #include using namespace std; @@ -47,7 +45,7 @@ CComponentsWindow::CComponentsWindow() CComponentsWindow::CComponentsWindow(const std::string& caption, const char* iconname) { initVarWindow(); - + ccw_caption = caption; ccw_icon_name = iconname; @@ -57,7 +55,7 @@ CComponentsWindow::CComponentsWindow(const std::string& caption, const char* ico CComponentsWindow::CComponentsWindow(neutrino_locale_t locale_caption, const char* iconname) { initVarWindow(); - + ccw_caption = g_Locale->getText(locale_caption); ccw_icon_name = iconname; diff --git a/src/gui/components/cc_frm_window.h b/src/gui/components/cc_frm_window.h new file mode 100644 index 000000000..80e7e49f3 --- /dev/null +++ b/src/gui/components/cc_frm_window.h @@ -0,0 +1,160 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, 2014, 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 __CC_FORM_WINDOW_H__ +#define __CC_FORM_WINDOW_H__ + +#include "cc_frm.h" +#include "cc_frm_icons.h" +#include "cc_frm_header.h" + +//! Sub class of CComponentsForm. Shows a window with prepared items. +/*! +CComponentsWindow provides prepared items like header, footer and a container for +items like text, labels, pictures ... +*/ +/* + x + y+-------------------------------------------------------+ + |icon caption buttons |header (ccw_head) + +-x-----------------------------------------------------+ + |cc_item0 | + |cc_item1 |body (ccw_body) + | add items here directly with | + | addWindowItem() or | + y with ccw_body->addCCItem() | + | Note: x/y related to body object | + | | + +-------------------------------------------------------+ + | add cc_items with ccw_footer->addCCItem() |footer(ccw_footer) + +-------------------------------------------------------+ + +*/ + +class CComponentsWindow : public CComponentsForm +{ + protected: + ///object: header object, to get access to header properties see also getHeaderObject() + CComponentsHeader * ccw_head; + ///object: body object, this is the container for all needed items, to add with addWindowItem() + CComponentsForm * ccw_body; + ///object: footer object, to get access to header properties see also getFooterObject( + CComponentsFooter * ccw_footer; + ///property: caption in header, see also getHeaderObject() + std::string ccw_caption; + ///property: alignment mode for header caption + int ccw_align_mode; + ///property: icon name in header, see also getHeaderObject() + const char* ccw_icon_name; + ///property: assigned default icon buttons in header, see also getHeaderObject() + int ccw_buttons; + ///property: value = true, let show footer, see showFooter() + bool ccw_show_footer; + ///property: value = true, let show header, see showHeader() + bool ccw_show_header; + + ///initialze header object + void initHeader(); + ///initialze body object + void initBody(); + ///initialze footer object + void initFooter(); + ///initialze all window objects at once + void initCCWItems(); + ///initialize all attributes + void initVarWindow(); + + public: + enum + { + CC_WINDOW_ITEM_HEADER = 0 + }; + ///simple constructor for CComponentsWindow + CComponentsWindow(); + + ///advanced constructor for CComponentsWindow, provides parameters for the most required properties, and caption as string + CComponentsWindow( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, + const char* iconname = NULL, + bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, + fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, + fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + + ///advanced constructor for CComponentsWindow, provides parameters for the most required properties, and caption from locales + CComponentsWindow( const int x_pos, const int y_pos, const int w, const int h, + neutrino_locale_t locale_caption, + const char* iconname = NULL, + bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, + fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, + fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + + ///simple constructor for CComponentsWindow, provides parameters for caption as string and icon, position of window is general centered and bound + ///to current screen settings, this shows a window over full screen + CComponentsWindow(const std::string& caption, const char* iconname = NULL); + + ///simple constructor for CComponentsWindow, provides parameters for caption from locales and icon, position of window is general centered and bound + ///to current screen settings, this shows a window over full screen + CComponentsWindow(neutrino_locale_t locale_caption, const char* iconname = NULL); + + ~CComponentsWindow(); + + ///add item to body object, also usable is addCCItem() to add items to the windo object + void addWindowItem(CComponentsItem* cc_Item); + + ///allow/disallow paint a footer, default true, see also ccw_show_footer, showHeader() + void showFooter(bool show = true){ccw_show_footer = show; initCCWItems();}; + ///allow/disallow paint a header, default true, see also ccw_show_header, showFooter() + void showHeader(bool show = true){ccw_show_header = show; initCCWItems();}; + + ///set caption in header with string, see also getHeaderObject() + void setWindowCaption(const std::string& text, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK){ccw_caption = text; ccw_align_mode = align_mode;}; + + ///set caption in header from locales, see also getHeaderObject() + void setWindowCaption(neutrino_locale_t locale_text, const int& align_mode = CTextBox::NO_AUTO_LINEBREAK); + ///set caption alignment + void setWindowCaptionAlignment(const int& align_mode){ccw_align_mode = align_mode;}; + + ///set icon name in header, see also getHeaderObject() + void setWindowIcon(const char* iconname){ccw_icon_name = iconname;}; + + ///set default header icon buttons, see also getHeaderObject() + void setWindowHeaderButtons(const int& buttons){ccw_buttons = buttons;}; + + ///returns a pointer to the internal header object, use this to get access to header properities + CComponentsHeader* getHeaderObject(){return ccw_head;}; + + ///returns a pointer to the internal body object, use this to get access to body properities + CComponentsForm* getBodyObject(){return ccw_body;}; + ///returns a pointer to the internal footer object, use this to get access to footer properities + CComponentsFooter* getFooterObject(){return ccw_footer;}; + + ///refresh position and dimension and reinitialize elemenatary properties + void Refresh(){initCCWItems();}; + + ///paint all window items, this overwriting paint() from CComponentsForm + virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); +}; + +#endif diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 9a3ecdb86..08902596b 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -63,7 +63,7 @@ void CComponentsItem::initVarItem() // If backround is not required, it's possible to override this with variable paint_bg=false, use doPaintBg(true/false) to set this! void CComponentsItem::paintInit(bool do_save_bg) { - clear(); + clearFbData(); int th = fr_thickness; fb_pixel_t col_frame_cur = col_frame; diff --git a/src/gui/dboxinfo.cpp b/src/gui/dboxinfo.cpp index a5122086f..c397e73cc 100644 --- a/src/gui/dboxinfo.cpp +++ b/src/gui/dboxinfo.cpp @@ -6,14 +6,6 @@ (C) 2009-2011, 2013-2014 Stefan Seyfried - 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 @@ -191,10 +183,10 @@ static std::string bytes2string(uint64_t bytes, bool binary) char result[80]; if (b < base) - snprintf(result, sizeof(result), "%d%s%02d ", (int)b, g_Locale->getText(LOCALE_UNIT_DECIMAL), - (int)((bytes - b * factor) * 100 / factor)); + snprintf(result, sizeof(result), "%llu%s%02llu ", b, g_Locale->getText(LOCALE_UNIT_DECIMAL), + (bytes - b * factor) * 100 / factor); else // no need for fractions for larger numbers - snprintf(result, sizeof(result), "%d ", (int)bytes); + snprintf(result, sizeof(result), "%llu ", b); std::string res(result); if (*unit) { @@ -505,19 +497,16 @@ void CDBoxInfoWidget::paint() int ypos_mnt_head = ypos; ypos += mheight; + int width_i = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("i", true); + for (std::map::iterator it = mounts.begin(); it != mounts.end(); ++it) { struct statfs s; if (::statfs((*it).first.c_str(), &s) == 0) { if (s.f_blocks > 0) { - int percent_used; - uint64_t bytes_total; - uint64_t bytes_used; - uint64_t bytes_free; - bytes_total = s.f_blocks * s.f_bsize; - bytes_free = s.f_bfree * s.f_bsize; - bytes_used = bytes_total - bytes_free; - percent_used = (bytes_used * 200 + bytes_total) / 2 / bytes_total; - int width_i = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("i", true); + uint64_t bytes_total = s.f_blocks * s.f_bsize; + uint64_t bytes_free = s.f_bfree * s.f_bsize; + uint64_t bytes_used = bytes_total - bytes_free; + int percent_used = (bytes_used * 200 + bytes_total) / 2 / bytes_total; //paint mountpoints for (int column = 0; column < headSize; column++) { std::string tmp; diff --git a/src/gui/infoclock.cpp b/src/gui/infoclock.cpp index f9a08f8ad..0a96fad82 100644 --- a/src/gui/infoclock.cpp +++ b/src/gui/infoclock.cpp @@ -83,10 +83,8 @@ void CInfoClock::Init() int x_old = x, y_old = y, width_old = width, height_old = height; CVolumeHelper::getInstance()->refresh(cl_font); CVolumeHelper::getInstance()->getInfoClockDimensions(&x, &y, &width, &height); - if ((x_old != x) || (y_old != y) || (width_old != width) || (height_old != height)) { - cleanCCForm(); - clearCCItems(); - } + if ((x_old != x) || (y_old != y) || (width_old != width) || (height_old != height)) + clear(); // set corner radius depending on clock height corner_rad = (g_settings.rounded_corners) ? std::max(height/10, CORNER_RADIUS_SMALL) : 0; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 67fadb87b..e814a7d80 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -664,6 +664,10 @@ void CMoviePlayerGui::PlayFile(void) } else if (msg == (neutrino_msg_t) g_settings.mpkey_stop) { playstate = CMoviePlayerGui::STOPPED; } else if (msg == (neutrino_msg_t) g_settings.mpkey_play) { + if (time_forced) { + time_forced = false; + FileTime.kill(); + } if (playstate > CMoviePlayerGui::PLAY) { playstate = CMoviePlayerGui::PLAY; speed = 1; @@ -673,10 +677,6 @@ void CMoviePlayerGui::PlayFile(void) if (!timeshift) callInfoViewer(/*duration, position*/); } - if (time_forced) { - time_forced = false; - FileTime.hide(); - } } else if (msg == (neutrino_msg_t) g_settings.mpkey_pause) { if (playstate == CMoviePlayerGui::PAUSE) { playstate = CMoviePlayerGui::PLAY; @@ -730,13 +730,12 @@ void CMoviePlayerGui::PlayFile(void) } //update_lcd = true; - if (!timeshift) - callInfoViewer(/*duration, position*/); - - if (!FileTime.IsVisible()) { - FileTime.show(position); + if (!FileTime.IsVisible() && !time_forced) { + FileTime.switchMode(position, duration); time_forced = true; } + if (!timeshift) + callInfoViewer(/*duration, position*/); } else if (msg == CRCInput::RC_1) { // Jump Backwards 1 minute clearSubtitle(); playback->SetPosition(-60 * 1000); @@ -779,7 +778,7 @@ void CMoviePlayerGui::PlayFile(void) //showHelpTS(); } else if(timeshift && (msg == CRCInput::RC_text || msg == CRCInput::RC_epg || msg == NeutrinoMessages::SHOW_EPG)) { bool restore = FileTime.IsVisible(); - FileTime.hide(); + FileTime.kill(); if( msg == CRCInput::RC_epg ) g_EventList->exec(CNeutrinoApp::getInstance()->channelList->getActiveChannel_ChannelID(), CNeutrinoApp::getInstance()->channelList->getActiveChannelName()); @@ -862,7 +861,7 @@ void CMoviePlayerGui::PlayFile(void) } } - FileTime.hide(); + FileTime.kill(); clearSubtitle(); playback->SetSpeed(1); diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 2cff96f7b..112901e0c 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -439,13 +439,11 @@ printf("C: %d S: %d T: %d\n", CFEManager::getInstance()->haveCable(),CFEManager: mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); settings->addItem(mf); #endif + settings->addItem(GenericMenuSeparatorLine); } if (CFEManager::getInstance()->haveCable()) { r_system = DVB_C; - //-------------------------------------------------------------- - //settings->addItem(GenericMenuSeparatorLine); - //-------------------------------------------------------------- //tune timeout if(CFEManager::getInstance()->getFrontendCount() <= 1) { CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); @@ -479,6 +477,7 @@ printf("C: %d S: %d T: %d\n", CFEManager::getInstance()->haveCable(),CFEManager: CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", have_sat ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_yellow, have_sat ? NULL : NEUTRINO_ICON_BUTTON_YELLOW); fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); settings->addItem(fcableScan); + settings->addItem(GenericMenuSeparatorLine); } if (CFEManager::getInstance()->haveTerr()) { r_system = DVB_T; @@ -508,8 +507,8 @@ printf("C: %d S: %d T: %d\n", CFEManager::getInstance()->haveCable(),CFEManager: mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_other ? CRCInput::RC_nokey : CRCInput::RC_yellow, have_other ? NULL : NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); settings->addItem(mf); + settings->addItem(GenericMenuSeparatorLine); } - settings->addItem(GenericMenuSeparatorLine); //service select mode mc = new CMenuOptionChooser(LOCALE_ZAPIT_SCANTYPE, (int *)&scansettings.scanType, SCANTS_ZAPIT_SCANTYPE, SCANTS_ZAPIT_SCANTYPE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true); mc->setHint("", LOCALE_MENU_HINT_SCAN_SCANTYPE); diff --git a/src/gui/timeosd.cpp b/src/gui/timeosd.cpp index a6312102a..e08164061 100644 --- a/src/gui/timeosd.cpp +++ b/src/gui/timeosd.cpp @@ -63,10 +63,8 @@ void CTimeOSD::Init() int x_old = x, y_old = y, width_old = width, height_old = height; CVolumeHelper::getInstance()->refresh(cl_font); CVolumeHelper::getInstance()->getTimeDimensions(&x, &y, &width, &height); - if ((x_old != x) || (y_old != y) || (width_old != width) || (height_old != height)) { - cleanCCForm(); - clearCCItems(); - } + if ((x_old != x) || (y_old != y) || (width_old != width) || (height_old != height)) + clear(); // set corner radius depending on clock height corner_rad = (g_settings.rounded_corners) ? std::max(height/10, CORNER_RADIUS_SMALL) : 0; @@ -74,10 +72,13 @@ void CTimeOSD::Init() initCCLockItems(); } +#if 0 //if hide() or kill() required, it's recommended to use it separately CTimeOSD::~CTimeOSD() { - hide(); + CComponents::kill(); + clear(); } +#endif void CTimeOSD::initTimeString() { @@ -134,12 +135,10 @@ void CTimeOSD::switchMode(int position, int duration) break; case MODE_DESC: m_mode = MODE_BAR; - kill(); + CComponents::kill(); break; case MODE_BAR: - m_mode = MODE_HIDE; - timescale.kill(); - timescale.reset(); + KillAndResetTimescale(); frameBuffer->blit(); return; default: @@ -149,13 +148,18 @@ void CTimeOSD::switchMode(int position, int duration) update(position, duration); } -void CTimeOSD::hide(void) +void CTimeOSD::kill() { if (m_mode != MODE_HIDE) { - m_mode = MODE_HIDE; - timescale.kill(); - timescale.reset(); - kill(); + KillAndResetTimescale(); + CComponents::kill(); frameBuffer->blit(); } } + +void CTimeOSD::KillAndResetTimescale() +{ + m_mode = MODE_HIDE; + timescale.kill(); + timescale.reset(); +} diff --git a/src/gui/timeosd.h b/src/gui/timeosd.h index 3f98bf47e..3b030a861 100644 --- a/src/gui/timeosd.h +++ b/src/gui/timeosd.h @@ -48,12 +48,13 @@ class CTimeOSD : public CComponentsFrmClock void Init(); void initTimeString(); void updatePos(int position, int duration); + void KillAndResetTimescale(); public: CTimeOSD(); - ~CTimeOSD(); +// ~CTimeOSD(); is inherited void show(time_t time_show, bool force = true); - void hide(); + void kill(); bool IsVisible() {return m_mode != MODE_HIDE;} void update(int position, int duration); void switchMode(int position, int duration); diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index e8ebcffb9..bca66a452 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -57,6 +57,7 @@ #include "dboxinfo.h" #include "cam_menu.h" #include "pluginlist.h" +#include "infoclock.h" #include #include @@ -72,6 +73,7 @@ extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */ // extern CPlugins * g_PluginList; extern CCAMMenuHandler * g_CamHandler; +extern CInfoClock * InfoClock; // #include @@ -88,6 +90,8 @@ CUserMenu::~CUserMenu() // USERMENU bool CUserMenu::showUserMenu(int button) { + InfoClock->enableInfoClock(false); + // set width width = w_max (40, 10); @@ -432,6 +436,9 @@ bool CUserMenu::showUserMenu(int button) if (games) delete games; if (scripts) delete scripts; if (menu) delete menu; + + InfoClock->enableInfoClock(true); + return 0; } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8b8763011..29aab633e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2352,11 +2352,9 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) // eventlist if (g_settings.personalize[SNeutrinoSettings::P_MAIN_RED_BUTTON] == CPersonalizeGui::PERSONALIZE_ACTIVE_MODE_ENABLED)// EventList Menu - Personalization Check { - InfoClock->enableInfoClock(false); StopSubtitles(); usermenu.showUserMenu(SNeutrinoSettings::BUTTON_RED); StartSubtitles(); - InfoClock->enableInfoClock(true); } else ShowHintUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_PERSONALIZE_MENUDISABLEDHINT),450, 10);