Merge branch 'master' into pu/mp

This commit is contained in:
Jacek Jendrzej
2017-09-15 20:44:49 +02:00
23 changed files with 274 additions and 348 deletions

View File

@@ -1,9 +1,9 @@
installdir = $(ICONSDIR)
install_DATA = \
volumebody.png \
volumeslider2.png \
volumeslider2alpha.png \
volumeslider2blue.png \
volumeslider2green.png \
volumeslider2red.png
slider_alpha.png \
slider_blue.png \
slider_body.png \
slider_green.png \
slider_inactive.png \
slider_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

View File

Before

Width:  |  Height:  |  Size: 132 B

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

View File

@@ -873,8 +873,7 @@ keybindingmenu.volumedown Leiser
keybindingmenu.volumeup Lauter
keybindingmenu.zaphistory Zapping-History Bouquet
keychooser.head Neue Taste einstellen
keychooser.text1 Bitte Taste drücken
keychooser.text2 Zum Abbrechen warten ...
keychooser.text Neue Taste drücken.\nZum Abbrechen ein paar Sekunden warten ...
keychoosermenu.currentkey Derzeitige Taste
keychoosermenu.setnew Neue Taste einstellen
keychoosermenu.setnone Keine Taste

View File

@@ -872,9 +872,8 @@ keybindingmenu.volume Volume
keybindingmenu.volumedown Decrease
keybindingmenu.volumeup Increase
keybindingmenu.zaphistory Zapping History Bouquet
keychooser.head Setup new Key
keychooser.text1 Please press the new key
keychooser.text2 wait a few seconds for abort
keychooser.head Setup new key
keychooser.text Press new key.\nWait a few seconds to abort ...
keychoosermenu.currentkey current key
keychoosermenu.setnew setup new key
keychoosermenu.setnone no key

View File

@@ -59,8 +59,8 @@ CComponentsSlider::CComponentsSlider( const int& x_pos, const int& y_pos, const
csl_body_obj = NULL;
csl_slider_obj = NULL;
csl_body_icon = NEUTRINO_ICON_VOLUMEBODY;
csl_slider_icon =NEUTRINO_ICON_VOLUMESLIDER2;
csl_body_icon = NEUTRINO_ICON_SLIDER_BODY;
csl_slider_icon =NEUTRINO_ICON_SLIDER_INACTIVE;
initCCSlItems();
initParent(parent);

View File

@@ -1,32 +1,22 @@
/*
Neutrino-GUI - DBoxII-Project
Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
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
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
@@ -46,55 +36,67 @@
#include <gui/widget/msgbox.h>
#include <gui/widget/icons.h>
#define VALUE_R 0
#define VALUE_G 1
#define VALUE_B 2
#define VALUE_ALPHA 3
static const char * const iconnames[4] = {
NEUTRINO_ICON_VOLUMESLIDER2RED,
NEUTRINO_ICON_VOLUMESLIDER2GREEN,
NEUTRINO_ICON_VOLUMESLIDER2BLUE,
NEUTRINO_ICON_VOLUMESLIDER2ALPHA
static const char * const icon_names[VALUES] =
{
NEUTRINO_ICON_SLIDER_RED,
NEUTRINO_ICON_SLIDER_GREEN,
NEUTRINO_ICON_SLIDER_BLUE,
NEUTRINO_ICON_SLIDER_ALPHA
};
static const neutrino_locale_t colorchooser_names[4] =
static const neutrino_locale_t colorchooser_names[VALUES] =
{
LOCALE_COLORCHOOSER_RED ,
LOCALE_COLORCHOOSER_RED,
LOCALE_COLORCHOOSER_GREEN,
LOCALE_COLORCHOOSER_BLUE ,
LOCALE_COLORCHOOSER_BLUE,
LOCALE_COLORCHOOSER_ALPHA
};
CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* Alpha, CChangeObserver* Observer) // UTF-8
CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* A, CChangeObserver* Observer)
{
frameBuffer = CFrameBuffer::getInstance();
hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight();
mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight();
font_info = SNeutrinoSettings::FONT_TYPE_MENU;
header_height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight();
item_height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight();
observer = Observer;
name = Name;
//calculate max width of LOCALS
offset = 0;
for (int i = 0; i < 4; i++) {
int tmpoffset = g_Font[font_info]->getRenderWidth(g_Locale->getText(colorchooser_names[i]));
if (tmpoffset > offset) {
offset = tmpoffset;
}
// calculate max width of locals
text_width = 0;
for (int i = 0; i < VALUES; i++)
{
int tmp_text_width = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(colorchooser_names[i]));
if (tmp_text_width > text_width)
text_width = tmp_text_width;
}
width = w_max((offset + (162 + mheight*4 + 10)), 0);
height = h_max(hheight+ mheight* 4, 0);
// assuming all sliders have same dimensions
int dummy;
frameBuffer->getIconSize(NEUTRINO_ICON_SLIDER_ALPHA, &slider_width, &dummy);
x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth()-width) >> 1);
y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight()-height)>>1);
bar_width = frameBuffer->scale2Res(150);
/*
We have a half slider_width before and after the bar
to get the middle of the slider at the point of choise
*/
bar_offset = slider_width/2;
bar_full = bar_width + slider_width;
value[VALUE_R] = R;
value[VALUE_G] = G;
value[VALUE_B] = B;
value[VALUE_ALPHA] = Alpha;
preview_w = VALUES*item_height;
preview_h = VALUES*item_height;
width = w_max((text_width + bar_full + preview_w + 4*OFFSET_INNER_MID), 0);
height = h_max((header_height + VALUES*item_height + 2*OFFSET_INNER_SMALL), 0);
x = getScreenStartX(width);
y = getScreenStartY(height);
preview_x = x + text_width + bar_full + 3*OFFSET_INNER_MID;
preview_y = y + header_height + OFFSET_INNER_SMALL;
value[VALUE_R] = R;
value[VALUE_G] = G;
value[VALUE_B] = B;
value[VALUE_A] = A;
chooser_gradient = gradient_none;
}
@@ -102,13 +104,10 @@ CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, uns
void CColorChooser::setColor()
{
fb_pixel_t col = getColor();
int x_col = x+offset+160;
int y_col = y+hheight+5;
int w_col = mheight*4;
int h_col = mheight*4-10;
if ((g_settings.theme.menu_Head_gradient) && ((chooser_gradient == gradient_head_body) || (chooser_gradient == gradient_head_text))) {
CComponentsHeader header(x_col, y_col+((h_col-hheight)/2), w_col, hheight, "Head");
if ((g_settings.theme.menu_Head_gradient) && ((chooser_gradient == gradient_head_body) || (chooser_gradient == gradient_head_text)))
{
CComponentsHeader header(preview_x, preview_y+((preview_h-header_height)/2), preview_w, header_height, "Head");
if (chooser_gradient == gradient_head_body)
header.setColorBody(col);
else if (chooser_gradient == gradient_head_text)
@@ -116,15 +115,20 @@ void CColorChooser::setColor()
header.paint(CC_SAVE_SCREEN_NO);
}
else
frameBuffer->paintBoxRel(x_col+2, y_col+2, w_col-4 , h_col-4, col);
{
CComponentsShapeSquare preview(preview_x, preview_y, preview_w, preview_h, NULL, false, COL_FRAME_PLUS_0, col);
preview.setFrameThickness(1);
preview.setCorner(RADIUS_SMALL);
preview.paint(false);
}
}
fb_pixel_t CColorChooser::getColor()
{
int color = convertSetupColor2RGB(*(value[VALUE_R]), *(value[VALUE_G]), *(value[VALUE_B]));
int tAlpha = (value[VALUE_ALPHA]) ? (convertSetupAlpha2Alpha(*(value[VALUE_ALPHA]))) : 0xFF;
int alpha = (value[VALUE_A]) ? (convertSetupAlpha2Alpha(*(value[VALUE_A]))) : 0xFF;
return (((tAlpha << 24) & 0xFF000000) | color);
return (((alpha << 24) & 0xFF000000) | color);
}
int CColorChooser::exec(CMenuTarget* parent, const std::string &)
@@ -136,91 +140,94 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
if (parent)
parent->hide();
unsigned char r_alt= *value[VALUE_R];
unsigned char g_alt= *value[VALUE_G];
unsigned char b_alt= *value[VALUE_B];
unsigned char r_alt = *value[VALUE_R];
unsigned char g_alt = *value[VALUE_G];
unsigned char b_alt = *value[VALUE_B];
unsigned char a_null = 0;
unsigned char a_alt = (value[VALUE_ALPHA]) ? (*(value[VALUE_ALPHA])) : a_null;
unsigned char a_alt = (value[VALUE_A]) ? (*(value[VALUE_A])) : a_null;
paint();
setColor();
int selected = 0;
uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings
::TIMING_MENU]);
uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]);
bool loop=true;
while (loop) {
g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true);
if ( msg <= CRCInput::RC_MaxRC )
timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings
::TIMING_MENU]);
timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]);
int val = (*value[selected]);
switch ( msg ) {
case CRCInput::RC_down:
{
if (selected < ((value[VALUE_A]) ? 3 : 2))
{
if (selected < ((value[VALUE_ALPHA]) ? 3 : 2))
{
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected++;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
} else {
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected = 0;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
}
break;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected++;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
else
{
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected = 0;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
break;
}
case CRCInput::RC_up:
{
if (selected > 0)
{
if (selected > 0)
{
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected--;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
} else {
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected = ((value[VALUE_ALPHA]) ? 3 : 2);
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
}
break;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected--;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
else
{
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected = ((value[VALUE_A]) ? 3 : 2);
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
break;
}
case CRCInput::RC_right:
{
if (val < 100)
{
if (val < 100)
{
if (val < 98)
val += 2;
else
val = 100;
(*value[selected]) = (uint8_t)val;
if (val < 98)
val += 2;
else
val = 100;
(*value[selected]) = (uint8_t)val;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
setColor();
}
break;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
setColor();
}
break;
}
case CRCInput::RC_left:
{
if (val > 0)
{
if (val > 0)
{
if (val > 2)
val -= 2;
else
val = 0;
(*value[selected]) = (uint8_t)val;
if (val > 2)
val -= 2;
else
val = 0;
(*value[selected]) = (uint8_t)val;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
setColor();
}
break;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
setColor();
}
break;
}
case CRCInput::RC_home:
if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_ALPHA]) && (*(value[VALUE_ALPHA]) != a_alt))) &&
{
if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_A]) && (*(value[VALUE_A]) != a_alt))) &&
(ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel))
break;
@@ -228,15 +235,19 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
*value[VALUE_R] = r_alt;
*value[VALUE_G] = g_alt;
*value[VALUE_B] = b_alt;
if (value[VALUE_ALPHA])
*value[VALUE_ALPHA] = a_alt;
if (value[VALUE_A])
*value[VALUE_A] = a_alt;
loop = false;
break;
}
case CRCInput::RC_timeout:
case CRCInput::RC_ok:
{
loop = false;
break;
}
default:
{
if (CNeutrinoApp::getInstance()->listModeKey(msg))
{
break;
@@ -246,12 +257,13 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
loop = false;
res = menu_return::RETURN_EXIT_ALL;
}
}
}
}
hide();
if(observer)
if (observer)
observer->changeNotify(name, NULL);
return res;
@@ -259,33 +271,37 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
void CColorChooser::hide()
{
frameBuffer->paintBackgroundBoxRel(x,y, width,height);
frameBuffer->paintBackgroundBoxRel(x, y, width, height);
}
void CColorChooser::paint()
{
CComponentsHeader header(x, y, width, hheight, g_Locale->getText(name));
CComponentsHeader header(x, y, width, header_height, g_Locale->getText(name));
header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT);
header.paint(CC_SAVE_SCREEN_NO);
frameBuffer->paintBoxRel(x,y+hheight, width,height-hheight, COL_MENUCONTENT_PLUS_0, RADIUS_MID, CORNER_BOTTOM);//round
PaintBoxRel(x, y + header_height, width, height - header_height, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM, CC_SHADOW_ON);
for (int i = 0; i < 4; i++)
paintSlider(x + 10, y + hheight + mheight * i, value[i], colorchooser_names[i], iconnames[i], (i == 0));
if ((!g_settings.theme.menu_Head_gradient) || ((chooser_gradient != gradient_head_body) && (chooser_gradient != gradient_head_text))) {
//color preview
frameBuffer->paintBoxRel(x+offset+160,y+hheight+5, mheight*4, mheight*4-10, COL_MENUHEAD_PLUS_0);
frameBuffer->paintBoxRel(x+offset+162,y+hheight+2+5, mheight*4-4 ,mheight*4-4-10, 254);
}
for (int i = 0; i < VALUES; i++)
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + i*item_height, value[i], colorchooser_names[i], icon_names[i], (i == 0));
}
void CColorChooser::paintSlider(int px, int py, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected)
{
if (!spos)
return;
frameBuffer->paintBoxRel(px+offset+10,py,120,mheight, COL_MENUCONTENT_PLUS_0);
frameBuffer->paintIcon(NEUTRINO_ICON_VOLUMEBODY,px+offset+10,py+2+mheight/4);
frameBuffer->paintIcon(selected ? iconname : NEUTRINO_ICON_VOLUMESLIDER2,px+offset+13+(*spos),py+mheight/4);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px,py+mheight, width, g_Locale->getText(text), COL_MENUCONTENT_TEXT);
// clear area
frameBuffer->paintBoxRel(px + text_width + 2*OFFSET_INNER_MID, py, bar_full, item_height, COL_MENUCONTENT_PLUS_0);
// paint bar
/*
NEUTRINO_ICON_SLIDER_BODY should be scaled to bar_width.
So long we paint a simple frame. This is more save on higher resolutions.
*/
//frameBuffer->paintIcon(NEUTRINO_ICON_SLIDER_BODY, px + text_width + 2*OFFSET_INNER_MID + bar_offset, py, item_height);
frameBuffer->paintBoxFrame(px + text_width + 2*OFFSET_INNER_MID + bar_offset, py + item_height/3, bar_width, item_height/3, 1, COL_FRAME_PLUS_0);
// paint slider
frameBuffer->paintIcon(selected ? iconname : NEUTRINO_ICON_SLIDER_INACTIVE, px + text_width + 2*OFFSET_INNER_MID + ((*spos)*bar_width / 100), py, item_height);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px + OFFSET_INNER_MID, py + item_height, text_width, g_Locale->getText(text), COL_MENUCONTENT_TEXT);
}

View File

@@ -1,32 +1,22 @@
/*
Neutrino-GUI - DBoxII-Project
Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
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
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/>.
*/
@@ -38,21 +28,40 @@
#include <string>
enum {
VALUE_R = 0, // red
VALUE_G = 1, // green
VALUE_B = 2, // blue
VALUE_A = 3, // alpha
VALUES
};
class CFrameBuffer;
class CColorChooser : public CMenuTarget
{
private:
CFrameBuffer *frameBuffer;
CFrameBuffer *frameBuffer;
int x;
int y;
int width;
int height;
int hheight,mheight; // head/menu font height
int offset;
int font_info;
int header_height;
int item_height;
int text_width;
int bar_width;
int bar_offset;
int bar_full;
int slider_width;
int slider_step;
int preview_x;
int preview_y;
int preview_w;
int preview_h;
int chooser_gradient;
unsigned char * value[4]; // r, g, b, alpha
unsigned char * value[VALUES];
neutrino_locale_t name;
@@ -63,8 +72,7 @@ class CColorChooser : public CMenuTarget
void paintSlider(int x, int y, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected);
public:
CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* Alpha, CChangeObserver* Observer = NULL); // UTF-8
CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* A, CChangeObserver* Observer = NULL);
void hide();
int exec(CMenuTarget* parent, const std::string & actionKey);
@@ -78,6 +86,4 @@ class CColorChooser : public CMenuTarget
void setGradient(int gradient = gradient_none) { chooser_gradient = gradient; };
};
#endif

View File

@@ -129,12 +129,6 @@
#define NEUTRINO_ICON_UPDATE "softupdate"
#define NEUTRINO_ICON_UPNP "upnp"
#define NEUTRINO_ICON_VIDEO "video"
#define NEUTRINO_ICON_VOLUMEBODY "volumebody"
#define NEUTRINO_ICON_VOLUMESLIDER2 "volumeslider2"
#define NEUTRINO_ICON_VOLUMESLIDER2ALPHA "volumeslider2alpha"
#define NEUTRINO_ICON_VOLUMESLIDER2BLUE "volumeslider2blue"
#define NEUTRINO_ICON_VOLUMESLIDER2GREEN "volumeslider2green"
#define NEUTRINO_ICON_VOLUMESLIDER2RED "volumeslider2red"
#define NEUTRINO_ICON_VTXT "vtxt"
#define NEUTRINO_ICON_VTXT_GREY "vtxt_gray"
#define NEUTRINO_ICON_PARTITION "partition"
@@ -182,6 +176,13 @@
#define DUMMY_ICON "dummy"
/* sliders */
#define NEUTRINO_ICON_SLIDER_BODY "slider_body"
#define NEUTRINO_ICON_SLIDER_INACTIVE "slider_inactive"
#define NEUTRINO_ICON_SLIDER_RED "slider_red"
#define NEUTRINO_ICON_SLIDER_GREEN "slider_green"
#define NEUTRINO_ICON_SLIDER_BLUE "slider_blue"
#define NEUTRINO_ICON_SLIDER_ALPHA "slider_alpha"
#define NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE "mute_zap_green"
#define NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE "mute_zap_gray"

View File

@@ -2,31 +2,21 @@
Neutrino-GUI - DBoxII-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
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
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
@@ -38,73 +28,36 @@
#include <global.h>
#include <neutrino.h>
#include <gui/color.h>
#include <driver/screen_max.h>
#include <driver/fontrenderer.h>
class CKeyValue : public CMenuSeparator
{
std::string the_text;
public:
int keyvalue;
CKeyValue(int k) : CMenuSeparator(CMenuSeparator::STRING, LOCALE_KEYCHOOSERMENU_CURRENTKEY)
{
keyvalue = k;
};
virtual const char * getName(void)
{
the_text = g_Locale->getText(LOCALE_KEYCHOOSERMENU_CURRENTKEY);
the_text += ": ";
the_text += CRCInput::getKeyName(keyvalue);
return the_text.c_str();
};
};
#include <gui/widget/hintbox.h>
CKeyChooser::CKeyChooser(unsigned int * const Key, const neutrino_locale_t title, const std::string & Icon) : CMenuWidget(title, Icon)
{
frameBuffer = CFrameBuffer::getInstance();
key = Key;
keyName = CRCInput::getKeyName(*key);
keyChooser = new CKeyChooserItem(LOCALE_KEYCHOOSER_HEAD, key);
keyDeleter = new CKeyChooserItemNoKey(key);
addItem(new CKeyValue(*key));
addIntroItems();
addItem(new CMenuDForwarder(LOCALE_KEYCHOOSERMENU_SETNEW, true, NULL, new CKeyChooserItem(LOCALE_KEYCHOOSER_HEAD, key)));
addItem(new CMenuDForwarder(LOCALE_KEYCHOOSERMENU_SETNONE, true, NULL, new CKeyChooserItemNoKey(key)));
addItem(GenericMenuSeparatorLine);
addItem(GenericMenuBack);
addItem(GenericMenuSeparatorLine);
addItem(new CMenuForwarder(LOCALE_KEYCHOOSERMENU_SETNEW, true, NULL, keyChooser));
addItem(new CMenuForwarder(LOCALE_KEYCHOOSERMENU_SETNONE, true, NULL, keyDeleter));
addItem(new CMenuForwarder(LOCALE_KEYCHOOSERMENU_CURRENTKEY, false, keyName));
}
CKeyChooser::~CKeyChooser()
{
delete keyChooser;
delete keyDeleter;
}
void CKeyChooser::paint()
{
(((CKeyValue *)(items[0]))->keyvalue) = *key;
keyName = CRCInput::getKeyName(*key);
CMenuWidget::paint();
}
//*****************************
CKeyChooserItem::CKeyChooserItem(const neutrino_locale_t Name, unsigned int * Key)
{
name = Name;
key = Key;
x = y = width = height = 0;
}
int CKeyChooserItem::exec(CMenuTarget* parent, const std::string &)
{
neutrino_msg_t msg;
@@ -117,21 +70,25 @@ int CKeyChooserItem::exec(CMenuTarget* parent, const std::string &)
if (parent)
parent->hide();
paint();
// 10 seconds to choose a new key
int timeout = 10;
CHintBox * hintbox = new CHintBox(name, LOCALE_KEYCHOOSER_TEXT, HINTBOX_MIN_WIDTH, NEUTRINO_ICON_SETTINGS, NEUTRINO_ICON_HINT_KEYS);
//hintbox->setTimeOut(timeout);
hintbox->paint();
CFrameBuffer::getInstance()->blit();
g_RCInput->clearRCMsg();
g_RCInput->setLongPressAny(true);
timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings
::TIMING_MENU]);
timeoutEnd = CRCInput::calcTimeoutEnd(timeout);
get_Message:
g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd );
if (msg != CRCInput::RC_timeout)
{
// comparing an unsigned int against >= 0 is senseless!
// if ((msg >= 0) && (msg <= CRCInput::RC_MaxRC))
if ((msg >0 ) && (msg <= CRCInput::RC_MaxRC))
*key = msg;
else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all)
@@ -141,45 +98,6 @@ int CKeyChooserItem::exec(CMenuTarget* parent, const std::string &)
}
g_RCInput->setLongPressAny(false);
hide();
hintbox->hide();
return res;
}
void CKeyChooserItem::hide()
{
CFrameBuffer::getInstance()->paintBackgroundBoxRel(x, y, width, height);
CFrameBuffer::getInstance()->blit();
}
void CKeyChooserItem::paint()
{
int hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight();
int mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight();
CFrameBuffer * frameBuffer = CFrameBuffer::getInstance();
int tmp;
width = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(g_Locale->getText(name));
tmp = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_KEYCHOOSER_TEXT1));
if (tmp > width)
width = tmp;
tmp = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_KEYCHOOSER_TEXT2));
if (tmp > width)
width = tmp;
width += 20;
width = w_max(width, 0);
height = h_max(hheight + 2 * mheight, 0);
x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth()-width) >> 1);
y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight()-height) >> 1);
//frameBuffer->paintBoxRel(x, y , width, hheight , COL_MENUHEAD_PLUS_0 );
//frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0);
frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);//round
CComponentsHeader header(x, y, width, hheight, g_Locale->getText(name));
header.paint(CC_SAVE_SCREEN_NO);
//paint msg...
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT1), COL_MENUCONTENT_TEXT);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight* 2, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT2), COL_MENUCONTENT_TEXT);
}

View File

@@ -2,55 +2,39 @@
Neutrino-GUI - DBoxII-Project
Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
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
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/>.
*/
#ifndef __keychooser__
#define __keychooser__
#include <string>
#include <driver/rcinput.h>
#include <system/localize.h>
#include "menue.h"
class CFrameBuffer;
class CKeyChooserItem;
class CKeyChooserItemNoKey;
class CKeyChooser : public CMenuWidget
{
private:
CFrameBuffer *frameBuffer;
unsigned int * key;
std::string keyName;
CKeyChooserItem *keyChooser;
CKeyChooserItemNoKey *keyDeleter;
public:
CKeyChooser(unsigned int * const Key, const neutrino_locale_t title, const std::string & Icon = "");
@@ -63,43 +47,28 @@ class CKeyChooser : public CMenuWidget
class CKeyChooserItem : public CMenuTarget
{
private:
int x;
int y;
int width;
int height;
neutrino_locale_t name;
unsigned int * key;
void paint();
unsigned int *key;
public:
CKeyChooserItem(const neutrino_locale_t Name, unsigned int *Key);
void hide();
int exec(CMenuTarget* parent, const std::string & actionKey);
};
class CKeyChooserItemNoKey : public CMenuTarget
{
unsigned int * key;
unsigned int *key;
public:
CKeyChooserItemNoKey(unsigned int *Key)
{
key=Key;
key = Key;
};
int exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/)
{
*key=(unsigned int)CRCInput::RC_nokey;
*key = (unsigned int)CRCInput::RC_nokey;
return menu_return::RETURN_REPAINT;
}
};

View File

@@ -286,25 +286,45 @@ void CMenuItem::prepareItem(const bool select_mode, const int &item_height)
void CMenuItem::paintItemSlider( const bool select_mode, const int &item_height, const int &optionvalue, const int &factor, const char * left_text, const char * right_text)
{
CFrameBuffer *frameBuffer = CFrameBuffer::getInstance();
int slider_lenght = 0, h = 0;
frameBuffer->getIconSize(NEUTRINO_ICON_VOLUMEBODY, &slider_lenght, &h);
if(slider_lenght == 0 || factor < optionvalue )
return;
int stringwidth = 0;
if (right_text != NULL) {
stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("U999");
}
int stringwidth2 = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(left_text);
int maxspace = dx - stringwidth - icon_frame_w - stringwidth2 - OFFSET_INNER_MID;
if(maxspace < slider_lenght)
// assuming all sliders have same dimensions
int slider_width, dummy;
frameBuffer->getIconSize(NEUTRINO_ICON_SLIDER_ALPHA, &slider_width, &dummy);
int bar_width = frameBuffer->scale2Res(100);
/*
We have a half slider_width before and after the bar
to get the middle of the slider at the point of choise
*/
int bar_offset = slider_width/2;
int bar_full = bar_width + slider_width;
// avoid division by zero
if (factor < optionvalue || factor < 1)
return;
int right_needed = 0;
if (right_text != NULL)
{
right_needed = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("U999");
}
int left_needed = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(left_text);
int space = dx - right_needed - icon_frame_w - left_needed - OFFSET_INNER_MID;
if (space < bar_full)
return ;
int stringstartposOption = x + dx - stringwidth - slider_lenght;
int bar_x = x + dx - right_needed - bar_full;
// FIXME: negative optionvalues falsifies the slider on the right side
int optionV = (optionvalue < 0) ? 0 : optionvalue;
frameBuffer->paintBoxRel(stringstartposOption, y, slider_lenght, item_height, item_bgcolor);
frameBuffer->paintIcon(NEUTRINO_ICON_VOLUMEBODY, stringstartposOption, y+2+item_height/4);
frameBuffer->paintIcon(select_mode ? NEUTRINO_ICON_VOLUMESLIDER2BLUE : NEUTRINO_ICON_VOLUMESLIDER2, (stringstartposOption + (optionV * 100 / factor)), y+item_height/4);
// clear area
frameBuffer->paintBoxRel(bar_x, y, bar_full, item_height, item_bgcolor);
// paint bar
frameBuffer->paintBoxFrame(bar_x + bar_offset, y + item_height/3, bar_width, item_height/3, 1, COL_MENUCONTENT_TEXT);
// paint slider
frameBuffer->paintIcon(select_mode ? NEUTRINO_ICON_SLIDER_ALPHA : NEUTRINO_ICON_SLIDER_INACTIVE, bar_x + (optionV*bar_width / factor), y, item_height);
}
void CMenuItem::paintItemButton(const bool select_mode, int item_height, const char * const icon_Name)

View File

@@ -900,8 +900,7 @@ typedef enum
LOCALE_KEYBINDINGMENU_VOLUMEUP,
LOCALE_KEYBINDINGMENU_ZAPHISTORY,
LOCALE_KEYCHOOSER_HEAD,
LOCALE_KEYCHOOSER_TEXT1,
LOCALE_KEYCHOOSER_TEXT2,
LOCALE_KEYCHOOSER_TEXT,
LOCALE_KEYCHOOSERMENU_CURRENTKEY,
LOCALE_KEYCHOOSERMENU_SETNEW,
LOCALE_KEYCHOOSERMENU_SETNONE,

View File

@@ -900,8 +900,7 @@ const char * locale_real_names[] =
"keybindingmenu.volumeup",
"keybindingmenu.zaphistory",
"keychooser.head",
"keychooser.text1",
"keychooser.text2",
"keychooser.text",
"keychoosermenu.currentkey",
"keychoosermenu.setnew",
"keychoosermenu.setnone",