/* Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. Copyright (C) 2012-2018 Thilo Graf 'dbt' Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "cc_frm_icons.h" #include using namespace std; //sub class CComponentsIconForm inherit from CComponentsForm CComponentsIconForm::CComponentsIconForm(CComponentsForm* parent) { initVarIconForm(1, 1, 0, 0, vector(), parent); } CComponentsIconForm::CComponentsIconForm( const int &x_pos, const int &y_pos, const int &w, const int &h, const std::vector &v_icon_names, CComponentsForm* parent, int shadow_mode, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { initVarIconForm(x_pos, y_pos, w, h, v_icon_names, parent, shadow_mode, color_frame, color_body, color_shadow); } void CComponentsIconForm::initVarIconForm( const int &x_pos, const int &y_pos, const int &w, const int &h, const std::vector &v_icon_names, CComponentsForm* parent, int shadow_mode, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { cc_item_type.id = CC_ITEMTYPE_FRM_ICONFORM; cc_item_type.name = "cc_icon_container"; x = x_pos; y = y_pos; width = w; height = h; v_icons = v_icon_names; shadow = shadow_mode; col_frame = color_frame; col_body = color_body; col_shadow = color_shadow; chn_direction = CC_DIR_X; append_y_offset = 2; initParent(parent); addIcon(v_icons); } void CComponentsIconForm::addIcon(const std::string& icon_name) { //create new cc-picture item object CComponentsPicture *ccp = new CComponentsPicture(chn_direction == CC_DIR_X ? CC_APPEND : CC_CENTERED, chn_direction == CC_DIR_Y ? CC_APPEND : CC_CENTERED, 0, 0, icon_name, this); ccp->doPaintBg(false); int dx, dy; ccp->getRealSize(&dx, &dy); height = max(height, dy); width = max(width, dx); initChainItems(); } void CComponentsIconForm::addIcon(std::vector icon_name) { for (size_t i= 0; i< icon_name.size(); i++) addIcon(icon_name[i]); } void CComponentsIconForm::addIcons(const std::string& icon_name, const size_t& count) { if (count == 0){ dprintf(DEBUG_NORMAL, "[CComponentsIconForm]\t[%s - %d], NOTE: no count of items defined...\n", __func__, __LINE__); return; } for (size_t i = 1; i <= count; i++) addIcon(icon_name); } void CComponentsIconForm::insertIcon(const uint& icon_id, const std::string& icon_name) { //create new cc-picture item object CComponentsPicture *ccp = new CComponentsPicture(chn_direction == CC_DIR_X ? CC_APPEND : CC_CENTERED, chn_direction == CC_DIR_Y ? CC_APPEND : CC_CENTERED, 0, 0, icon_name); ccp->doPaintBg(false); insertCCItem(icon_id, ccp); initChainItems(); } void CComponentsIconForm::removeIcon(const uint& icon_id) { removeCCItem(icon_id); initChainItems(); } //For existing instances it's recommended //to remove old items before add new icons, otherwise icons will be appended. void CComponentsIconForm::removeAllIcons()//TODO { clear(); v_icons.clear(); initChainItems(); } //get maximal form height depends of biggest icon height, but don't touch defined form height void CComponentsIconForm::initMaxHeight(int *pheight) { for (size_t i= 0; i< v_icons.size(); i++){ int dummy, htmp; frameBuffer->getIconSize(v_icons[i].c_str(), &dummy, &htmp); *pheight = max(htmp, height)/*+2*fr_thickness*/; } }