diff --git a/data/icons/slider/Makefile.am b/data/icons/slider/Makefile.am
index ad3b0a21f..57d50c0f9 100644
--- a/data/icons/slider/Makefile.am
+++ b/data/icons/slider/Makefile.am
@@ -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
diff --git a/data/icons/slider/slider_alpha.png b/data/icons/slider/slider_alpha.png
new file mode 100644
index 000000000..c311c61e2
Binary files /dev/null and b/data/icons/slider/slider_alpha.png differ
diff --git a/data/icons/slider/slider_blue.png b/data/icons/slider/slider_blue.png
new file mode 100644
index 000000000..b80a83bdf
Binary files /dev/null and b/data/icons/slider/slider_blue.png differ
diff --git a/data/icons/slider/volumebody.png b/data/icons/slider/slider_body.png
similarity index 100%
rename from data/icons/slider/volumebody.png
rename to data/icons/slider/slider_body.png
diff --git a/data/icons/slider/slider_green.png b/data/icons/slider/slider_green.png
new file mode 100644
index 000000000..56cce3503
Binary files /dev/null and b/data/icons/slider/slider_green.png differ
diff --git a/data/icons/slider/slider_inactive.png b/data/icons/slider/slider_inactive.png
new file mode 100644
index 000000000..7e46eaaf1
Binary files /dev/null and b/data/icons/slider/slider_inactive.png differ
diff --git a/data/icons/slider/slider_red.png b/data/icons/slider/slider_red.png
new file mode 100644
index 000000000..ddbb63e24
Binary files /dev/null and b/data/icons/slider/slider_red.png differ
diff --git a/data/icons/slider/volumeslider2.png b/data/icons/slider/volumeslider2.png
deleted file mode 100644
index 051915adb..000000000
Binary files a/data/icons/slider/volumeslider2.png and /dev/null differ
diff --git a/data/icons/slider/volumeslider2alpha.png b/data/icons/slider/volumeslider2alpha.png
deleted file mode 100644
index 5916c9084..000000000
Binary files a/data/icons/slider/volumeslider2alpha.png and /dev/null differ
diff --git a/data/icons/slider/volumeslider2blue.png b/data/icons/slider/volumeslider2blue.png
deleted file mode 100644
index a8ac4394a..000000000
Binary files a/data/icons/slider/volumeslider2blue.png and /dev/null differ
diff --git a/data/icons/slider/volumeslider2green.png b/data/icons/slider/volumeslider2green.png
deleted file mode 100644
index 5c53fc879..000000000
Binary files a/data/icons/slider/volumeslider2green.png and /dev/null differ
diff --git a/data/icons/slider/volumeslider2red.png b/data/icons/slider/volumeslider2red.png
deleted file mode 100644
index 3a929c202..000000000
Binary files a/data/icons/slider/volumeslider2red.png and /dev/null differ
diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale
index ec632d6ac..301994ef8 100644
--- a/data/locale/deutsch.locale
+++ b/data/locale/deutsch.locale
@@ -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
diff --git a/data/locale/english.locale b/data/locale/english.locale
index e529ee751..5d5ce894e 100644
--- a/data/locale/english.locale
+++ b/data/locale/english.locale
@@ -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
diff --git a/src/gui/components/cc_frm_slider.cpp b/src/gui/components/cc_frm_slider.cpp
index e697f24ba..29f06fefb 100644
--- a/src/gui/components/cc_frm_slider.cpp
+++ b/src/gui/components/cc_frm_slider.cpp
@@ -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);
diff --git a/src/gui/widget/colorchooser.cpp b/src/gui/widget/colorchooser.cpp
index 5eef2d02e..bee59edb0 100644
--- a/src/gui/widget/colorchooser.cpp
+++ b/src/gui/widget/colorchooser.cpp
@@ -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 .
*/
#ifdef HAVE_CONFIG_H
@@ -46,55 +36,67 @@
#include
#include
-
-#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);
}
diff --git a/src/gui/widget/colorchooser.h b/src/gui/widget/colorchooser.h
index 1a0503a6e..02c8d9536 100644
--- a/src/gui/widget/colorchooser.h
+++ b/src/gui/widget/colorchooser.h
@@ -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 .
*/
@@ -38,21 +28,40 @@
#include
+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
-
diff --git a/src/gui/widget/icons.h b/src/gui/widget/icons.h
index e9c5903f2..a550bb3e1 100644
--- a/src/gui/widget/icons.h
+++ b/src/gui/widget/icons.h
@@ -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"
diff --git a/src/gui/widget/keychooser.cpp b/src/gui/widget/keychooser.cpp
index 4daf7bce0..cfdc7b7aa 100644
--- a/src/gui/widget/keychooser.cpp
+++ b/src/gui/widget/keychooser.cpp
@@ -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 .
*/
#ifdef HAVE_CONFIG_H
@@ -38,73 +28,36 @@
#include
#include
-#include
-#include
-#include
-
-
-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
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);
-}
diff --git a/src/gui/widget/keychooser.h b/src/gui/widget/keychooser.h
index b2cdbeb64..2e5852686 100644
--- a/src/gui/widget/keychooser.h
+++ b/src/gui/widget/keychooser.h
@@ -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 .
*/
-
#ifndef __keychooser__
#define __keychooser__
#include
#include
-#include
#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;
}
-
};
diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp
index 2b952a420..07345ada5 100644
--- a/src/gui/widget/menue.cpp
+++ b/src/gui/widget/menue.cpp
@@ -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)
diff --git a/src/system/locals.h b/src/system/locals.h
index fd8ad67c3..bede91c8d 100644
--- a/src/system/locals.h
+++ b/src/system/locals.h
@@ -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,
diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h
index a9e8544d2..7fc38979a 100644
--- a/src/system/locals_intern.h
+++ b/src/system/locals_intern.h
@@ -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",