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",