mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 16:31:11 +02:00
... so it is possible to get usable dimension values. Useful if in parent object none values or too small dimensions are defined.
148 lines
4.1 KiB
C++
148 lines
4.1 KiB
C++
/*
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include <global.h>
|
|
#include <neutrino.h>
|
|
#include "cc_frm_icons.h"
|
|
#include <system/debug.h>
|
|
|
|
using namespace std;
|
|
|
|
//sub class CComponentsIconForm inherit from CComponentsForm
|
|
CComponentsIconForm::CComponentsIconForm(CComponentsForm* parent)
|
|
{
|
|
initVarIconForm(1, 1, 0, 0, vector<string>(), parent);
|
|
}
|
|
|
|
CComponentsIconForm::CComponentsIconForm( const int &x_pos, const int &y_pos, const int &w, const int &h,
|
|
const std::vector<std::string> &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<std::string> &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<std::string> 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*/;
|
|
}
|
|
}
|
|
|