/*
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*/;
}
}