CProgressWindow: implement CComponent classes

This implement window functionality from CComponentsWindow,
progress items from CProgressBar() and status text
items from CComponentsLabel()
This commit is contained in:
2014-06-09 14:56:12 +02:00
committed by svenhoefer
parent 793230e9a7
commit 2f0e4e1687
8 changed files with 99 additions and 175 deletions

View File

@@ -1,26 +1,24 @@
/*
$Id: progresswindow.cpp,v 1.16 2007/02/25 21:32:58 guenther Exp $
Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 by Steffen Hehn 'McClean'
Neutrino-GUI - DBoxII-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
Implementation of CComponent Window class.
Copyright (C) 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 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.
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., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
@@ -33,39 +31,66 @@
#include <neutrino.h>
#include <driver/fontrenderer.h>
#include <driver/neutrinofonts.h>
#include <driver/rcinput.h>
#include <driver/screen_max.h>
#include <gui/color.h>
CProgressWindow::CProgressWindow()
CProgressWindow::CProgressWindow(CComponentsForm *parent)
: CComponentsWindow(0, 0, 700, 200, string(), NEUTRINO_ICON_INFO, NULL, parent)
{
frameBuffer = CFrameBuffer::getInstance();
hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight();
mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight();
int fw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getWidth();
width = w_max (50*fw, 0);
height = h_max(hheight+5*mheight, 20);
Init();
}
global_progress = local_progress = 101;
statusText = "";
globalstatusX = 0;
globalstatusY = 0;
localstatusY = 0;
statusTextY = 0;
void CProgressWindow::Init()
{
global_progress = local_progress = 100;
x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width ) >> 1 );
y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - height) >>1 );
showFooter(false);
shadow = true;
caption = NONEXISTANT_LOCALE;
int x_item = 10;
int y_item = 10;
int w_item = width-2*x_item;
int h_item = 20;
//create status text object
status_txt = new CComponentsLabel();
status_txt->setDimensionsAll(x_item, y_item, w_item, h_item);
status_txt->setColorBody(col_body);
addWindowItem(status_txt);
y_item += 2*h_item;
//create local_bar object
local_bar = new CProgressBar();
local_bar->setDimensionsAll(x_item, y_item, w_item, h_item);
local_bar->setColorBody(col_body);
local_bar->setActiveColor(COL_MENUCONTENT_PLUS_7);
local_bar->setFrameThickness(2);
local_bar->setColorFrame(COL_MENUCONTENT_PLUS_7);
addWindowItem(local_bar);
y_item += 2*h_item;
//create global_bar object
global_bar = new CProgressBar();
global_bar->setDimensionsAll(x_item, y_item, w_item, h_item);
global_bar->setColorBody(col_body);
global_bar->setActiveColor(COL_MENUCONTENT_PLUS_7);
global_bar->setFrameThickness(2);
global_bar->setColorFrame(COL_MENUCONTENT_PLUS_7);
addWindowItem(global_bar);
y_item += 2*h_item;
height = y_item + ccw_head->getHeight() + 10;
setCenterPos();
}
void CProgressWindow::setTitle(const neutrino_locale_t title)
{
caption = title;
setWindowCaption(title);
#ifdef VFD_UPDATE
CVFD::getInstance()->showProgressBar2(-1,NULL,-1,g_Locale->getText(caption)); // set global text in VFD
CVFD::getInstance()->showProgressBar2(-1,NULL,-1,g_Locale->getText(ccw_caption)); // set global text in VFD
#endif // VFD_UPDATE
}
@@ -76,20 +101,8 @@ void CProgressWindow::showGlobalStatus(const unsigned int prog)
return;
global_progress = prog;
int pos = x + 10;
if(global_progress != 0)
{
if (global_progress > 100)
global_progress = 100;
pos += int( float(width-20)/100.0 * global_progress);
//vordergrund
frameBuffer->paintBox(x+10, globalstatusY,pos, globalstatusY+10, COL_MENUCONTENT_PLUS_7);
}
//hintergrund
frameBuffer->paintBox(pos, globalstatusY, x+width-10, globalstatusY+10, COL_MENUCONTENT_PLUS_2);
global_bar->setValues(prog, 100);
global_bar->paint(false);
#ifdef VFD_UPDATE
CVFD::getInstance()->showProgressBar2(-1,NULL,global_progress);
@@ -102,33 +115,24 @@ void CProgressWindow::showLocalStatus(const unsigned int prog)
return;
local_progress = prog;
int pos = x + 10;
if (local_progress != 0)
{
if (local_progress > 100)
local_progress = 100;
pos += int( float(width-20)/100.0 * local_progress);
//vordergrund
frameBuffer->paintBox(x+10, localstatusY,pos, localstatusY+10, COL_MENUCONTENT_PLUS_7);
}
//hintergrund
frameBuffer->paintBox(pos, localstatusY, x+width-10, localstatusY+10, COL_MENUCONTENT_PLUS_2);
local_bar->setValues(prog, 100);
local_bar->paint(false);
#ifdef VFD_UPDATE
CVFD::getInstance()->showProgressBar2(local_progress);
#else
CVFD::getInstance()->showPercentOver(local_progress);
CVFD::getInstance()->showPercentOver((uint8_t)local_progress);
#endif // VFD_UPDATE
}
void CProgressWindow::showStatusMessageUTF(const std::string & text)
{
statusText = text;
frameBuffer->paintBox(x, statusTextY-mheight, x+width, statusTextY, COL_MENUCONTENT_PLUS_0);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+10, statusTextY, width-20, text, COL_MENUCONTENT_TEXT);
string txt = text;
int w_txt = status_txt->getWidth();
int h_txt = status_txt->getHeight();
status_txt->setText(txt, CTextBox::CENTER, *CNeutrinoFonts::getInstance()->getDynFont(w_txt, h_txt, txt), COL_MENUCONTENT_TEXT);
status_txt->paint(false);
#ifdef VFD_UPDATE
CVFD::getInstance()->showProgressBar2(-1,text.c_str()); // set local text in VFD
@@ -141,35 +145,9 @@ unsigned int CProgressWindow::getGlobalStatus(void)
return global_progress;
}
void CProgressWindow::hide()
void CProgressWindow::hide(bool no_restore)
{
frameBuffer->paintBackgroundBoxRel(x,y, width,height);
}
void CProgressWindow::paint()
{
int ypos=y;
frameBuffer->paintBoxRel(x, ypos, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);
if (caption != NONEXISTANT_LOCALE)
g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, ypos+ hheight, width - 10, g_Locale->getText(caption), COL_MENUHEAD_TEXT);
frameBuffer->paintBoxRel(x, ypos+ hheight, width, height- hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);
ypos+= hheight + (mheight >>1);
statusTextY = ypos+mheight;
showStatusMessageUTF(statusText);
ypos+= mheight;
localstatusY = ypos+ mheight-20;
showLocalStatus(0);
ypos+= mheight+10;
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width- 10, g_Locale->getText(LOCALE_FLASHUPDATE_GLOBALPROGRESS), COL_MENUCONTENT_TEXT);
ypos+= mheight;
globalstatusY = ypos+ mheight-20;
//ypos+= mheight >>1;
showGlobalStatus(global_progress);
CComponentsWindow::hide(no_restore);
}
int CProgressWindow::exec(CMenuTarget* parent, const std::string & /*actionKey*/)