From 153d2f3c784ec72af77b979a362f6db33ddd79d6 Mon Sep 17 00:00:00 2001 From: FlatTV Date: Mon, 1 Jul 2013 17:15:15 +0200 Subject: [PATCH 001/142] CTextBox: expand parameters of member setTextBorderWidth() This allows to use different horizontal and vertical width of borders in text boxes. Signed-off-by: Thilo Graf --- src/gui/components/cc_frm_clock.cpp | 2 +- src/gui/components/cc_item_text.cpp | 5 +-- src/gui/components/cc_item_text.h | 8 +++-- .../components/unmaintained/cc_item_box.cpp | 2 +- src/gui/widget/textbox.cpp | 34 ++++++++++--------- src/gui/widget/textbox.h | 5 +-- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/gui/components/cc_frm_clock.cpp b/src/gui/components/cc_frm_clock.cpp index 4d3f3e957..8356d60fc 100644 --- a/src/gui/components/cc_frm_clock.cpp +++ b/src/gui/components/cc_frm_clock.cpp @@ -140,7 +140,7 @@ void CComponentsFrmClock::initCCLockItems() lbl->setCornerType(corner_type); //set text border to 0 - lbl->setTextBorderWidth(0); + lbl->setTextBorderWidth(0,0); } } diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index d93836488..afb3e6a88 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -99,7 +99,8 @@ void CComponentsText::initVarText() /* we need a minimal borderwith of 1px because the edge-smoothing (or fontrenderer?) otherwise will paint single pixels outside the defined area. e.g. 'j' is leaving such residues */ - ct_text_border = 1; + ct_text_Hborder = 1; + ct_text_Vborder = 0; ct_col_text = COL_MENUCONTENT; ct_text_sent = false; @@ -144,7 +145,7 @@ void CComponentsText::initCCText() ct_textbox->setTextFont(ct_font); ct_textbox->setTextMode(ct_text_mode); ct_textbox->setWindowPos(ct_box); - ct_textbox->setTextBorderWidth(ct_text_border); + ct_textbox->setTextBorderWidth(ct_text_Hborder, ct_text_Vborder); ct_textbox->enableBackgroundPaint(ct_paint_textbg); ct_textbox->setBackGroundColor(col_body); ct_textbox->setBackGroundRadius(corner_rad-fr_thickness, corner_type); diff --git a/src/gui/components/cc_item_text.h b/src/gui/components/cc_item_text.h index 0496f6d22..37915331e 100644 --- a/src/gui/components/cc_item_text.h +++ b/src/gui/components/cc_item_text.h @@ -52,8 +52,10 @@ class CComponentsText : public CComponentsItem fb_pixel_t ct_col_text; ///property: text display modes, see textbox.h for possible modes int ct_text_mode; - ///property: text border width - int ct_text_border; + ///property: horizontal text border width (left and right) + int ct_text_Hborder; + ///property: vertical text border width (top and buttom) + int ct_text_Vborder; ///property: current text string std::string ct_text; ///status: cached text string, mainly required to compare with current text @@ -101,7 +103,7 @@ class CComponentsText : public CComponentsItem ///set text alignment, also see textbox.h for possible alignment modes virtual inline void setTextMode(const int mode){ct_text_mode = mode;}; ///set text border width - virtual inline void setTextBorderWidth(const int border){ct_text_border = border;}; + virtual inline void setTextBorderWidth(const int Hborder, const int Vborder = 0){ct_text_Hborder = Hborder; ct_text_Vborder = Vborder;}; ///send option to CTextBox object to paint background box behind text or not virtual inline void doPaintTextBoxBg(bool do_paintbox_bg){ ct_paint_textbg = do_paintbox_bg;}; diff --git a/src/gui/components/unmaintained/cc_item_box.cpp b/src/gui/components/unmaintained/cc_item_box.cpp index 48809f34e..e84067a83 100644 --- a/src/gui/components/unmaintained/cc_item_box.cpp +++ b/src/gui/components/unmaintained/cc_item_box.cpp @@ -295,7 +295,7 @@ void CComponentsItemBox::paintText(size_t index, bool newElement) v_element_data[index].handler2 = (void*)textbox; } - textbox->setTextBorderWidth(0); + textbox->setTextBorderWidth(0,0); textbox->enableBackgroundPaint(false); textbox->setTextFont(font_text); textbox->movePosition(box->iX, box->iY); diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index b1a2d415e..bd5af4723 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -160,7 +160,8 @@ void CTextBox::initVar(void) m_nLinesPerPage = 0; m_nCurrentLine = 0; m_nCurrentPage = 0; - text_border_width = 8; + text_Hborder_width = 8; //border left and right + text_Vborder_width = 8; //border top and buttom m_cFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - MIN_WINDOW_WIDTH) >>1); m_cFrame.iWidth = MIN_WINDOW_WIDTH; @@ -218,9 +219,10 @@ void CTextBox::setTextFont(Font* font_text) } } -void CTextBox::setTextBorderWidth(int border) +void CTextBox::setTextBorderWidth(int Hborder, int Vborder) { - text_border_width = border; + text_Hborder_width = Hborder; + text_Vborder_width = Vborder; //Initialise the window frames first and than refresh text line array initFramesAndTextArray(); } @@ -241,7 +243,7 @@ void CTextBox::reSizeMainFrameWidth(int textWidth) { //TRACE("[CTextBox]->%s: \ntext width: %d\n m_cFrame.iWidth: %d\n m_cFrameTextRel.iWidth: %d\n m_nMaxWidth: %d\n m_nMinWidth: %d\n",__FUNCTION__, textWidth, m_cFrame.iWidth, m_cFrameTextRel.iWidth, m_nMaxWidth, m_nMinWidth); - int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*text_border_width; + int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*text_Hborder_width; if( iNewWindowWidth > m_nMaxWidth) iNewWindowWidth = m_nMaxWidth; @@ -260,7 +262,7 @@ void CTextBox::reSizeMainFrameHeight(int textHeight) { //TRACE("[CTextBox]->ReSizeMainFrameHeight: %d, current: %d\r\n",textHeight,m_cFrameTextRel.iHeight); - int iNewWindowHeight = textHeight + 2*text_border_width; + int iNewWindowHeight = textHeight + 2*text_Vborder_width; if( iNewWindowHeight > m_nMaxHeight) iNewWindowHeight = m_nMaxHeight; @@ -299,7 +301,7 @@ void CTextBox::initFramesRel(void) m_cFrameTextRel.iWidth = m_cFrame.iWidth - m_cFrameScrollRel.iWidth; - m_nLinesPerPage = std::max(1, (m_cFrameTextRel.iHeight - (2*text_border_width)) / m_nFontTextHeight); + m_nLinesPerPage = std::max(1, (m_cFrameTextRel.iHeight - (2*text_Vborder_width)) / m_nFontTextHeight); #if 0 TRACE_1("Frames\r\n\tScren:\t%3d,%3d,%3d,%3d\r\n\tMain:\t%3d,%3d,%3d,%3d\r\n\tText:\t%3d,%3d,%3d,%3d \r\n\tScroll:\t%3d,%3d,%3d,%3d \r\n", @@ -344,14 +346,14 @@ void CTextBox::refreshTextLineArray(void) if( m_nMode & AUTO_WIDTH){ /* In case of autowidth, we calculate the max allowed width of the textbox */ - lineBreakWidth = m_nMaxWidth - m_cFrameScrollRel.iWidth - 2*text_border_width; + lineBreakWidth = m_nMaxWidth - m_cFrameScrollRel.iWidth - 2*text_Hborder_width; }else{ /* If not autowidth, we just take the actuall textframe width */ - lineBreakWidth = std::max(m_nMaxWidth, m_cFrameTextRel.iWidth - 2*text_border_width); + lineBreakWidth = std::max(m_nMaxWidth, m_cFrameTextRel.iWidth - 2*text_Hborder_width); } if(m_nMaxTextWidth) - lineBreakWidth = m_nMaxTextWidth - 2*text_border_width; + lineBreakWidth = m_nMaxTextWidth - 2*text_Hborder_width; //TRACE("[CTextBox] line %d: lineBreakWidth %d\n", __LINE__, lineBreakWidth); @@ -451,7 +453,7 @@ void CTextBox::refreshTextLineArray(void) reSizeMainFrameHeight(m_nNrOfLines * m_nFontTextHeight); } - m_nLinesPerPage = std::max(1, (m_cFrameTextRel.iHeight - (2*text_border_width)) / m_nFontTextHeight); + m_nLinesPerPage = std::max(1, (m_cFrameTextRel.iHeight - (2*text_Vborder_width)) / m_nFontTextHeight); m_nNrOfPages = ((m_nNrOfLines-1) / m_nLinesPerPage) + 1; if(m_nCurrentPage >= m_nNrOfPages) @@ -518,21 +520,21 @@ void CTextBox::refreshText(void) return; - int y = m_cFrameTextRel.iY + text_border_width; + int y = m_cFrameTextRel.iY + text_Vborder_width; int i; int x_center = 0; // set text y position if (m_nMode & TOP) // move to top of frame - y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * m_nLinesPerPage) >> 1) - text_border_width; + y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * m_nLinesPerPage) >> 1) - text_Vborder_width; else if (m_nMode & BOTTOM) // move to bottom of frame - y += m_cFrameTextRel.iHeight - text_border_width - (m_nNrOfLines > 1 ? (m_nNrOfLines-1)*m_nFontTextHeight : 0) ; - //m_nFontTextHeight + text_border_width /*- ((m_cFrameTextRel.iHeight + m_nFontTextHeight*/ * m_nLinesPerPage/*) >> 1)*/; + y += m_cFrameTextRel.iHeight - text_Vborder_width - (m_nNrOfLines > 1 ? (m_nNrOfLines-1)*m_nFontTextHeight : 0) ; + //m_nFontTextHeight + text_Vborder_width /*- ((m_cFrameTextRel.iHeight + m_nFontTextHeight*/ * m_nLinesPerPage/*) >> 1)*/; else // fit into mid of frame space - y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * std::min(m_nLinesPerPage, m_nNrOfLines)) >> 1) - text_border_width; + y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * std::min(m_nLinesPerPage, m_nNrOfLines)) >> 1) - text_Vborder_width; for(i = m_nCurrentLine; i < m_nNrOfLines && i < m_nCurrentLine + m_nLinesPerPage; i++) { @@ -548,7 +550,7 @@ void CTextBox::refreshText(void) } //TRACE("[CTextBox] %s Line %d m_cFrame.iX %d m_cFrameTextRel.iX %d\r\n", __FUNCTION__, __LINE__, m_cFrame.iX, m_cFrameTextRel.iX); - m_pcFontText->RenderString(m_cFrame.iX + m_cFrameTextRel.iX + text_border_width + x_center, + m_pcFontText->RenderString(m_cFrame.iX + m_cFrameTextRel.iX + text_Hborder_width + x_center, y+m_cFrame.iY, m_cFrameTextRel.iWidth, m_cLineArray[i].c_str(), m_textColor, 0, true); // UTF-8 y += m_nFontTextHeight; diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index 0fd0e08c6..feada28aa 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -150,7 +150,8 @@ class CTextBox CFrameBuffer * frameBuffer; /* int max_width;*/ - int text_border_width; + int text_Hborder_width; + int text_Vborder_width; bool m_FontUseDigitHeight; public: @@ -173,7 +174,7 @@ class CTextBox bool setText(const std::string* newText, int max_width = 0); void setTextColor(fb_pixel_t color_text){ m_textColor = color_text;}; void setBackGroundRadius(const int radius, const int type = CORNER_ALL){m_nBgRadius = radius; m_nBgRadiusType = type;}; - void setTextBorderWidth(int border); + void setTextBorderWidth(int Hborder, int Vborder); void setTextFont(Font* font_text); void setTextMode(const int text_mode){m_nMode = text_mode;}; void setBackGroundColor(CFBWindow::color_t textBackgroundColor){m_textBackgroundColor = textBackgroundColor;}; From 262820f927c26b42914915eef444ed0cbcd0bbc1 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sun, 7 Jul 2013 22:29:50 +0200 Subject: [PATCH 002/142] - yweb: increase left secondary menu frame * increase version for last 3 commits. sry --- src/nhttpd/web/Y_Blocks.txt | 2 +- src/nhttpd/web/Y_Version.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nhttpd/web/Y_Blocks.txt b/src/nhttpd/web/Y_Blocks.txt index 18ad726df..94602f2ab 100644 --- a/src/nhttpd/web/Y_Blocks.txt +++ b/src/nhttpd/web/Y_Blocks.txt @@ -411,7 +411,7 @@ end-block~page_frame_rest start-block~frame_secondary {=include-block:Y_Blocks.txt;frame_iso_head=} - + diff --git a/src/nhttpd/web/Y_Version.txt b/src/nhttpd/web/Y_Version.txt index 31639c62c..e1106e686 100644 --- a/src/nhttpd/web/Y_Version.txt +++ b/src/nhttpd/web/Y_Version.txt @@ -1,4 +1,4 @@ -version=2.8.0.39 -date=05.07.2013 +version=2.8.0.42 +date=07.07.2013 type=Release info=Port CST From c866bf086669ce9c129641a0a72f3b01d720fc95 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Sun, 7 Jul 2013 22:33:21 +0200 Subject: [PATCH 003/142] - yweb: fix position and dimension of volume table --- src/nhttpd/web/Y_Main.css | 4 ++-- src/nhttpd/web/Y_Version.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nhttpd/web/Y_Main.css b/src/nhttpd/web/Y_Main.css index 1d3a39aa8..a2283ebe7 100644 --- a/src/nhttpd/web/Y_Main.css +++ b/src/nhttpd/web/Y_Main.css @@ -551,8 +551,8 @@ tr { } .y_text_boxcontrol_table { width:114px; - height: 22px; - background: url('/images/audiobar.gif') no-repeat 1px 0px; + height: 23px; + background: url('/images/audiobar.gif') no-repeat 1px 1px; padding: 1px; margin-top: 10px; border: #FF8e42 solid 1px; diff --git a/src/nhttpd/web/Y_Version.txt b/src/nhttpd/web/Y_Version.txt index e1106e686..5698d1a0b 100644 --- a/src/nhttpd/web/Y_Version.txt +++ b/src/nhttpd/web/Y_Version.txt @@ -1,4 +1,4 @@ -version=2.8.0.42 +version=2.8.0.43 date=07.07.2013 type=Release info=Port CST From ea66aaaf8f325dcedfb1cdb56a31e0ae99f80571 Mon Sep 17 00:00:00 2001 From: tomworld Date: Fri, 12 Jul 2013 15:50:30 +0200 Subject: [PATCH 004/142] - keybind_setup: add possibility to disable/enable some special keys --- data/locale/deutsch.locale | 8 ++++++++ data/locale/english.locale | 8 ++++++++ src/gui/keybind_setup.cpp | 26 +++++++++++++++++++++++++- src/gui/keybind_setup.h | 4 ++++ src/neutrino.cpp | 14 +++++++++++--- src/neutrino_menue.h | 1 + src/system/locals.h | 8 ++++++++ src/system/locals_intern.h | 8 ++++++++ src/system/settings.h | 3 +++ 9 files changed, 76 insertions(+), 4 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 156bc8bea..86f8dcc36 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -368,8 +368,11 @@ extra.fec_s2_qpsk_7_8 7/8 S2_QPSK extra.fec_s2_qpsk_8_9 8/9 S2_QPSK extra.fec_s2_qpsk_9_10 9/10 S2_QPSK extra.key_current_transponder Aktuelle Transponder Taste +extra.key_format_mode Videoformat extra.key_list_end Listenende extra.key_list_start Listenanfang +extra.key_pic_mode Bildschirmformat +extra.key_pic_size 4:3 Anzeigeverhalten extra.key_pip_close Stop/Start PiP extra.key_pip_setup PiP Konfiguration extra.key_pip_swap Umschalten PiP/live @@ -654,6 +657,7 @@ keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock Anfangsverzögerung keybindingmenu.repeatblockgeneric Wiederholungsverzögerung keybindingmenu.sort Sortierreihenfolge ändern +keybindingmenu_special_active Sondertasten keybindingmenu.subchanneldown Unterkanal zurück keybindingmenu.subchannelup Unterkanal weiter keybindingmenu.tvradiomode Fernseh-/Radio-Modus @@ -843,6 +847,7 @@ menu.hint_key_channel_sms Wenn es aktiviert ist, können Sie die Nummern-Tasten menu.hint_key_channeldown Weisen Sie eine Taste für das Herunterschalten in der Kanalliste zu menu.hint_key_channellist Konfigurieren Sie die Tastenbelegung für die Kanalliste menu.hint_key_channelup Weisen Sie eine Taste für das Hochschalten in der Kanalliste zu +menu.hint_key_format_mode_active Die Taste für das Videoformat deaktivieren/aktivieren menu.hint_key_hardware Definieren Sie, welche Fernbedienung Sie verwenden möchten. Die Bestätigung erfolgt mit der Ausgewählten menu.hint_key_history Definieren Sie eine Taste für das Anzeigen der letzten Programme, die Sie schauten menu.hint_key_lastchannel Definieren Sie eine Taste, die in den vorher eingestellten Kanal zurückschaltet @@ -865,6 +870,8 @@ menu.hint_key_mptime Weisen Sie eine Taste für die Restzeitanzeige ihrer Aufnah menu.hint_key_mptimeshift Weisen Sie eine Taste für das Starten von Timeshift zu menu.hint_key_pagedown Weisen Sie eine Taste für das Herunterblättern zu menu.hint_key_pageup Weisen Sie eine Taste für das Hochblättern zu +menu.hint_key_pic_mode_active Die Taste für das Bildschirmformat deaktivieren/aktivieren +menu.hint_key_pic_size_active Die Taste für das 4:3 Anzeigeverhalten deaktivieren/aktivieren menu.hint_key_pip_close Tastenzuordnung für Stop PiP oder Start mit aktuellem Kanal menu.hint_key_pip_setup Tastenzuordnung für PiP Konfiguration menu.hint_key_pip_swap Tastenzuordnung zum Umschalten PiP und aktuellem Kanal @@ -876,6 +883,7 @@ menu.hint_key_right Wählen Sie die Funktion für die Tasten 'links' und 'rechts menu.hint_key_save Speichern Sie Ihre Tastenbelegungen in einer Datei ab menu.hint_key_screenshot Weisen Sie eine Taste zu, um Menü- und/oder TV-Screenshots zu speichern menu.hint_key_sort Weisen Sie eine Taste für das Sortieren in der Kanalliste zu +menu.hint_key_special_active Deaktivieren oder aktivieren einiger Sondertasten menu.hint_key_subchanneldown Weisen Sie eine Taste für das Zurückschalten in den Unterkanälen zu menu.hint_key_subchannelup Weisen Sie eine Taste für das Weiterschalten in den Unterkanälen zu menu.hint_key_transponder Weisen Sie eine Taste für das Anzeigen der Transponder in der Kanalliste zu diff --git a/data/locale/english.locale b/data/locale/english.locale index 3ae35dc9a..5eedcc76e 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -368,8 +368,11 @@ extra.fec_s2_qpsk_7_8 7/8 s2 qpsk extra.fec_s2_qpsk_8_9 8/9 s2 qpsk extra.fec_s2_qpsk_9_10 9/10 s2 qpsk extra.key_current_transponder Current Transponder Key +extra.key_format_mode Video format extra.key_list_end end extra.key_list_start home +extra.key_pic_mode Screen format +extra.key_pic_size 4:3 Display behavior extra.key_pip_close Stop/Start PiP extra.key_pip_setup Configure PiP extra.key_pip_swap Swap PiP/live @@ -654,6 +657,7 @@ keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock generic delay keybindingmenu.repeatblockgeneric repeat delay keybindingmenu.sort change sort order +keybindingmenu_special_active Special Keys keybindingmenu.subchanneldown subchannel down keybindingmenu.subchannelup subchannel up keybindingmenu.tvradiomode TV/Radio-mode @@ -843,6 +847,7 @@ menu.hint_key_channel_sms If enabled, numeric buttons in channel list\nused to s menu.hint_key_channeldown Assign button for fast switch to previous\nchannel in channel list menu.hint_key_channellist Configure keybingdings for channel list menu.hint_key_channelup Assign button for fast switch to next\nchannel in channel list +menu.hint_key_format_mode_active Disable/enable key for the video format conversion menu.hint_key_hardware Change remote control type menu.hint_key_history Assign button to show channel\nchannel switch history menu.hint_key_lastchannel Assign button for fast zap to\nprevious channel in history @@ -865,6 +870,8 @@ menu.hint_key_mptime Assign button to show play time\nleft time menu.hint_key_mptimeshift Assign button to start timeshift menu.hint_key_pagedown Assign button to show next items page menu.hint_key_pageup Assign button to show previous items page +menu.hint_key_pic_mode_active Disable/enable key for the screen format +menu.hint_key_pic_size_active Disable/enable key for the 4:3 display behavior menu.hint_key_pip_close Assign button to stop PiP\nor start it for current channel menu.hint_key_pip_setup Assign button to configure PiP menu.hint_key_pip_swap Assign button to swap PiP and live channel @@ -876,6 +883,7 @@ menu.hint_key_right Select 'right' function in live TV/Radio mode menu.hint_key_save Save keybindings to file menu.hint_key_screenshot Assign button to save GUI and/or TV screenshot menu.hint_key_sort Assign button to change channel list sort order +menu.hint_key_special_active Disable or enable some special keys menu.hint_key_subchanneldown Assign button for fast switch\n to previous subchannel menu.hint_key_subchannelup Assign button for fast switch\n to next subchannel menu.hint_key_transponder Assign button to show channel list\nfor current transponder diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index e59c52c30..5d194f0c7 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -188,7 +188,10 @@ const key_settings_struct_t key_settings[CKeybindSetup::KEYBINDS_COUNT] = {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, LOCALE_MENU_HINT_KEY_SCREENSHOT }, {LOCALE_EXTRA_KEY_PIP_CLOSE, &g_settings.key_pip_close, LOCALE_MENU_HINT_KEY_PIP_CLOSE }, {LOCALE_EXTRA_KEY_PIP_SETUP, &g_settings.key_pip_setup, LOCALE_MENU_HINT_KEY_PIP_SETUP }, - {LOCALE_EXTRA_KEY_PIP_SWAP, &g_settings.key_pip_swap, LOCALE_MENU_HINT_KEY_PIP_CLOSE } + {LOCALE_EXTRA_KEY_PIP_SWAP, &g_settings.key_pip_swap, LOCALE_MENU_HINT_KEY_PIP_CLOSE }, + {LOCALE_EXTRA_KEY_FORMAT_MODE, &g_settings.key_format_mode_active, LOCALE_MENU_HINT_KEY_FORMAT_MODE_ACTIVE }, + {LOCALE_EXTRA_KEY_PIC_MODE, &g_settings.key_pic_mode_active, LOCALE_MENU_HINT_KEY_PIC_MODE_ACTIVE }, + {LOCALE_EXTRA_KEY_PIC_SIZE, &g_settings.key_pic_size_active, LOCALE_MENU_HINT_KEY_PIC_SIZE_ACTIVE } }; @@ -269,6 +272,8 @@ int CKeybindSetup::showKeySetup() void CKeybindSetup::showKeyBindSetup(CMenuWidget *bindSettings) { + int shortcut = 1; + CMenuForwarder * mf; bindSettings->addIntroItems(LOCALE_KEYBINDINGMENU_HEAD); @@ -307,6 +312,14 @@ void CKeybindSetup::showKeyBindSetup(CMenuWidget *bindSettings) //misc bindSettings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_KEYBINDINGMENU_MISC)); //bindSettings->addItem(new CMenuDForwarder(keydescription[KEY_PLUGIN], true, NULL, keychooser[KEY_PLUGIN])); + + //Special keys + CMenuWidget* bindSettings_special = new CMenuWidget(LOCALE_KEYBINDINGMENU_HEAD, NEUTRINO_ICON_KEYBINDING, width, MN_WIDGET_ID_KEYSETUP_KEYBINDING_SPECIAL); + showKeyBindSpecialSetup(bindSettings_special); + mf = new CMenuDForwarder(LOCALE_KEYBINDINGMENU_SPECIAL_ACTIVE, true, NULL, bindSettings_special, NULL, CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_KEY_SPECIAL_ACTIVE); + bindSettings->addItem(mf); + // unlock mf = new CMenuDForwarder(key_settings[KEY_UNLOCK].keydescription, true, keychooser[KEY_UNLOCK]->getKeyName(), keychooser[KEY_UNLOCK]); mf->setHint("", key_settings[KEY_UNLOCK].hint); @@ -400,6 +413,17 @@ void CKeybindSetup::showKeyBindMovieplayerSetup(CMenuWidget *bindSettings_mplaye } } +void CKeybindSetup::showKeyBindSpecialSetup(CMenuWidget *bindSettings_special) +{ + bindSettings_special->addIntroItems(LOCALE_KEYBINDINGMENU_SPECIAL_ACTIVE); + + for (int i = KEY_FORMAT_MODE; i <= KEY_PIC_SIZE; i++) { + CMenuOptionChooser * mf = new CMenuOptionChooser(key_settings[i].keydescription, key_settings[i].keyvalue_p, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mf->setHint("", key_settings[i].hint); + bindSettings_special->addItem(mf); + } +} + bool CKeybindSetup::changeNotify(const neutrino_locale_t OptionName, void * /* data */) { if (ARE_LOCALES_EQUAL(OptionName, LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC) || diff --git a/src/gui/keybind_setup.h b/src/gui/keybind_setup.h index fcbb47a8c..7a6313793 100644 --- a/src/gui/keybind_setup.h +++ b/src/gui/keybind_setup.h @@ -80,6 +80,9 @@ class CKeybindSetup : public CMenuTarget, public CChangeObserver KEY_PIP_CLOSE, KEY_PIP_SETUP, KEY_PIP_SWAP, + KEY_FORMAT_MODE, + KEY_PIC_MODE, + KEY_PIC_SIZE, KEYBINDS_COUNT }; @@ -95,6 +98,7 @@ class CKeybindSetup : public CMenuTarget, public CChangeObserver void showKeyBindChannellistSetup(CMenuWidget *bindSettings_chlist); void showKeyBindQuickzapSetup(CMenuWidget *bindSettings_qzap); void showKeyBindMovieplayerSetup(CMenuWidget *bindSettings_mplayer); + void showKeyBindSpecialSetup(CMenuWidget *bindSettings_special); public: CKeybindSetup(); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 86e8d6a76..5e8666837 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2582,15 +2582,15 @@ _repeat: audioDecoder->EnableAnalogOut(false); return messages_return::handled; } - else if( msg == CRCInput::RC_mode ) { + else if(( msg == CRCInput::RC_mode ) && g_settings.key_format_mode_active ) { g_videoSettings->nextMode(); return messages_return::handled; } - else if( msg == CRCInput::RC_next ) { + else if(( msg == CRCInput::RC_next ) && g_settings.key_pic_size_active ) { g_videoSettings->next43Mode(); return messages_return::handled; } - else if( msg == CRCInput::RC_prev ) { + else if(( msg == CRCInput::RC_prev ) && g_settings.key_pic_mode_active ) { g_videoSettings->SwitchFormat(); return messages_return::handled; } @@ -3748,6 +3748,10 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.mpkey_plugin = tconfig.getInt32( "mpkey.plugin", CRCInput::RC_red ); g_settings.mpkey_subtitle = tconfig.getInt32( "mpkey.subtitle", CRCInput::RC_sub ); + g_settings.key_format_mode_active = tconfig.getInt32( "key_format_mode_active", 1 ); + g_settings.key_pic_mode_active = tconfig.getInt32( "key_pic_mode_active", 1 ); + g_settings.key_pic_size_active = tconfig.getInt32( "key_pic_size_active", 1 ); + /* options */ g_settings.menu_left_exit = tconfig.getInt32( "menu_left_exit", 0 ); g_settings.audio_run_player = tconfig.getInt32( "audio_run_player", 1 ); @@ -3812,6 +3816,10 @@ void CNeutrinoApp::saveKeys(const char * fname) tconfig.setInt32( "mpkey.plugin", g_settings.mpkey_plugin ); tconfig.setInt32( "mpkey.subtitle", g_settings.mpkey_subtitle ); + tconfig.setInt32( "key_format_mode_active", g_settings.key_format_mode_active ); + tconfig.setInt32( "key_pic_mode_active", g_settings.key_pic_mode_active ); + tconfig.setInt32( "key_pic_size_active", g_settings.key_pic_size_active ); + tconfig.setInt32( "menu_left_exit", g_settings.menu_left_exit ); tconfig.setInt32( "audio_run_player", g_settings.audio_run_player ); tconfig.setInt32( "key_click", g_settings.key_click ); diff --git a/src/neutrino_menue.h b/src/neutrino_menue.h index a788adda8..7e5781e93 100644 --- a/src/neutrino_menue.h +++ b/src/neutrino_menue.h @@ -99,6 +99,7 @@ enum MN_WIDGET_ID MN_WIDGET_ID_KEYSETUP_KEYBINDING_CHANNELLIST, MN_WIDGET_ID_KEYSETUP_KEYBINDING_QUICKZAP, MN_WIDGET_ID_KEYSETUP_KEYBINDING_MOVIEPLAYER, + MN_WIDGET_ID_KEYSETUP_KEYBINDING_SPECIAL, //picture viewer setup MN_WIDGET_ID_PVIEWERSETUP, diff --git a/src/system/locals.h b/src/system/locals.h index a9ae03de6..798981bd2 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -395,8 +395,11 @@ typedef enum LOCALE_EXTRA_FEC_S2_QPSK_8_9, LOCALE_EXTRA_FEC_S2_QPSK_9_10, LOCALE_EXTRA_KEY_CURRENT_TRANSPONDER, + LOCALE_EXTRA_KEY_FORMAT_MODE, LOCALE_EXTRA_KEY_LIST_END, LOCALE_EXTRA_KEY_LIST_START, + LOCALE_EXTRA_KEY_PIC_MODE, + LOCALE_EXTRA_KEY_PIC_SIZE, LOCALE_EXTRA_KEY_PIP_CLOSE, LOCALE_EXTRA_KEY_PIP_SETUP, LOCALE_EXTRA_KEY_PIP_SWAP, @@ -681,6 +684,7 @@ typedef enum LOCALE_KEYBINDINGMENU_REPEATBLOCK, LOCALE_KEYBINDINGMENU_REPEATBLOCKGENERIC, LOCALE_KEYBINDINGMENU_SORT, + LOCALE_KEYBINDINGMENU_SPECIAL_ACTIVE, LOCALE_KEYBINDINGMENU_SUBCHANNELDOWN, LOCALE_KEYBINDINGMENU_SUBCHANNELUP, LOCALE_KEYBINDINGMENU_TVRADIOMODE, @@ -870,6 +874,7 @@ typedef enum LOCALE_MENU_HINT_KEY_CHANNELDOWN, LOCALE_MENU_HINT_KEY_CHANNELLIST, LOCALE_MENU_HINT_KEY_CHANNELUP, + LOCALE_MENU_HINT_KEY_FORMAT_MODE_ACTIVE, LOCALE_MENU_HINT_KEY_HARDWARE, LOCALE_MENU_HINT_KEY_HISTORY, LOCALE_MENU_HINT_KEY_LASTCHANNEL, @@ -892,6 +897,8 @@ typedef enum LOCALE_MENU_HINT_KEY_MPTIMESHIFT, LOCALE_MENU_HINT_KEY_PAGEDOWN, LOCALE_MENU_HINT_KEY_PAGEUP, + LOCALE_MENU_HINT_KEY_PIC_MODE_ACTIVE, + LOCALE_MENU_HINT_KEY_PIC_SIZE_ACTIVE, LOCALE_MENU_HINT_KEY_PIP_CLOSE, LOCALE_MENU_HINT_KEY_PIP_SETUP, LOCALE_MENU_HINT_KEY_PIP_SWAP, @@ -903,6 +910,7 @@ typedef enum LOCALE_MENU_HINT_KEY_SAVE, LOCALE_MENU_HINT_KEY_SCREENSHOT, LOCALE_MENU_HINT_KEY_SORT, + LOCALE_MENU_HINT_KEY_SPECIAL_ACTIVE, LOCALE_MENU_HINT_KEY_SUBCHANNELDOWN, LOCALE_MENU_HINT_KEY_SUBCHANNELUP, LOCALE_MENU_HINT_KEY_TRANSPONDER, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 54cdb4686..4f8571fb9 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -395,8 +395,11 @@ const char * locale_real_names[] = "extra.fec_s2_qpsk_8_9", "extra.fec_s2_qpsk_9_10", "extra.key_current_transponder", + "extra.key_format_mode", "extra.key_list_end", "extra.key_list_start", + "extra.key_pic_mode", + "extra.key_pic_size", "extra.key_pip_close", "extra.key_pip_setup", "extra.key_pip_swap", @@ -681,6 +684,7 @@ const char * locale_real_names[] = "keybindingmenu.repeatblock", "keybindingmenu.repeatblockgeneric", "keybindingmenu.sort", + "keybindingmenu_special_active", "keybindingmenu.subchanneldown", "keybindingmenu.subchannelup", "keybindingmenu.tvradiomode", @@ -870,6 +874,7 @@ const char * locale_real_names[] = "menu.hint_key_channeldown", "menu.hint_key_channellist", "menu.hint_key_channelup", + "menu.hint_key_format_mode_active", "menu.hint_key_hardware", "menu.hint_key_history", "menu.hint_key_lastchannel", @@ -892,6 +897,8 @@ const char * locale_real_names[] = "menu.hint_key_mptimeshift", "menu.hint_key_pagedown", "menu.hint_key_pageup", + "menu.hint_key_pic_mode_active", + "menu.hint_key_pic_size_active", "menu.hint_key_pip_close", "menu.hint_key_pip_setup", "menu.hint_key_pip_swap", @@ -903,6 +910,7 @@ const char * locale_real_names[] = "menu.hint_key_save", "menu.hint_key_screenshot", "menu.hint_key_sort", + "menu.hint_key_special_active", "menu.hint_key_subchanneldown", "menu.hint_key_subchannelup", "menu.hint_key_transponder", diff --git a/src/system/settings.h b/src/system/settings.h index 3810e39ef..88a73e417 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -414,6 +414,9 @@ struct SNeutrinoSettings int key_pip_close; int key_pip_setup; int key_pip_swap; + int key_format_mode_active; + int key_pic_mode_active; + int key_pic_size_active; int cacheTXT; int minimode; From cc728d299c01661398da91fea09819bff4b766d7 Mon Sep 17 00:00:00 2001 From: "J. Krieg" Date: Sat, 13 Jul 2013 22:49:51 +0200 Subject: [PATCH 005/142] cables.xml: update Kabel BW (rearrangement channels, June 2013) --- data/cables.xml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/data/cables.xml b/data/cables.xml index ce0008bf5..e992a06bc 100644 --- a/data/cables.xml +++ b/data/cables.xml @@ -268,8 +268,8 @@ - - + + @@ -287,22 +287,18 @@ + + + + - - - - - - - - - - - - - + + + + + @@ -310,6 +306,9 @@ + + + From 339b1b403019380e7e385c9fdf5130650ba5d89d Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Mon, 15 Jul 2013 00:09:17 +0200 Subject: [PATCH 006/142] keybind_setup: Rename item in locale - fix to ea66aaaf8f325dcedfb1cdb56a31e0ae99f80571 --- data/locale/deutsch.locale | 2 +- data/locale/english.locale | 2 +- src/system/locals_intern.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 86f8dcc36..44b194b00 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -657,7 +657,7 @@ keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock Anfangsverzögerung keybindingmenu.repeatblockgeneric Wiederholungsverzögerung keybindingmenu.sort Sortierreihenfolge ändern -keybindingmenu_special_active Sondertasten +keybindingmenu.special_active Sondertasten keybindingmenu.subchanneldown Unterkanal zurück keybindingmenu.subchannelup Unterkanal weiter keybindingmenu.tvradiomode Fernseh-/Radio-Modus diff --git a/data/locale/english.locale b/data/locale/english.locale index 5eedcc76e..46b087399 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -657,7 +657,7 @@ keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock generic delay keybindingmenu.repeatblockgeneric repeat delay keybindingmenu.sort change sort order -keybindingmenu_special_active Special Keys +keybindingmenu.special_active Special Keys keybindingmenu.subchanneldown subchannel down keybindingmenu.subchannelup subchannel up keybindingmenu.tvradiomode TV/Radio-mode diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 4f8571fb9..cf9bd009b 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -684,7 +684,7 @@ const char * locale_real_names[] = "keybindingmenu.repeatblock", "keybindingmenu.repeatblockgeneric", "keybindingmenu.sort", - "keybindingmenu_special_active", + "keybindingmenu.special_active", "keybindingmenu.subchanneldown", "keybindingmenu.subchannelup", "keybindingmenu.tvradiomode", From 1557dafabcd5a885308b9953ddff785404ad0c41 Mon Sep 17 00:00:00 2001 From: "J. Krieg" Date: Sat, 13 Jul 2013 14:39:51 +0200 Subject: [PATCH 007/142] imageinfo: display other version info on missing '.version' file --- src/gui/imageinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/imageinfo.cpp b/src/gui/imageinfo.cpp index d0754dee8..3135e7577 100644 --- a/src/gui/imageinfo.cpp +++ b/src/gui/imageinfo.cpp @@ -186,7 +186,7 @@ void CImageInfo::InitInfos() const char * builddate = config.getString("builddate", "n/a").c_str(); #endif - const char * _version = config.getString("version", "n/a").c_str(); + const char * _version = config.getString("version", "U000000000000000").c_str(); static CFlashVersionInfo versionInfo(_version); std::string version_string; From a1640dd9586ae7b2bd26facf6d09d23743be3cf0 Mon Sep 17 00:00:00 2001 From: "J. Krieg" Date: Sat, 13 Jul 2013 14:49:04 +0200 Subject: [PATCH 008/142] imageinfo: add possibility to display a custom text for image version --- src/gui/imageinfo.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/imageinfo.cpp b/src/gui/imageinfo.cpp index 3135e7577..289a0c53d 100644 --- a/src/gui/imageinfo.cpp +++ b/src/gui/imageinfo.cpp @@ -186,16 +186,20 @@ void CImageInfo::InitInfos() const char * builddate = config.getString("builddate", "n/a").c_str(); #endif + std::string version_string; +#ifdef IMAGE_VERSION + version_string = IMAGE_VERSION; +#else const char * _version = config.getString("version", "U000000000000000").c_str(); static CFlashVersionInfo versionInfo(_version); - std::string version_string; version_string = versionInfo.getReleaseCycle(); version_string += " "; version_string += versionInfo.getType(); version_string += " ("; version_string += versionInfo.getDate(); version_string += ")"; +#endif struct utsname uts_info; From 6948ab4258e2c34ab1e12384e9699a3985909720 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 15 Jul 2013 23:16:07 +0200 Subject: [PATCH 009/142] fix compil without ENABLE_FASTSCAN --- src/gui/start_wizard.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index b0a8de716..9d2b8b2e9 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -141,12 +141,14 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) res = CScanSetup::getInstance()->exec(NULL, ""); } else { CZapit::getInstance()->GetConfig(zapitCfg); +#ifdef ENABLE_FASTSCAN if (CFEManager::getInstance()->haveSat()) { CMenuWidget fastScanMenu(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, 45, MN_WIDGET_ID_SCAN_FAST_SCAN); fastScanMenu.setWizardMode(true); CScanSetup::getInstance()->addScanMenuFastScan(&fastScanMenu); res = fastScanMenu.exec(NULL, ""); } +#endif if (CFEManager::getInstance()->haveCable()) { CMenuWidget cableScan(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, 45, MN_WIDGET_ID_SCAN_CABLE_SCAN); cableScan.setWizardMode(true); From 770240845693fcaa14db88762200a9d40e411c8c Mon Sep 17 00:00:00 2001 From: Christian Schuett Date: Mon, 15 Jul 2013 23:16:44 +0200 Subject: [PATCH 010/142] - menue.cpp: fix macro usage of SUB_HEAD --- src/gui/widget/menue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 63d7d987b..7b67cabbb 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1842,7 +1842,7 @@ int CMenuSeparator::paint(bool selected) /* if no alignment is specified, align centered */ if (type & ALIGN_LEFT) - name_start_x = x + (!SUB_HEAD ? name_start_x : 20 + 24 /*std icon_width is 24px - this should be determinated from NEUTRINO_ICON_BUTTON_HOME or so*/); + name_start_x = x + (!(type & SUB_HEAD) ? name_start_x : 20 + 24 /*std icon_width is 24px - this should be determinated from NEUTRINO_ICON_BUTTON_HOME or so*/); else if (type & ALIGN_RIGHT) name_start_x = x + dx - stringwidth - 20; else /* ALIGN_CENTER */ From 8b5bbf8911eebf786f46f4f343d4b7cd2a530f89 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 5 Jul 2013 18:06:44 +0400 Subject: [PATCH 011/142] gui/widget/menue.cpp: add CMenuItem isStatic param, (c) martii --- src/gui/widget/menue.cpp | 67 +++++++++++++++++++++++++--------------- src/gui/widget/menue.h | 11 ++++--- 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 7b67cabbb..a24b7cf7e 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -44,11 +44,11 @@ #include /* the following generic menu items are integrated into multiple menus at the same time */ -CMenuSeparator CGenericMenuSeparator; -CMenuSeparator CGenericMenuSeparatorLine(CMenuSeparator::LINE); -CMenuForwarder CGenericMenuBack(LOCALE_MENU_BACK, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_LEFT); -CMenuForwarder CGenericMenuCancel(LOCALE_MENU_CANCEL, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_HOME); -CMenuForwarder CGenericMenuNext(LOCALE_MENU_NEXT, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_HOME); +CMenuSeparator CGenericMenuSeparator(0, NONEXISTANT_LOCALE, true); +CMenuSeparator CGenericMenuSeparatorLine(CMenuSeparator::LINE, NONEXISTANT_LOCALE, true); +CMenuForwarder CGenericMenuBack(LOCALE_MENU_BACK, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_LEFT, NULL, true); +CMenuForwarder CGenericMenuCancel(LOCALE_MENU_CANCEL, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_HOME, NULL, true); +CMenuForwarder CGenericMenuNext(LOCALE_MENU_NEXT, true, NULL, NULL, NULL, CRCInput::RC_nokey, NEUTRINO_ICON_BUTTON_HOME, NULL, true); CMenuSeparator * const GenericMenuSeparator = &CGenericMenuSeparator; CMenuSeparator * const GenericMenuSeparatorLine = &CGenericMenuSeparatorLine; CMenuForwarder * const GenericMenuBack = &CGenericMenuBack; @@ -64,6 +64,7 @@ CMenuItem::CMenuItem() used = false; icon_frame_w = 10; hint = NONEXISTANT_LOCALE; + isStatic = false; } void CMenuItem::init(const int X, const int Y, const int DX, const int OFFX) @@ -196,7 +197,11 @@ void CMenuItem::paintItemButton(const bool select_mode, const int &item_height, int icon_h = 0; //define icon name depends of numeric value +#ifdef MARTII + if (g_settings.menu_numbers_as_icons && icon_name.empty() && CRCInput::isNumeric(directKey)) +#else if (icon_name.empty() && CRCInput::isNumeric(directKey)) +#endif { char i_name[6]; /* X +'\0' */ snprintf(i_name, 6, "%d", CRCInput::getNumericValue(directKey)); @@ -397,12 +402,8 @@ void CMenuWidget::resetWidget(bool delete_items) { for(unsigned int count=0;countisStatic && delete_items) { + delete item; item = NULL; } } @@ -532,6 +533,12 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) break; } } +#ifdef MARTII + if (msg == (uint32_t) g_settings.key_channelList_pageup) + msg = CRCInput::RC_page_up; + else if (msg == (uint32_t) g_settings.key_channelList_pagedown) + msg = CRCInput::RC_page_down; +#endif } if (handled) @@ -1174,9 +1181,10 @@ int CMenuOptionNumberChooser::exec(CMenuTarget*) else (*optionValue)++; } - paint(true); if(observ) observ->changeNotify(optionName, optionValue); + // give the observer a chance to modify the value + paint(true); return menu_return::RETURN_NONE; } @@ -1596,7 +1604,7 @@ int CMenuOptionLanguageChooser::paint( bool selected ) } //------------------------------------------------------------------------------------------------------------------------------- -CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, const char * const Option, CMenuTarget* Target, const char * const ActionKey, neutrino_msg_t DirectKey, const char * const IconName, const char * const IconName_Info_right) +CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, const char * const Option, CMenuTarget* Target, const char * const ActionKey, neutrino_msg_t DirectKey, const char * const IconName, const char * const IconName_Info_right, bool IsStatic) { option = Option; option_string = NULL; @@ -1607,9 +1615,10 @@ CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, directKey = DirectKey; iconName = IconName ? IconName : ""; iconName_Info_right = IconName_Info_right ? IconName_Info_right : ""; + isStatic = IsStatic; } -CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, const std::string &Option, CMenuTarget* Target, const char * const ActionKey, neutrino_msg_t DirectKey, const char * const IconName, const char * const IconName_Info_right) +CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, const std::string &Option, CMenuTarget* Target, const char * const ActionKey, neutrino_msg_t DirectKey, const char * const IconName, const char * const IconName_Info_right, bool IsStatic) { option = NULL; option_string = &Option; @@ -1620,6 +1629,23 @@ CMenuForwarder::CMenuForwarder(const neutrino_locale_t Text, const bool Active, directKey = DirectKey; iconName = IconName ? IconName : ""; iconName_Info_right = IconName_Info_right ? IconName_Info_right : ""; + isStatic = IsStatic; +} + +void CMenuForwarder::setOption(const char * const Option) +{ + option = Option; + option_string = NULL; + if (used && x != -1) + paint(); +} + +void CMenuForwarder::setOption(const std::string &Option) +{ + option = NULL; + option_string = &Option; + if (used && x != -1) + paint(); } int CMenuForwarder::getHeight(void) const @@ -1627,16 +1653,6 @@ int CMenuForwarder::getHeight(void) const return g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); } -// used gets set by the addItem() function. This is for set to paint Option string by just not calling the addItem() function. -// Without this, the changeNotifiers would become machine-dependent. -void CMenuForwarder::setOption(const char *Option) -{ - option = Option; - - if (used && x != -1) - paint(); -} - // used gets set by the addItem() function. This is for set to paint Text from locales by just not calling the addItem() function. // Without this, the changeNotifiers would become machine-dependent. void CMenuForwarder::setTextLocale(const neutrino_locale_t Text) @@ -1767,12 +1783,13 @@ int CMenuForwarderNonLocalized::getWidth(void) return tw; } //------------------------------------------------------------------------------------------------------------------------------- -CMenuSeparator::CMenuSeparator(const int Type, const neutrino_locale_t Text) +CMenuSeparator::CMenuSeparator(const int Type, const neutrino_locale_t Text, bool IsStatic) { directKey = CRCInput::RC_nokey; iconName = ""; type = Type; text = Text; + isStatic = IsStatic; } diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 9d9eb92a1..38e2db1f5 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -93,6 +93,7 @@ class CMenuItem public: bool active; + bool isStatic; neutrino_msg_t directKey; neutrino_msg_t msg; std::string iconName; @@ -166,7 +167,7 @@ class CMenuSeparator : public CMenuItem }; - CMenuSeparator(const int Type = 0, const neutrino_locale_t Text = NONEXISTANT_LOCALE); + CMenuSeparator(const int Type = 0, const neutrino_locale_t Text = NONEXISTANT_LOCALE, bool IsStatic = false); virtual ~CMenuSeparator(){} int paint(bool selected=false); @@ -208,16 +209,14 @@ class CMenuForwarder : public CMenuItem public: - CMenuForwarder(const neutrino_locale_t Text, const bool Active=true, const char * const Option=NULL, CMenuTarget* Target=NULL, const char * const ActionKey = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const char * const IconName = NULL, const char * const IconName_Info_right = NULL); - CMenuForwarder(const neutrino_locale_t Text, const bool Active, const std::string &Option, CMenuTarget* Target=NULL, const char * const ActionKey = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const char * const IconName = NULL, const char * const IconName_Info_right = NULL); - + CMenuForwarder(const neutrino_locale_t Text, const bool Active=true, const char * const Option=NULL, CMenuTarget* Target=NULL, const char * const ActionKey = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const char * const IconName = NULL, const char * const IconName_Info_right = NULL, bool IsStatic = false); + CMenuForwarder(const neutrino_locale_t Text, const bool Active, const std::string &Option, CMenuTarget* Target=NULL, const char * const ActionKey = NULL, const neutrino_msg_t DirectKey = CRCInput::RC_nokey, const char * const IconName = NULL, const char * const IconName_Info_right = NULL, bool IsStatic = false); virtual ~CMenuForwarder(){} int paint(bool selected=false); int getHeight(void) const; int getWidth(void); - void setOption(const char *Option); void setTextLocale(const neutrino_locale_t Text); neutrino_locale_t getTextLocale(){return text;}; CMenuTarget* getTarget(){return jumpTarget;}; @@ -228,6 +227,8 @@ class CMenuForwarder : public CMenuItem { return active; } + void setOption(const char * const Option); + void setOption(const std::string &Option); }; class CMenuDForwarder : public CMenuForwarder From 3d187e56dab70df2ae859b395ef45f2578bca3f6 Mon Sep 17 00:00:00 2001 From: martii Date: Sun, 7 Apr 2013 15:05:43 +0200 Subject: [PATCH 012/142] CMenuWidget: add action keys Conflicts: src/gui/widget/menue.h --- src/gui/widget/menue.cpp | 33 +++++++++++++++++++++++++++++---- src/gui/widget/menue.h | 3 +++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index a24b7cf7e..db4a3ee53 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -519,6 +519,25 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if ( msg <= CRCInput::RC_MaxRC ) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + std::map::iterator it = keyActionMap.find(msg); + if (it != keyActionMap.end()) { + int rv = it->second.menue->exec(parent, it->second.action); + switch ( rv ) { + case menu_return::RETURN_EXIT_ALL: + retval = menu_return::RETURN_EXIT_ALL; + case menu_return::RETURN_EXIT: + msg = CRCInput::RC_timeout; + break; + case menu_return::RETURN_REPAINT: + case menu_return::RETURN_EXIT_REPAINT: + if (fade && washidden) + fader.StartFadeIn(); + checkHints(); + paint(); + break; + } + continue; + } for (unsigned int i= 0; i< items.size(); i++) { CMenuItem* titem = items[i]; if ((titem->directKey != CRCInput::RC_nokey) && (titem->directKey == msg)) { @@ -534,10 +553,10 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) } } #ifdef MARTII - if (msg == (uint32_t) g_settings.key_channelList_pageup) - msg = CRCInput::RC_page_up; - else if (msg == (uint32_t) g_settings.key_channelList_pagedown) - msg = CRCInput::RC_page_down; + if (msg == (uint32_t) g_settings.key_channelList_pageup) + msg = CRCInput::RC_page_up; + else if (msg == (uint32_t) g_settings.key_channelList_pagedown) + msg = CRCInput::RC_page_down; #endif } @@ -1147,6 +1166,12 @@ void CMenuWidget::paintHint(int pos) } +void CMenuWidget::addKey(neutrino_msg_t key, CMenuTarget *menue, const std::string & action) +{ + keyActionMap[key].menue = menue; + keyActionMap[key].action = action; +} + //------------------------------------------------------------------------------------------------------------------------------- CMenuOptionNumberChooser::CMenuOptionNumberChooser(const neutrino_locale_t name, int * const OptionValue, const bool Active, const int min_value, const int max_value, CChangeObserver * const Observ, const int print_offset, const int special_value, const neutrino_locale_t special_value_name, const char * non_localized_name, bool sliderOn) { diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 38e2db1f5..0c9b4deb5 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -435,6 +435,8 @@ class CMenuWidget : public CMenuTarget CFrameBuffer *frameBuffer; std::vector items; std::vector page_start; + struct keyAction { std::string action; CMenuTarget *menue; }; + std::map keyActionMap; std::string iconfile; int min_width; @@ -514,6 +516,7 @@ class CMenuWidget : public CMenuTarget MENU_POS_BOTTOM_LEFT , MENU_POS_BOTTOM_RIGHT }; + void addKey(neutrino_msg_t key, CMenuTarget *menue, const std::string &action); }; class CPINProtection From 8f4eee554c3d2630e3c4baf22f29ce5b8dda189c Mon Sep 17 00:00:00 2001 From: martii Date: Mon, 8 Apr 2013 20:43:52 +0200 Subject: [PATCH 013/142] widget/menu: print right icon regardless of activation status --- src/gui/widget/menue.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index db4a3ee53..a92bdc4b5 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -251,7 +251,11 @@ void CMenuItem::paintItemButton(const bool select_mode, const int &item_height, { frameBuffer->getIconSize(iconName_Info_right.c_str(), &icon_w, &icon_h); +#ifdef MARTII + if (icon_w>0 && icon_h>0) +#else if (active && icon_w>0 && icon_h>0) +#endif { icon_painted = frameBuffer->paintIcon(iconName_Info_right, dx + icon_start_x - (icon_w + 20), y+ ((item_height/2- icon_h/2)) ); } @@ -521,6 +525,7 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) std::map::iterator it = keyActionMap.find(msg); if (it != keyActionMap.end()) { + fader.Stop(); int rv = it->second.menue->exec(parent, it->second.action); switch ( rv ) { case menu_return::RETURN_EXIT_ALL: @@ -536,6 +541,7 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) paint(); break; } + frameBuffer->blit(); continue; } for (unsigned int i= 0; i< items.size(); i++) { From cd8ee4a1c868f730fa0949129ca0cccd2697ed84 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 5 Jul 2013 19:26:02 +0400 Subject: [PATCH 014/142] driver/framebuffer.h: add empty blit for neutrino-mp patches --- src/driver/framebuffer.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/driver/framebuffer.h b/src/driver/framebuffer.h index 16cf96179..28df44527 100644 --- a/src/driver/framebuffer.h +++ b/src/driver/framebuffer.h @@ -299,6 +299,7 @@ class CFrameBuffer void setFbArea(int element, int _x=0, int _y=0, int _dx=0, int _dy=0); void fbNoCheck(bool noCheck) { fb_no_check = noCheck; } void doPaintMuteIcon(bool mode) { do_paint_mute_icon = mode; } + void blit(void) {} }; #endif From ca519aa0749d43ea7a5256e2f6a9a0538c7b6c60 Mon Sep 17 00:00:00 2001 From: martii Date: Sun, 9 Jun 2013 06:49:48 +0200 Subject: [PATCH 015/142] widget/menue: implement CMenuOptionNumberChooser::getWidth() --- src/gui/widget/menue.cpp | 20 ++++++++++++++++++++ src/gui/widget/menue.h | 1 + 2 files changed, 21 insertions(+) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index a92bdc4b5..79a802183 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1248,6 +1248,26 @@ int CMenuOptionNumberChooser::paint(bool selected) return y+height; } +int CMenuOptionNumberChooser::getWidth(void) +{ + const char * l_optionName = (optionString != NULL) ? optionString : g_Locale->getText(optionName); + int width = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(l_optionName, true); + + char tmp[20], *t; + + snprintf(tmp, sizeof(tmp), "%d", lower_bound); + for(t = tmp; *t; t++) if (isdigit((int)*t)) *t = *widest_number; + int w1 = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true); + + snprintf(tmp, sizeof(tmp), "%d", upper_bound); + for(t = tmp; *t; t++) if (isdigit((int)*t)) *t = *widest_number; + int w2 = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true); + + width += (w1 > w2) ? w1 : w2; + + return width + 10; /* min 10 pixels between option name and value. enough? */ +} + CMenuOptionChooser::CMenuOptionChooser(const neutrino_locale_t OptionName, int * const OptionValue, const struct keyval * const Options, const unsigned Number_Of_Options, const bool Active, CChangeObserver * const Observ, const neutrino_msg_t DirectKey, const std::string & IconName, bool Pulldown) { height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 0c9b4deb5..0efaf3108 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -299,6 +299,7 @@ private: int exec(CMenuTarget* parent); int isMenueOptionChooser(void) const{return 1;} + int getWidth(void); }; class CMenuOptionChooser : public CAbstractMenuOptionChooser From d6de6baebb461500261854b7677fdf51dc734e73 Mon Sep 17 00:00:00 2001 From: martii Date: Sun, 9 Jun 2013 10:42:51 +0200 Subject: [PATCH 016/142] widget/menue: don't render text over right icon --- src/gui/widget/menue.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 79a802183..b267ba90e 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -141,7 +141,15 @@ void CMenuItem::paintItemCaption(const bool select_mode, const int &item_height, } //left text - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(name_start_x, y+ item_height, dx- (name_start_x - x), left_text, item_color, 0, true); // UTF-8 + int _dx = dx; + if (!iconName_Info_right.empty()) { + int icon_w = 0; + int icon_h = 0; + CFrameBuffer::getInstance()->getIconSize(iconName_Info_right.c_str(), &icon_w, &icon_h); + if (icon_w) + _dx -= icon_frame_w + icon_w; + } + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(name_start_x, y+ item_height, _dx- (name_start_x - x), left_text, item_color, 0, true); // UTF-8 //right text if (right_text != NULL) From 1f02a0d49e6f807536ce26be169b4b98fc5f2887 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 10 Jul 2013 19:32:04 +0400 Subject: [PATCH 017/142] gui/widget/colorchooser.cpp: add getColor() member --- src/gui/widget/colorchooser.cpp | 13 +++++++------ src/gui/widget/colorchooser.h | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/widget/colorchooser.cpp b/src/gui/widget/colorchooser.cpp index 075155a9d..d23fff11f 100644 --- a/src/gui/widget/colorchooser.cpp +++ b/src/gui/widget/colorchooser.cpp @@ -98,15 +98,16 @@ CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, uns } void CColorChooser::setColor() +{ + frameBuffer->paintBoxRel(x+offset+162,y+hheight+2+5, mheight*4-4 ,mheight*4-4-10, getColor()); +} + +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]))) : 0; + int tAlpha = (value[VALUE_ALPHA]) ? (convertSetupAlpha2Alpha(*(value[VALUE_ALPHA]))) : 0xFF; - if(!value[VALUE_ALPHA]) tAlpha = 0xFF; - - fb_pixel_t col = ((tAlpha << 24) & 0xFF000000) | color; - //((tAlpha << 24) & 0xFF000000) | ((color << 16) & 0x00FF0000) | (color & 0x0000FF00) | ((color >> 16) & 0xFF); - frameBuffer->paintBoxRel(x+offset+162,y+hheight+2+5, mheight*4-4 ,mheight*4-4-10, col); + return (((tAlpha << 24) & 0xFF000000) | color); } int CColorChooser::exec(CMenuTarget* parent, const std::string &) diff --git a/src/gui/widget/colorchooser.h b/src/gui/widget/colorchooser.h index 50bc61734..f2ff70c90 100644 --- a/src/gui/widget/colorchooser.h +++ b/src/gui/widget/colorchooser.h @@ -67,6 +67,7 @@ class CColorChooser : public CMenuTarget void hide(); int exec(CMenuTarget* parent, const std::string & actionKey); + fb_pixel_t getColor(void); }; From 5d95016b37169da7bb117d993a74925bc4cbdf50 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 12 Jul 2013 16:31:23 +0400 Subject: [PATCH 018/142] colorchooser: display selected color in menue, based on patch (c) martii --- src/gui/widget/menue.cpp | 31 ++++++++++++++++++++++++------- src/gui/widget/menue.h | 3 ++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index b267ba90e..0fb4a3972 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -125,7 +125,7 @@ void CMenuItem::paintItemBackground (const bool select_mode, const int &item_hei frameBuffer->paintBoxRel(x, y, dx, item_height, item_bgcolor, RADIUS_LARGE); } -void CMenuItem::paintItemCaption(const bool select_mode, const int &item_height, const char * left_text, const char * right_text) +void CMenuItem::paintItemCaption(const bool select_mode, const int &item_height, const char * left_text, const char * right_text, const fb_pixel_t right_bgcol) { if (select_mode) { @@ -152,11 +152,20 @@ void CMenuItem::paintItemCaption(const bool select_mode, const int &item_height, g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(name_start_x, y+ item_height, _dx- (name_start_x - x), left_text, item_color, 0, true); // UTF-8 //right text - if (right_text != NULL) + if (right_text || right_bgcol) { - int stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(right_text, true); + int stringwidth = 0; + if (right_text) + stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(right_text, true); int stringstartposOption = std::max(name_start_x + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(left_text, true) + icon_frame_w, x + dx - stringwidth - icon_frame_w); //+ offx - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height,dx- (stringstartposOption- x), right_text, item_color, 0, true); + if (right_bgcol) { + if (!right_text) + stringstartposOption -= 60; + CFrameBuffer::getInstance()->paintBoxRel(stringstartposOption, y + 1, dx - stringstartposOption + x - 1, item_height - 2, right_bgcol, RADIUS_LARGE); + CFrameBuffer::getInstance()->paintBoxFrame(stringstartposOption, y + 1, dx - stringstartposOption + x - 1, item_height - 2, 1, COL_MENUCONTENT_PLUS_6, RADIUS_LARGE); + } + if (right_text) + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposOption, y+item_height,dx- (stringstartposOption- x), right_text, item_color, 0, true); } } @@ -1732,9 +1741,14 @@ int CMenuForwarder::getWidth(void) else if (option_string) option_text = option_string->c_str(); + fb_pixel_t bgcol = 0; + if (jumpTarget) + bgcol = jumpTarget->getColor(); - if (option_text != NULL) - tw += 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(option_text, true); + if (option_text != NULL) + tw += 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(option_text, true); + else if (bgcol) + tw += 10 + 60; return tw; } @@ -1773,6 +1787,9 @@ int CMenuForwarder::paint(bool selected) const char * l_text = getName(); const char * option_text = getOption(); + fb_pixel_t bgcol = 0; + if (jumpTarget) + bgcol = jumpTarget->getColor(); //paint item prepareItem(selected, height); @@ -1781,7 +1798,7 @@ int CMenuForwarder::paint(bool selected) paintItemButton(selected, height); //caption - paintItemCaption(selected, height, l_text, option_text); + paintItemCaption(selected, height, l_text, option_text, bgcol); return y+ height; } diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 0efaf3108..d23c03655 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -80,6 +80,7 @@ class CMenuTarget virtual ~CMenuTarget(){} virtual void hide(){} virtual int exec(CMenuTarget* parent, const std::string & actionKey) = 0; + virtual fb_pixel_t getColor(void) { return 0; } }; class CMenuItem @@ -139,7 +140,7 @@ class CMenuItem virtual void setItemButton(const std::string& icon_Name, const bool is_select_button = false); - virtual void paintItemCaption(const bool select_mode, const int &item_height, const char * left_text=NULL, const char * right_text=NULL); + virtual void paintItemCaption(const bool select_mode, const int &item_height, const char * left_text=NULL, const char * right_text=NULL, const fb_pixel_t right_bgcol=0); virtual void paintItemSlider( const bool select_mode, const int &item_height, const int &optionvalue, const int &factor, const char * left_text=NULL, const char * right_text=NULL); From 4d7fb7e362fdb18fd9de4e9b0cb0f3a87d914347 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Sat, 13 Jul 2013 11:07:10 +0400 Subject: [PATCH 019/142] gui/scan_setup.cpp: fix manual frequency input lenght --- src/gui/scan_setup.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 462f33817..cf7bf1dc5 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -1252,7 +1252,7 @@ void CScanSetup::addScanMenuCable(CMenuWidget *menu) menu->addItem(GenericMenuSeparatorLine); - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, 6, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); @@ -1298,7 +1298,7 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc CMenuForwarder *Freq = NULL; CMenuForwarder *Rate = NULL; if (r_system == DVB_S) { - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.sat_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.sat_TP_freq, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.sat_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); @@ -1310,7 +1310,7 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.sat_TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_POL); } else if (r_system == DVB_C) { - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, 6, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); From cc115a36157319f938d7c8fbfb24a4d32137183f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 11:29:35 +0400 Subject: [PATCH 020/142] gui/filebrowser.cpp: restore selection, remove double paint on exec(), remember selected to restore on dir enter with OK button --- src/gui/filebrowser.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index b6aacabbd..2d3ae691d 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -845,8 +845,12 @@ bool CFileBrowser::exec(const char * const dirname) std::replace(name.begin(), name.end(), '\\', '/'); paintHead(); - ChangeDir(name); - paint(); + int selection = -1; + if (name == Path) + selection = selected; + + ChangeDir(name, selection); + //paint(); paintFoot(); int oldselected = selected; @@ -1071,7 +1075,10 @@ bool CFileBrowser::exec(const char * const dirname) ChangeDir(filelist[selected].Url); else #endif + { + selections.push_back(selected); ChangeDir(filelist[selected].Name); + } } else { From 77f3f86d300f6b58bcad9c1e9e3a4bc1fc8befa9 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 11:30:51 +0400 Subject: [PATCH 021/142] gui/nfs.cpp: RC_spkr clears selected mount entry, based on patch (c) martii --- src/gui/nfs.cpp | 28 ++++++++++++++++++++++++++++ src/gui/nfs.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/src/gui/nfs.cpp b/src/gui/nfs.cpp index 3117fba73..71d14b114 100644 --- a/src/gui/nfs.cpp +++ b/src/gui/nfs.cpp @@ -103,6 +103,30 @@ int CNFSMountGui::exec( CMenuTarget* parent, const std::string & actionKey ) } returnval = menu(); } + else if(actionKey == "rc_spkr") + { + int i = mountMenuWPtr->getSelected() - menu_offset; + if (i > -1 && i < NETWORK_NFS_NR_OF_ENTRIES) { + g_settings.network_nfs_ip[i] = ""; + g_settings.network_nfs_dir[i][0] = 0; + g_settings.network_nfs_local_dir[i][0] = 0; + g_settings.network_nfs_automount[i] = 0; + g_settings.network_nfs_type[i] = 0; + g_settings.network_nfs_username[i][0] = 0; + g_settings.network_nfs_password[i][0] = 0; + strcpy(g_settings.network_nfs_mount_options1[i], "ro,soft,udp"); + strcpy(g_settings.network_nfs_mount_options2[i], "nolock,rsize=8192,wsize=8192"); + strcpy(g_settings.network_nfs_mac[i], "11:22:33:44:55:66"); + sprintf(m_entry[i], + nfs_entry_printf_string[(g_settings.network_nfs_type[i] == (int) CFSMounter::NFS) ? 0 : ((g_settings.network_nfs_type[i] == (int) CFSMounter::CIFS) ? 1 : 2)], + g_settings.network_nfs_ip[i].c_str(), + FILESYSTEM_ENCODING_TO_UTF8(g_settings.network_nfs_dir[i]), + FILESYSTEM_ENCODING_TO_UTF8(g_settings.network_nfs_local_dir[i]), + g_Locale->getText(g_settings.network_nfs_automount[i] ? LOCALE_MESSAGEBOX_YES : LOCALE_MESSAGEBOX_NO)); + sprintf(ISO_8859_1_entry[i],ZapitTools::UTF8_to_Latin1(m_entry[i]).c_str()); + mountMenuEntry[i]->setOption(ISO_8859_1_entry[i]); + } + } else if(actionKey.substr(0,10)=="mountentry") { parent->hide(); @@ -148,7 +172,9 @@ int CNFSMountGui::exec( CMenuTarget* parent, const std::string & actionKey ) int CNFSMountGui::menu() { CMenuWidget mountMenuW(LOCALE_NFS_MOUNT, NEUTRINO_ICON_NETWORK, width); + mountMenuWPtr = &mountMenuW; mountMenuW.addIntroItems(); + mountMenuW.addKey(CRCInput::RC_spkr, this, "rc_spkr"); char s2[12]; for(int i=0 ; i < NETWORK_NFS_NR_OF_ENTRIES ; i++) @@ -156,6 +182,8 @@ int CNFSMountGui::menu() sprintf(s2,"mountentry%d",i); sprintf(ISO_8859_1_entry[i],ZapitTools::UTF8_to_Latin1(m_entry[i]).c_str()); mountMenuEntry[i] = new CMenuForwarderNonLocalized("", true, ISO_8859_1_entry[i], this, s2); + if (!i) + menu_offset = mountMenuW.getItemsCount(); if (CFSMounter::isMounted(g_settings.network_nfs_local_dir[i])) { diff --git a/src/gui/nfs.h b/src/gui/nfs.h index 46d4469ae..3caabdcdb 100644 --- a/src/gui/nfs.h +++ b/src/gui/nfs.h @@ -48,6 +48,9 @@ class CNFSMountGui : public CMenuTarget char m_entry[NETWORK_NFS_NR_OF_ENTRIES][200]; char ISO_8859_1_entry[NETWORK_NFS_NR_OF_ENTRIES][200]; + CMenuWidget *mountMenuWPtr; + int menu_offset; + CMenuForwarderNonLocalized* mountMenuEntry[NETWORK_NFS_NR_OF_ENTRIES]; CFSMounter::FS_Support m_nfs_sup; From 5b2b623314ecc71537bbc7222b599f79dac7c68e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 12:12:11 +0400 Subject: [PATCH 022/142] zapit/src/frontend.cpp: add per-frontend use_usals option, use gotoXX for all satellites if enabled --- src/zapit/include/zapit/frontend_types.h | 1 + src/zapit/src/frontend.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/zapit/include/zapit/frontend_types.h b/src/zapit/include/zapit/frontend_types.h index 590b383f3..eb0a85e89 100644 --- a/src/zapit/include/zapit/frontend_types.h +++ b/src/zapit/include/zapit/frontend_types.h @@ -38,6 +38,7 @@ typedef struct frontend_config { int motorRotationSpeed; int highVoltage; int diseqc_order; + int use_usals; } frontend_config_t; #endif // __FRONTEND_TYPES_H__ diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index d2fc76be0..bc1fa6684 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -1339,7 +1339,7 @@ int CFrontend::driveToSatellitePosition(t_satellite_position satellitePosition, if (rotorSatellitePosition == satellitePosition) return 0; - if (use_usals) { + if (use_usals || config.use_usals) { gotoXX(satellitePosition); moved = true; } else { From 7722ecbdaabef62bc43c214a8eacffa0d82dc186 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 12:12:37 +0400 Subject: [PATCH 023/142] zapit/src/femanager.cpp: save/load frontend use_usals option --- src/zapit/src/femanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 48a633ffb..006a47706 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -239,6 +239,7 @@ bool CFEManager::loadSettings() fe_config.uni_scr = getConfigValue(fe, "uni_scr", -1); fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); fe_config.diseqc_order = getConfigValue(fe, "diseqc_order", UNCOMMITED_FIRST); + fe_config.use_usals = getConfigValue(fe, "use_usals", 0); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); @@ -318,6 +319,7 @@ void CFEManager::saveSettings(bool write) setConfigValue(fe, "uni_scr", fe_config.uni_scr); setConfigValue(fe, "uni_qrg", fe_config.uni_qrg); setConfigValue(fe, "diseqc_order", fe_config.diseqc_order); + setConfigValue(fe, "use_usals", fe_config.use_usals); setConfigValue(fe, "lastSatellitePosition", fe->getRotorSatellitePosition()); setConfigValue(fe, "mode", fe->getMode()); setConfigValue(fe, "master", fe->getMaster()); From ae1abb6fa68d72ccdbb04dfdb415c22d514bcc42 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 12:13:08 +0400 Subject: [PATCH 024/142] gui/scan_setup.cpp: fix use usals for all option, use per-frontend use_usals --- src/gui/scan_setup.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index cf7bf1dc5..bd4aa2716 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -65,7 +65,7 @@ extern char zapit_long[20]; /* ugly */ extern CHintBox *reloadhintBox; -static int all_usals = 1; +//static int all_usals = 1; //sat_iterator_t sit; #define SCANTS_BOUQUET_OPTION_COUNT 3 @@ -805,7 +805,7 @@ int CScanSetup::showFrontendSetup(int number) mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); setupMenu->addItem(mc); - mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &fe_config.use_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); setupMenu->addItem(mc); @@ -1076,8 +1076,10 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon satconfig.diseqc = 0; unilnb = new CMenuOptionNumberChooser(LOCALE_UNICABLE_LNB, &satconfig.diseqc, true, 0, 1); } +#if 0 if(!satconfig.use_usals) all_usals = 0; +#endif CIntInput* lofL = new CIntInput(LOCALE_SATSETUP_LOFL, (int&) satconfig.lnbOffsetLow, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CIntInput* lofH = new CIntInput(LOCALE_SATSETUP_LOFH, (int&) satconfig.lnbOffsetHigh, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); @@ -1394,12 +1396,14 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* bool ret = false; if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_USE_USALS)) { +#if 0 CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); printf("[neutrino] CScanSetup::%s: all usals %d \n", __FUNCTION__, all_usals); satellite_map_t & satmap = fe->getSatellites(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { sit->second.use_usals = all_usals; } +#endif } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_DISEQC)) { printf("[neutrino] CScanSetup::%s: diseqc %d fenumber %d\n", __FUNCTION__, dmode, fenumber); From baf2df01ddcbc8af5c777bb1420f3548a5e2287e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 17 Jul 2013 16:50:21 +0400 Subject: [PATCH 025/142] gui/scan_setup.cpp: show sat diseqc and rotor position in sat config menu --- src/gui/scan_setup.cpp | 45 +++++++++++++++++++++++++++--------------- src/gui/scan_setup.h | 3 +++ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index bd4aa2716..ef8865313 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -887,20 +887,16 @@ int CScanSetup::showScanMenuLnbSetup() std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); //sub menu for sat settings to selectable sat item - CMenuWidget *tempsat = new CMenuWidget(satname.c_str(), NEUTRINO_ICON_SETTINGS, width); - addScanMenuTempSat(tempsat, sit->second); -#if 0 // option not refreshed. - if(sit->second.motor_position > 0) { - char mpos[10]; - sprintf(mpos, "%d", sit->second.motor_position); - sat_setup->addItem(new CMenuForwarderNonLocalized(satname.c_str(), true, mpos, tempsat)); - } else -#endif - { - CMenuForwarder * mf = new CMenuForwarderNonLocalized(satname.c_str(), true, NULL, tempsat); - mf->setHint("", LOCALE_MENU_HINT_SCAN_LNBCONFIG); - sat_setup->addItem(mf); - } + CMenuWidget *tempsat = new CMenuWidget(satname.c_str(), NEUTRINO_ICON_SETTINGS, width); + addScanMenuTempSat(tempsat, sit->second); + + char opt[100]; + sprintf(opt, "diseqc %2d / rotor %2d", sit->second.diseqc+1, sit->second.motor_position); + satoptions.push_back(opt); + CMenuForwarder * mf = new CMenuForwarderNonLocalized(satname.c_str(), true, satoptions[count].c_str(), tempsat); + mf->setHint("", LOCALE_MENU_HINT_SCAN_LNBCONFIG); + sat_setup->addItem(mf); + satmf.push_back(mf); tmp[count] = tempsat; count++; } @@ -910,6 +906,8 @@ int CScanSetup::showScanMenuLnbSetup() delete tmp[i]; } delete sat_setup; + satmf.clear(); + satoptions.clear(); return res; } @@ -1061,13 +1059,13 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon bool unicable = (dmode == DISEQC_UNICABLE); if (!unicable) { - diseqc = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQC_INPUT, &satconfig.diseqc, ((dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED)), -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); + diseqc = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQC_INPUT, &satconfig.diseqc, ((dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED)), -1, 15, this, 1, -1, LOCALE_OPTIONS_OFF); diseqc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQC); comm = new CMenuOptionNumberChooser(LOCALE_SATSETUP_COMM_INPUT, &satconfig.commited, dmode == DISEQC_ADVANCED, -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); comm->setHint("", LOCALE_MENU_HINT_SCAN_COMMITED); uncomm = new CMenuOptionNumberChooser(LOCALE_SATSETUP_UNCOMM_INPUT, &satconfig.uncommited, dmode == DISEQC_ADVANCED, -1, 15, NULL, 1, -1, LOCALE_OPTIONS_OFF); uncomm->setHint("", LOCALE_MENU_HINT_SCAN_UNCOMMITED); - motor = new CMenuOptionNumberChooser(LOCALE_SATSETUP_MOTOR_POS, &satconfig.motor_position, true /*dmode == DISEQC_ADVANCED*/, 0, 64, NULL, 0, 0, LOCALE_OPTIONS_OFF); + motor = new CMenuOptionNumberChooser(LOCALE_SATSETUP_MOTOR_POS, &satconfig.motor_position, true /*dmode == DISEQC_ADVANCED*/, 0, 64, this, 0, 0, LOCALE_OPTIONS_OFF); motor->setHint("", LOCALE_MENU_HINT_SCAN_MOTORPOS); usals = new CMenuOptionChooser(LOCALE_EXTRA_USE_GOTOXX, &satconfig.use_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true /*dmode == DISEQC_ADVANCED*/); usals->setHint("", LOCALE_MENU_HINT_SCAN_USEUSALS); @@ -1515,6 +1513,21 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* } } } + else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_MOTOR_POS) || + ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_DISEQC_INPUT)) { + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + satellite_map_t & satmap = fe->getSatellites(); + int count = 0; + for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) { + if(!sit->second.configured) + continue; + char opt[100]; + sprintf(opt, "diseqc %d / rotor %d", sit->second.diseqc+1, sit->second.motor_position); + satoptions[count] = opt; + satmf[count]->setOption(satoptions[count]); + count++; + } + } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_LOGICAL_NUMBERS)) { printf("[neutrino] CScanSetup::%s: logical numbers %d\n", __FUNCTION__, scansettings.scan_logical_numbers); lcnhd->setActive(scansettings.scan_logical_numbers); diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index 42dd6d5af..428a32a43 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -79,6 +79,9 @@ class CScanSetup : public CMenuTarget, public CChangeObserver /* frontend link to number */ int femaster; + std::vector satoptions; + std::vector satmf; + /* flag to allow any operations which can damage recordings */ bool allow_start; /* flag to re-init frontends */ From cde862081f02264378b43cb13476e65c0ffaa66e Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:38:39 +0400 Subject: [PATCH 026/142] driver/vfd.cpp: add buttons backlight control --- src/driver/vfd.cpp | 10 ++++++++++ src/driver/vfd.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index 130e5357c..009cfacdb 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -199,6 +199,16 @@ void CVFD::setled(int led1, int led2){ } } +void CVFD::setBacklight(bool on_off) +{ + f(cs_get_revision() != 9) + return; + + int led = on_off ? FP_LED_3_ON : FP_LED_3_OFF; + if (ioctl(fd, IOC_FP_LED_CTRL, led) < 0) + perror("FP_LED_3"); +} + void CVFD::setled(bool on_off) { if(g_settings.led_rec_mode == 0) diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 5060069c8..d4192eb83 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -106,6 +106,7 @@ class CVFD void setlcdparameter(void); void setled(void); void setled(bool on_off); + void setBacklight(bool on_off); static CVFD* getInstance(); void init(const char * fontfile, const char * fontname); From 1dba13d74f3864dfa701485570011b8efa74e737 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:39:09 +0400 Subject: [PATCH 027/142] locals: add locales for buttons backlight menu --- data/locale/english.locale | 3 +++ src/system/locals.h | 3 +++ src/system/locals_intern.h | 3 +++ 3 files changed, 9 insertions(+) diff --git a/data/locale/english.locale b/data/locale/english.locale index 46b087399..543e34983 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -685,6 +685,8 @@ lcdmenu.statusline status line lcdmenu.statusline.both volume / playtime lcdmenu.statusline.playtime playtime lcdmenu.statusline.volume volume +ledcontroler.backlight Buttons backlight +ledcontroler.backlight.tv TV mode ledcontroler.blink Blink in deep standby, if timer set ledcontroler.menu Power Button LEDs ledcontroler.mode.deepstandby Deep Standby @@ -756,6 +758,7 @@ menu.hint_audioplayer_title Enable SMS-style title search in playlist menu.hint_auto_lang Auto-switch audio to preferred language menu.hint_auto_subs Auto-start subtitles for preferred language menu.hint_back Return to previous menu\nPress menu key to close all menus +menu.hint_backlight Configure buttons backlight menu.hint_backup Backup configs and channels to selected dir menu.hint_bedit Edit favorites and bouquets menu.hint_bigwindows Channellist, EPG-infos, audioplayer and some other windows are displayed full screen diff --git a/src/system/locals.h b/src/system/locals.h index 798981bd2..cbb7a3396 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -712,6 +712,8 @@ typedef enum LOCALE_LCDMENU_STATUSLINE_BOTH, LOCALE_LCDMENU_STATUSLINE_PLAYTIME, LOCALE_LCDMENU_STATUSLINE_VOLUME, + LOCALE_LEDCONTROLER_BACKLIGHT, + LOCALE_LEDCONTROLER_BACKLIGHT_TV, LOCALE_LEDCONTROLER_BLINK, LOCALE_LEDCONTROLER_MENU, LOCALE_LEDCONTROLER_MODE_DEEPSTANDBY, @@ -783,6 +785,7 @@ typedef enum LOCALE_MENU_HINT_AUTO_LANG, LOCALE_MENU_HINT_AUTO_SUBS, LOCALE_MENU_HINT_BACK, + LOCALE_MENU_HINT_BACKLIGHT, LOCALE_MENU_HINT_BACKUP, LOCALE_MENU_HINT_BEDIT, LOCALE_MENU_HINT_BIGWINDOWS, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index cf9bd009b..472cddbf9 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -712,6 +712,8 @@ const char * locale_real_names[] = "lcdmenu.statusline.both", "lcdmenu.statusline.playtime", "lcdmenu.statusline.volume", + "ledcontroler.backlight", + "ledcontroler.backlight.tv", "ledcontroler.blink", "ledcontroler.menu", "ledcontroler.mode.deepstandby", @@ -783,6 +785,7 @@ const char * locale_real_names[] = "menu.hint_auto_lang", "menu.hint_auto_subs", "menu.hint_back", + "menu.hint_backlight", "menu.hint_backup", "menu.hint_bedit", "menu.hint_bigwindows", From 990dc117b44a9c4c3c78c12fc38bbbd2a2ef4f66 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:40:10 +0400 Subject: [PATCH 028/142] gui/vfd_setup.cpp: add buttons backlight menu --- src/gui/vfd_setup.cpp | 30 ++++++++++++++++++++++++++++++ src/gui/vfd_setup.h | 1 + src/neutrino_menue.h | 1 + 3 files changed, 32 insertions(+) diff --git a/src/gui/vfd_setup.cpp b/src/gui/vfd_setup.cpp index 30f62d1ab..6c15f1359 100644 --- a/src/gui/vfd_setup.cpp +++ b/src/gui/vfd_setup.cpp @@ -129,6 +129,14 @@ int CVfdSetup::showSetup() mf->setHint("", LOCALE_MENU_HINT_POWER_LEDS); vfds->addItem(mf); } + if(cs_get_revision() == 9) + { + CMenuWidget * blMenu = new CMenuWidget(LOCALE_LCDMENU_HEAD, NEUTRINO_ICON_LCD, width, MN_WIDGET_ID_VFDSETUP_BACKLIGHT); + showBacklightSetup(blMenu); + mf = new CMenuDForwarder(LOCALE_LEDCONTROLER_BACKLIGHT, true, NULL, blMenu, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_BACKLIGHT); + vfds->addItem(mf); + } vfds->addItem(GenericMenuSeparatorLine); @@ -214,6 +222,24 @@ void CVfdSetup::showLedSetup(CMenuWidget *mn_led_widget) mn_led_widget->addItem(mc); } +void CVfdSetup::showBacklightSetup(CMenuWidget *mn_led_widget) +{ + CMenuOptionChooser * mc; + mn_led_widget->addIntroItems(LOCALE_LEDCONTROLER_BACKLIGHT); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_BACKLIGHT_TV, &g_settings.backlight_tv, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_LEDS_TV); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_STANDBY, &g_settings.backlight_standby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_STANDBY); + mn_led_widget->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_LEDCONTROLER_MODE_DEEPSTANDBY, &g_settings.backlight_deepstandby, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_LEDS_DEEPSTANDBY); + mn_led_widget->addItem(mc); +} + bool CVfdSetup::changeNotify(const neutrino_locale_t OptionName, void */* data */) { @@ -235,5 +261,9 @@ bool CVfdSetup::changeNotify(const neutrino_locale_t OptionName, void */* data * { CVFD::getInstance()->setled(); } + else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_LEDCONTROLER_BACKLIGHT_TV)) + { + CVFD::getInstance()->setBacklight(g_settings.backlight_tv); + } return false; } diff --git a/src/gui/vfd_setup.h b/src/gui/vfd_setup.h index ca8dc6a47..b5eb7dfdd 100644 --- a/src/gui/vfd_setup.h +++ b/src/gui/vfd_setup.h @@ -44,6 +44,7 @@ int showSetup(); void showBrightnessSetup(CMenuWidget *mn_widget); void showLedSetup(CMenuWidget *mn_led_widget); + void showBacklightSetup(CMenuWidget *mn_led_widget); virtual bool changeNotify(const neutrino_locale_t OptionName, void *data); int brightness; int brightnessstandby; diff --git a/src/neutrino_menue.h b/src/neutrino_menue.h index 7e5781e93..686fba91b 100644 --- a/src/neutrino_menue.h +++ b/src/neutrino_menue.h @@ -91,6 +91,7 @@ enum MN_WIDGET_ID MN_WIDGET_ID_VFDSETUP, MN_WIDGET_ID_VFDSETUP_LCD_SLIDERS, MN_WIDGET_ID_VFDSETUP_LED_SETUP, + MN_WIDGET_ID_VFDSETUP_BACKLIGHT, //keybind setup MN_WIDGET_ID_KEYSETUP, From c31c9d0e7f03f8e4d03bbb749b6e11a99fcf694b Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:41:37 +0400 Subject: [PATCH 029/142] neutrino.cpp: add buttons backlight settings --- src/neutrino.cpp | 15 +++++++++++++-- src/system/settings.h | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 5e8666837..c66a93807 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -375,6 +375,9 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.led_deep_mode = configfile.getInt32( "led_deep_mode", 3); g_settings.led_rec_mode = configfile.getInt32( "led_rec_mode", 1); g_settings.led_blink = configfile.getInt32( "led_blink", 1); + g_settings.backlight_tv = configfile.getInt32( "backlight_tv", 1); + g_settings.backlight_standby = configfile.getInt32( "backlight_standby", 0); + g_settings.backlight_deepstandby = configfile.getInt32( "backlight_deepstandby", 0); g_settings.hdd_fs = configfile.getInt32( "hdd_fs", 0); g_settings.hdd_sleep = configfile.getInt32( "hdd_sleep", 120); @@ -854,6 +857,9 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32( "led_deep_mode", g_settings.led_deep_mode); configfile.setInt32( "led_rec_mode", g_settings.led_rec_mode); configfile.setInt32( "led_blink", g_settings.led_blink); + configfile.setInt32( "backlight_tv", g_settings.backlight_tv); + configfile.setInt32( "backlight_standby", g_settings.backlight_standby); + configfile.setInt32( "backlight_deepstandby", g_settings.backlight_deepstandby); //misc configfile.setInt32( "power_standby", g_settings.power_standby); @@ -1786,6 +1792,7 @@ TIMER_START(); CVFD::getInstance()->init(font.filename, font.name); CVFD::getInstance()->Clear(); CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_NEUTRINO_STARTING)); + CVFD::getInstance()->setBacklight(g_settings.backlight_tv); /* set service manager options before starting zapit */ CServiceManager::getInstance()->KeepNumbers(g_settings.keep_channel_numbers); @@ -3230,7 +3237,6 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) if(mode == mode_radio && g_Radiotext) g_Radiotext->radiotext_stop(); - #ifdef ENABLE_PIP g_Zapit->stopPip(); #endif @@ -3260,6 +3266,7 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) CVFD::getInstance()->Clear(); CVFD::getInstance()->setMode(CVFD::MODE_STANDBY); } + CVFD::getInstance()->setBacklight(g_settings.backlight_standby); if(g_settings.mode_clock) { InfoClock->StopClock(); @@ -3309,6 +3316,8 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) perror(NEUTRINO_LEAVE_STANDBY_SCRIPT " failed"); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); + CVFD::getInstance()->setBacklight(g_settings.backlight_tv); + g_Zapit->setStandby(false); /* the old code did: if(was_record) g_Zapit->startPlayBack() @@ -3620,8 +3629,10 @@ void stop_daemons(bool stopall, bool for_flash) delete &CMoviePlayerGui::getInstance(); CZapit::getInstance()->Stop(); printf("zapit shutdown done\n"); - if (!for_flash) + if (!for_flash) { CVFD::getInstance()->Clear(); + CVFD::getInstance()->setBacklight(g_settings.backlight_deepstandby); + } if(stopall && !for_flash) { if (cpuFreq) { cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); diff --git a/src/system/settings.h b/src/system/settings.h index 88a73e417..1ce6f1566 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -543,6 +543,9 @@ struct SNeutrinoSettings int led_deep_mode; int led_rec_mode; int led_blink; + int backlight_tv; + int backlight_standby; + int backlight_deepstandby; #define FILESYSTEM_ENCODING_TO_UTF8(a) (g_settings.filesystem_is_utf8 ? (a) : ZapitTools::Latin1_to_UTF8(a).c_str()) #define UTF8_TO_FILESYSTEM_ENCODING(a) (g_settings.filesystem_is_utf8 ? (a) : ZapitTools::UTF8_to_Latin1(a).c_str()) #define FILESYSTEM_ENCODING_TO_UTF8_STRING(a) (g_settings.filesystem_is_utf8 ? (a) : ZapitTools::Latin1_to_UTF8(a)) From e6af083de8d4e9b10258561ba3780978e34693df Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:42:09 +0400 Subject: [PATCH 030/142] gui/videosettings.cpp: fix unused variable --- src/gui/videosettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index b1927c04a..5a8b89623 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -330,7 +330,6 @@ int CVideoSettings::showVideoSetup() void CVideoSettings::setVideoSettings() { printf("[neutrino VideoSettings] %s init video settings...\n", __FUNCTION__); - unsigned int system_rev = cs_get_revision(); #if 0 //FIXME focus: ?? this is different for different boxes videoDecoder->SetVideoMode((analog_mode_t) g_settings.analog_mode1); @@ -339,6 +338,7 @@ void CVideoSettings::setVideoSettings() #ifdef BOXMODEL_APOLLO changeNotify(LOCALE_VIDEOMENU_ANALOG_MODE, NULL); #else + unsigned int system_rev = cs_get_revision(); if (system_rev == 0x06) { changeNotify(LOCALE_VIDEOMENU_ANALOG_MODE, NULL); } else { From c337d26f9919085892670d7392571d11572c6f9f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:43:35 +0400 Subject: [PATCH 031/142] lib/libcoolstream2: headers update --- lib/libcoolstream2/audio_cs.h | 19 ++++++++++++------ lib/libcoolstream2/cs_frontpanel.h | 4 ++-- lib/libcoolstream2/video_cs.h | 31 ++++++++++++++++++++++-------- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/lib/libcoolstream2/audio_cs.h b/lib/libcoolstream2/audio_cs.h index a5aa5d866..e15c00c29 100644 --- a/lib/libcoolstream2/audio_cs.h +++ b/lib/libcoolstream2/audio_cs.h @@ -78,15 +78,12 @@ private: unsigned int unit; cDemux *demux; cVideo *video; - CS_AUDIO_PDATA *privateData; - //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; + CS_AUDIO_PDATA *privateData; bool muted; AUDIO_FORMAT streamType; AUDIO_SYNC_MODE syncMode; - bool started; - unsigned int uAudioPTSDelay; - unsigned int uAudioDolbyPTSDelay, uAudioMpegPTSDelay; + unsigned int uCurrentPTSDelay; bool receivedDelay; /* internal methods */ @@ -100,6 +97,10 @@ private: bool spdifDD; bool hasMuteScheduled; bool analogOut; +#ifdef ISAPOLLO + bool containerMode; + bool hbrMode; +#endif // cAudio(unsigned int Unit); public: @@ -134,7 +135,7 @@ public: AUDIO_FORMAT GetStreamType(void) { return streamType; } bool ReceivedAudioDelay(void) { return receivedDelay; } void SetReceivedAudioDelay(bool Set = false) { receivedDelay = Set; } - unsigned int GetAudioDelay(void) { return (streamType == AUDIO_FMT_DOLBY_DIGITAL) ? uAudioDolbyPTSDelay : uAudioMpegPTSDelay; } + unsigned int GetAudioDelay(void) { return uCurrentPTSDelay; } void SetSyncMode(AVSYNC_TYPE SyncMode); /* stream source */ @@ -162,6 +163,12 @@ public: void SetDemux(cDemux *Demux); void SetVideo(cVideo *Video); static cAudio *GetDecoder(unsigned int Unit); + bool Started(void); + bool Paused(void); +#ifdef ISAPOLLO + void SetHBRMode(bool Enable = false); + void SetContainerMode(bool Enable = false); +#endif }; #endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream2/cs_frontpanel.h b/lib/libcoolstream2/cs_frontpanel.h index 97c0f577a..f4963da36 100644 --- a/lib/libcoolstream2/cs_frontpanel.h +++ b/lib/libcoolstream2/cs_frontpanel.h @@ -76,10 +76,10 @@ typedef struct { typedef enum { FP_LED_1_ON = 0x81, FP_LED_2_ON = 0x82, - FP_LED_3_ON = 0x83, + FP_LED_3_ON = 0x88, FP_LED_1_OFF = 0x01, FP_LED_2_OFF = 0x02, - FP_LED_3_OFF = 0x03, + FP_LED_3_OFF = 0x08, } fp_led_ctrl_t; typedef struct { diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h index 1d53e6268..70b08c6b8 100644 --- a/lib/libcoolstream2/video_cs.h +++ b/lib/libcoolstream2/video_cs.h @@ -5,7 +5,6 @@ /* */ /* (C) 2008 CoolStream International */ /* */ -/* $Id:: $ */ /*******************************************************************************/ #ifndef __VIDEO_CS_H_ #define __VIDEO_CS_H_ @@ -151,6 +150,12 @@ typedef enum VIDEO_CONTROL_MAX = VIDEO_CONTROL_SHARPNESS } VIDEO_CONTROL; +typedef enum +{ + VIDEO_STREAM_FEED_MODE_LIVE = 0, + VIDEO_STREAM_FEED_MODE_PLAYBACK, +} VIDEO_STREAM_FEED_MODE; + class cDemux; class cAudio; @@ -158,7 +163,7 @@ class cVideo { friend class cAudio; private: static cVideo *instance[CS_MAX_VIDEO_DECODERS]; - + // unsigned int unit; CS_VIDEO_PDATA *privateData; VIDEO_FORMAT streamType; @@ -171,14 +176,15 @@ private: DISPLAY_AR PictureAR; VIDEO_FRAME_RATE FrameRate; VIDEO_HDMI_CEC_MODE hdmiCECMode; +#ifdef ISAPOLLO + VIDEO_STREAM_FEED_MODE streamFeedMode; +#endif bool Interlaced; - unsigned int uVPPDisplayDelay; - unsigned int uVideoPTSDelay; + unsigned int uCurrentVPPDisplayDelay; + unsigned int uCurrentVideoPTSDelay; int StcPts; - bool started; unsigned int bStandby; bool blank; - bool playing; bool auto_format; int uFormatIndex; bool vbi_started; @@ -224,8 +230,8 @@ public: /* get play state */ int getPlayState(void); - void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; - void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; + void SetVPPDelay(unsigned int delay) { uCurrentVPPDisplayDelay = delay; } + void SetVideoDelay(unsigned int delay) { uCurrentVideoPTSDelay = delay; } /* Notification handlers */ void HandleVPPMessage(int Event, void *pData); void HandleVideoMessage(void * hHandle, int Event, void *pData); @@ -233,7 +239,9 @@ public: VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } /* change video play state */ +#ifndef ISAPOLLO int Prepare(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); +#endif int Start(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); int Stop(bool Blank = true); bool Pause(void); @@ -271,6 +279,13 @@ public: bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); void SetDemux(cDemux *Demux); static cVideo *GetDecoder(unsigned int Unit); + bool Started(void); + bool Playing(void); + bool Paused(void); + void SyncSTC(void); +#ifdef ISAPOLLO + void SetStreamFeedMode(VIDEO_STREAM_FEED_MODE Mode); +#endif }; #endif // __VIDEO_CS_H_ From 6f65e59e2243d407a776eb744623955e1a7b0770 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:45:26 +0400 Subject: [PATCH 032/142] driver/vfd.cpp: fix typo --- src/driver/vfd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index 009cfacdb..f2f95dac9 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -201,7 +201,7 @@ void CVFD::setled(int led1, int led2){ void CVFD::setBacklight(bool on_off) { - f(cs_get_revision() != 9) + if(cs_get_revision() != 9) return; int led = on_off ? FP_LED_3_ON : FP_LED_3_OFF; From 9cb1a9c33551fba1a91029813f106efdc3e51821 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 18 Jul 2013 14:49:01 +0400 Subject: [PATCH 033/142] gui/cam_menu.cpp: dont show CI reset/CI clock if no CI slots --- src/gui/cam_menu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/cam_menu.cpp b/src/gui/cam_menu.cpp index a537be267..a1047ef59 100644 --- a/src/gui/cam_menu.cpp +++ b/src/gui/cam_menu.cpp @@ -107,12 +107,12 @@ int CCAMMenuHandler::doMainMenu() //cammenu->addItem( GenericMenuSeparatorLine ); cammenu->addIntroItems(); - if(true /* CiSlots */) { + if(CiSlots) { cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_RESET_STANDBY, &g_settings.ci_standby_reset, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); cammenu->addItem( new CMenuOptionNumberChooser(LOCALE_CI_CLOCK, &g_settings.ci_clock, true, 6, 12, this)); - cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_IGNORE_MSG, &g_settings.ci_ignore_messages, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); - cammenu->addItem( GenericMenuSeparatorLine ); } + cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_IGNORE_MSG, &g_settings.ci_ignore_messages, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); + cammenu->addItem( GenericMenuSeparatorLine ); CMenuWidget * tempMenu; int i = 0; From 61d36266c842368edf334396c1d88821e63d551d Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Fri, 19 Jul 2013 11:59:54 +0200 Subject: [PATCH 034/142] src/gui/update_ext.cpp: Fix memleak (Thx SatBaby) - rename enum's 'RESET_Fxx' => 'CLOSE_Fxx' --- src/gui/update_ext.cpp | 46 ++++++++++++++++++++++++++---------------- src/gui/update_ext.h | 8 +++++--- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/gui/update_ext.cpp b/src/gui/update_ext.cpp index 0346eeb3d..ac8eade26 100644 --- a/src/gui/update_ext.cpp +++ b/src/gui/update_ext.cpp @@ -71,6 +71,7 @@ CExtUpdate::CExtUpdate() fLogfile = "/tmp/update.log"; mountPkt = "/tmp/image_mount"; FileHelpers = NULL; + MTDBuf = NULL; flashErrorFlag = false; total = bsize = used = 0; free1 = free2 = free3 = 0; @@ -84,6 +85,8 @@ CExtUpdate::~CExtUpdate() { if(FileHelpers) delete[] FileHelpers; + if(MTDBuf) + delete[] MTDBuf; copyList.clear(); blackList.clear(); deleteList.clear(); @@ -105,12 +108,17 @@ bool CExtUpdate::ErrorReset(bool modus, const std::string & msg1, const std::str umount(mountPkt.c_str()); // my_system(2,"rmmod", mtdramDriver.c_str()); } - if (modus & RESET_FD1) + if (modus & CLOSE_FD1) close(fd1); - if (modus & RESET_FD2) + if (modus & CLOSE_FD2) close(fd2); - if (modus & RESET_F1) + if (modus & CLOSE_F1) fclose(f1); + if (modus & DELETE_MTDBUF) { + if (MTDBuf != NULL) + delete[] MTDBuf; + MTDBuf = NULL; + } if (msg2 == "") snprintf(buf, sizeof(buf), "%s\n", msg1.c_str()); @@ -276,19 +284,19 @@ bool CExtUpdate::applySettings() } int MTDBufSize = 0xFFFF; - char *MTDBuf = new char[MTDBufSize]; + MTDBuf = new char[MTDBufSize]; // copy image to mtdblock if (MTDBuf == NULL) - return ErrorReset(RESET_UNLOAD, "malloc error"); + return ErrorReset(RESET_UNLOAD, "memory allocation error"); fd1 = open(imgFilename.c_str(), O_RDONLY); if (fd1 < 0) - return ErrorReset(RESET_UNLOAD, "cannot read image file: " + imgFilename); + return ErrorReset(RESET_UNLOAD | DELETE_MTDBUF, "cannot read image file: " + imgFilename); long filesize = lseek(fd1, 0, SEEK_END); lseek(fd1, 0, SEEK_SET); if(filesize == 0) - return ErrorReset(RESET_UNLOAD | RESET_FD1, "image filesize is 0"); + return ErrorReset(RESET_UNLOAD | CLOSE_FD1 | DELETE_MTDBUF, "image filesize is 0"); if(filesize > mtdSize) - return ErrorReset(RESET_UNLOAD | RESET_FD1, "image filesize too large"); + return ErrorReset(RESET_UNLOAD | CLOSE_FD1 | DELETE_MTDBUF, "image filesize too large"); fd2 = -1; int tmpCount = 0; while (fd2 < 0) { @@ -299,7 +307,7 @@ bool CExtUpdate::applySettings() sleep(1); } if (fd2 < 0) - return ErrorReset(RESET_UNLOAD | RESET_FD1, "cannot open mtdBlock"); + return ErrorReset(RESET_UNLOAD | CLOSE_FD1 | DELETE_MTDBUF, "cannot open mtdBlock"); long fsize = filesize; long block; while(fsize > 0) { @@ -316,12 +324,15 @@ bool CExtUpdate::applySettings() FileHelpers->createDir(mountPkt.c_str(), 0755); int res = mount(mtdBlockFileName.c_str(), mountPkt.c_str(), "jffs2", 0, NULL); if (res) - return ErrorReset(RESET_UNLOAD, "mount error"); + return ErrorReset(RESET_UNLOAD | DELETE_MTDBUF, "mount error"); if (get_fs_usage(mountPkt.c_str(), total, used, &bsize)) free1 = (total * bsize) / 1024 - (used * bsize) / 1024; if (!readBackupList(mountPkt)) { + if (MTDBuf != NULL) + delete[] MTDBuf; + MTDBuf = NULL; if (flashErrorFlag) return false; return ErrorReset(0, "error readBackupList"); @@ -329,20 +340,20 @@ bool CExtUpdate::applySettings() res = umount(mountPkt.c_str()); if (res) - return ErrorReset(RESET_UNLOAD, "unmount error"); + return ErrorReset(RESET_UNLOAD | DELETE_MTDBUF, "unmount error"); unlink(imgFilename.c_str()); // copy mtdblock to image if (MTDBuf == NULL) - return ErrorReset(RESET_UNLOAD, "malloc error"); + return ErrorReset(RESET_UNLOAD, "memory allocation error"); fd1 = open(mtdBlockFileName.c_str(), O_RDONLY); if (fd1 < 0) - return ErrorReset(RESET_UNLOAD, "cannot read mtdBlock"); + return ErrorReset(RESET_UNLOAD | DELETE_MTDBUF, "cannot read mtdBlock"); fsize = mtdRamSize; fd2 = open(imgFilename.c_str(), O_WRONLY | O_CREAT); if (fd2 < 0) - return ErrorReset(RESET_UNLOAD | RESET_FD1, "cannot open image file: ", imgFilename); + return ErrorReset(RESET_UNLOAD | CLOSE_FD1 | DELETE_MTDBUF, "cannot open image file: ", imgFilename); while(fsize > 0) { block = fsize; if(block > (long)MTDBufSize) @@ -358,7 +369,7 @@ bool CExtUpdate::applySettings() // check image file size if (mtdRamSize != fsizeDst) { unlink(imgFilename.c_str()); - return ErrorReset(0, "error file size: ", imgFilename); + return ErrorReset(DELETE_MTDBUF, "error file size: ", imgFilename); } // unload mtdramDriver only @@ -367,7 +378,8 @@ bool CExtUpdate::applySettings() if(hintBox) hintBox->hide(); - delete[] MTDBuf; + if (MTDBuf != NULL) + delete[] MTDBuf; MTDBuf = NULL; sync(); return true; @@ -546,7 +558,7 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) fgetpos(f1, &fz); fseek(f1, 0, SEEK_SET); if (fz.__pos == 0) - return ErrorReset(RESET_F1, "backuplist filesize is 0"); + return ErrorReset(CLOSE_F1, "backuplist filesize is 0"); size_t pos; std::string line; diff --git a/src/gui/update_ext.h b/src/gui/update_ext.h index 18280d161..c53b3e247 100644 --- a/src/gui/update_ext.h +++ b/src/gui/update_ext.h @@ -39,15 +39,17 @@ class CExtUpdate enum { RESET_UNLOAD = 1, - RESET_FD1 = 2, - RESET_FD2 = 4, - RESET_F1 = 8 + CLOSE_FD1 = 2, + CLOSE_FD2 = 4, + CLOSE_F1 = 8, + DELETE_MTDBUF = 16 }; std::string imgFilename; std::string mtdRamError; int mtdNumber; int fd1, fd2; FILE *f1; + char *MTDBuf; std::string mtdramDriver; std::string backupList, defaultBackup; std::string mountPkt; From d1f27260602903c864b3dbd6857c29ab39e636e0 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 13 Jul 2013 13:49:47 +0200 Subject: [PATCH 035/142] Add Member to change the OSD color --- src/gui/color.cpp | 112 ++++++++++++++++++++++++++++++++++++++++++++++ src/gui/color.h | 18 ++++++++ 2 files changed, 130 insertions(+) diff --git a/src/gui/color.cpp b/src/gui/color.cpp index d4e7e0fad..322dfb896 100644 --- a/src/gui/color.cpp +++ b/src/gui/color.cpp @@ -88,3 +88,115 @@ void fadeColor(unsigned char &r, unsigned char &g, unsigned char &b, int fade, b recalcColor(b, fade); protectColor(r,g,b, protect); } + +unsigned char getBrightnessRGB(fb_pixel_t &color) +{ + RgbColor rgb; + rgb.r = (color & 0x00FF0000) >> 16; + rgb.g = (color & 0x0000FF00) >> 8; + rgb.b = color & 0x000000FF; + + return rgb.r > rgb.g ? (rgb.r > rgb.b ? rgb.r : rgb.b) : (rgb.g > rgb.b ? rgb.g : rgb.b); +} + +fb_pixel_t changeBrightnessRGBRel(fb_pixel_t &color, int br) +{ + int br_ = (int)getBrightnessRGB(color); + br_ += br; + if (br_ < 0) br_ = 0; + if (br_ > 255) br_ = 255; + return changeBrightnessRGB(color, (unsigned char)br_); +} + +fb_pixel_t changeBrightnessRGB(fb_pixel_t &color, unsigned char br) +{ + HsvColor hsv; + RgbColor rgb; + + unsigned char tr; + tr = (color & 0xFF000000) >> 24; + rgb.r = (color & 0x00FF0000) >> 16; + rgb.g = (color & 0x0000FF00) >> 8; + rgb.b = color & 0x000000FF; + + Rgb2Hsv(&rgb, &hsv); + hsv.v = br; + Hsv2Rgb(&hsv, &rgb); + + return (((tr << 24) & 0xFF000000) | + ((rgb.r << 16) & 0x00FF0000) | + ((rgb.g << 8) & 0x0000FF00) | + ((rgb.b ) & 0x000000FF)); +} + +void Hsv2Rgb(HsvColor *hsv, RgbColor *rgb) +{ + unsigned char region, remainder, p, q, t; + + if (hsv->s == 0) { + rgb->r = hsv->v; + rgb->g = hsv->v; + rgb->b = hsv->v; + return; + } + + region = hsv->h / 43; + remainder = (hsv->h - (region * 43)) * 6; + + p = (hsv->v * (255 - hsv->s)) >> 8; + q = (hsv->v * (255 - ((hsv->s * remainder) >> 8))) >> 8; + t = (hsv->v * (255 - ((hsv->s * (255 - remainder)) >> 8))) >> 8; + + switch (region) { + case 0: + rgb->r = hsv->v; rgb->g = t; rgb->b = p; + break; + case 1: + rgb->r = q; rgb->g = hsv->v; rgb->b = p; + break; + case 2: + rgb->r = p; rgb->g = hsv->v; rgb->b = t; + break; + case 3: + rgb->r = p; rgb->g = q; rgb->b = hsv->v; + break; + case 4: + rgb->r = t; rgb->g = p; rgb->b = hsv->v; + break; + default: + rgb->r = hsv->v; rgb->g = p; rgb->b = q; + break; + } + + return; +} + +void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv) +{ + unsigned char rgbMin, rgbMax; + + rgbMin = rgb->r < rgb->g ? (rgb->r < rgb->b ? rgb->r : rgb->b) : (rgb->g < rgb->b ? rgb->g : rgb->b); + rgbMax = rgb->r > rgb->g ? (rgb->r > rgb->b ? rgb->r : rgb->b) : (rgb->g > rgb->b ? rgb->g : rgb->b); + + hsv->v = rgbMax; + if (hsv->v == 0) { + hsv->h = 0; + hsv->s = 0; + return; + } + + hsv->s = 255 * long(rgbMax - rgbMin) / hsv->v; + if (hsv->s == 0) { + hsv->h = 0; + return; + } + + if (rgbMax == rgb->r) + hsv->h = 0 + 43 * (rgb->g - rgb->b) / (rgbMax - rgbMin); + else if (rgbMax == rgb->g) + hsv->h = 85 + 43 * (rgb->b - rgb->r) / (rgbMax - rgbMin); + else + hsv->h = 171 + 43 * (rgb->r - rgb->g) / (rgbMax - rgbMin); + + return; +} diff --git a/src/gui/color.h b/src/gui/color.h index 7e58324fa..bcffc5b6f 100644 --- a/src/gui/color.h +++ b/src/gui/color.h @@ -34,6 +34,7 @@ #define __color__ #define COL_MAXFREE 254-8*9 - 1 +#include #define COL_COLORED_EVENTS_CHANNELLIST 254-8*9 #define COL_COLORED_EVENTS_INFOBAR 254-8*8 #define COL_INFOBAR_SHADOW 254-8*7 @@ -98,5 +99,22 @@ int convertSetupAlpha2Alpha(unsigned char alpha); void fadeColor(unsigned char &r, unsigned char &g, unsigned char &b, int fade, bool protect=true); +typedef struct { + unsigned char r; + unsigned char g; + unsigned char b; +} RgbColor; + +typedef struct { + unsigned char h; + unsigned char s; + unsigned char v; +} HsvColor; + +unsigned char getBrightnessRGB(fb_pixel_t &color); +fb_pixel_t changeBrightnessRGBRel(fb_pixel_t &color, int br); +fb_pixel_t changeBrightnessRGB(fb_pixel_t &color, unsigned char br); +void Hsv2Rgb(HsvColor *hsv, RgbColor *rgb); +void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv); #endif From e60067545f4434ee81edf31361a601b6f3113320 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 11 Jul 2013 09:34:04 +0200 Subject: [PATCH 036/142] Define real text color for use in RenderString() --- src/gui/color.cpp | 22 ++++++++-- src/gui/color.h | 30 ++++++++++++-- src/system/setting_helpers.cpp | 76 ++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 7 deletions(-) diff --git a/src/gui/color.cpp b/src/gui/color.cpp index 322dfb896..4a64c54ac 100644 --- a/src/gui/color.cpp +++ b/src/gui/color.cpp @@ -89,7 +89,7 @@ void fadeColor(unsigned char &r, unsigned char &g, unsigned char &b, int fade, b protectColor(r,g,b, protect); } -unsigned char getBrightnessRGB(fb_pixel_t &color) +unsigned char getBrightnessRGB(fb_pixel_t color) { RgbColor rgb; rgb.r = (color & 0x00FF0000) >> 16; @@ -99,7 +99,7 @@ unsigned char getBrightnessRGB(fb_pixel_t &color) return rgb.r > rgb.g ? (rgb.r > rgb.b ? rgb.r : rgb.b) : (rgb.g > rgb.b ? rgb.g : rgb.b); } -fb_pixel_t changeBrightnessRGBRel(fb_pixel_t &color, int br) +fb_pixel_t changeBrightnessRGBRel(fb_pixel_t color, int br) { int br_ = (int)getBrightnessRGB(color); br_ += br; @@ -108,7 +108,23 @@ fb_pixel_t changeBrightnessRGBRel(fb_pixel_t &color, int br) return changeBrightnessRGB(color, (unsigned char)br_); } -fb_pixel_t changeBrightnessRGB(fb_pixel_t &color, unsigned char br) +void changeBrightnessRGBRel2(RgbColor *rgb, int br) +{ + fb_pixel_t color = (((rgb->r << 16) & 0x00FF0000) | + ((rgb->g << 8) & 0x0000FF00) | + ((rgb->b ) & 0x000000FF)); + int br_ = (int)getBrightnessRGB(color); + br_ += br; + if (br_ < 0) br_ = 0; + if (br_ > 255) br_ = 255; + + HsvColor hsv; + Rgb2Hsv(rgb, &hsv); + hsv.v = br; + Hsv2Rgb(&hsv, rgb); +} + +fb_pixel_t changeBrightnessRGB(fb_pixel_t color, unsigned char br) { HsvColor hsv; RgbColor rgb; diff --git a/src/gui/color.h b/src/gui/color.h index bcffc5b6f..8e6a2e75c 100644 --- a/src/gui/color.h +++ b/src/gui/color.h @@ -33,8 +33,10 @@ #ifndef __color__ #define __color__ -#define COL_MAXFREE 254-8*9 - 1 #include + +#define COL_MAXFREE 254-8*12 - 1 +#define COL_NEUTRINO_TEXT 254-8*12 // 24 values #define COL_COLORED_EVENTS_CHANNELLIST 254-8*9 #define COL_COLORED_EVENTS_INFOBAR 254-8*8 #define COL_INFOBAR_SHADOW 254-8*7 @@ -91,6 +93,23 @@ #define COL_MENUCONTENTSELECTED_PLUS_2 (CFrameBuffer::getInstance()->realcolor[(COL_MENUCONTENTSELECTED + 2)]) #define COL_MENUCONTENTINACTIVE_PLUS_0 (CFrameBuffer::getInstance()->realcolor[(COL_MENUCONTENTINACTIVE + 0)]) #define COL_BACKGROUND_PLUS_0 (CFrameBuffer::getInstance()->realcolor[(COL_BACKGROUND + 0)]) + +// text colors +#define COL_COLORED_EVENTS_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 0)]) +#define COL_INFOBAR_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 1)]) +#define COL_INFOBAR_SHADOW_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 2)]) +#define COL_MENUHEAD_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 3)]) +#define COL_MENUCONTENT_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 4)]) +#define COL_MENUCONTENT_TEXT_PLUS_1 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 5)]) +#define COL_MENUCONTENT_TEXT_PLUS_2 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 6)]) +#define COL_MENUCONTENT_TEXT_PLUS_3 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 7)]) +#define COL_MENUCONTENTDARK_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 8)]) +#define COL_MENUCONTENTDARK_TEXT_PLUS_1 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 9)]) +#define COL_MENUCONTENTDARK_TEXT_PLUS_2 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 10)]) +#define COL_MENUCONTENTSELECTED_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 11)]) +#define COL_MENUCONTENTSELECTED_TEXT_PLUS_1 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 12)]) +#define COL_MENUCONTENTSELECTED_TEXT_PLUS_2 (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 13)]) +#define COL_MENUCONTENTINACTIVE_TEXT (CFrameBuffer::getInstance()->realcolor[(COL_NEUTRINO_TEXT + 14)]) #endif @@ -111,9 +130,12 @@ typedef struct { unsigned char v; } HsvColor; -unsigned char getBrightnessRGB(fb_pixel_t &color); -fb_pixel_t changeBrightnessRGBRel(fb_pixel_t &color, int br); -fb_pixel_t changeBrightnessRGB(fb_pixel_t &color, unsigned char br); +unsigned char getBrightnessRGB(fb_pixel_t color); + +fb_pixel_t changeBrightnessRGBRel(fb_pixel_t color, int br); +fb_pixel_t changeBrightnessRGB(fb_pixel_t color, unsigned char br); +void changeBrightnessRGBRel2(RgbColor *rgb, int br); + void Hsv2Rgb(HsvColor *hsv, RgbColor *rgb); void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv); diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index 42f9fb6cd..99717e25f 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -178,6 +178,82 @@ void CColorSetupNotifier::setPalette() convertSetupColor2RGB(g_settings.colored_events_red, g_settings.colored_events_green, g_settings.colored_events_blue), 8, convertSetupAlpha2Alpha(g_settings.infobar_alpha) ); + // ##### TEXT COLORS ##### + // COL_COLORED_EVENTS_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 0, + convertSetupColor2RGB(g_settings.colored_events_red, g_settings.colored_events_green, g_settings.colored_events_blue), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_INFOBAR_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 1, + convertSetupColor2RGB(g_settings.infobar_Text_red, g_settings.infobar_Text_green, g_settings.infobar_Text_blue), + convertSetupAlpha2Alpha(g_settings.infobar_alpha)); + + // COL_INFOBAR_SHADOW_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 2, + convertSetupColor2RGB(int(g_settings.infobar_Text_red*0.6), int(g_settings.infobar_Text_green*0.6), int(g_settings.infobar_Text_blue*0.6)), + convertSetupAlpha2Alpha(g_settings.infobar_alpha)); + + // COL_MENUHEAD_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 3, + convertSetupColor2RGB(g_settings.menu_Head_Text_red, g_settings.menu_Head_Text_green, g_settings.menu_Head_Text_blue), + convertSetupAlpha2Alpha(g_settings.menu_Head_alpha)); + + // COL_MENUCONTENT_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 4, + convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENT_TEXT_PLUS_1 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 5, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), -16), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENT_TEXT_PLUS_2 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 6, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), -32), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENT_TEXT_PLUS_3 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 7, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), -48), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENTDARK_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 8, + convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENTDARK_TEXT_PLUS_1 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 9, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), -52), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENTDARK_TEXT_PLUS_2 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 10, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Text_red, g_settings.menu_Content_Text_green, g_settings.menu_Content_Text_blue), -60), + convertSetupAlpha2Alpha(g_settings.menu_Content_alpha)); + + // COL_MENUCONTENTSELECTED_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 11, + convertSetupColor2RGB(g_settings.menu_Content_Selected_Text_red, g_settings.menu_Content_Selected_Text_green, g_settings.menu_Content_Selected_Text_blue), + convertSetupAlpha2Alpha(g_settings.menu_Content_Selected_alpha)); + + // COL_MENUCONTENTSELECTED_TEXT_PLUS_1 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 12, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Selected_Text_red, g_settings.menu_Content_Selected_Text_green, g_settings.menu_Content_Selected_Text_blue), -16), + convertSetupAlpha2Alpha(g_settings.menu_Content_Selected_alpha)); + + // COL_MENUCONTENTSELECTED_TEXT_PLUS_2 + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 13, + changeBrightnessRGBRel(convertSetupColor2RGB(g_settings.menu_Content_Selected_Text_red, g_settings.menu_Content_Selected_Text_green, g_settings.menu_Content_Selected_Text_blue), -32), + convertSetupAlpha2Alpha(g_settings.menu_Content_Selected_alpha)); + + // COL_MENUCONTENTINACTIVE_TEXT + frameBuffer->paletteSetColor(COL_NEUTRINO_TEXT + 14, + convertSetupColor2RGB(g_settings.menu_Content_inactive_Text_red, g_settings.menu_Content_inactive_Text_green, g_settings.menu_Content_inactive_Text_blue), + convertSetupAlpha2Alpha(g_settings.menu_Content_inactive_alpha)); + frameBuffer->paletteSet(); } From c60c5c5ce39c2555c233f699adddf61a5e5b2511 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 11 Jul 2013 09:41:27 +0200 Subject: [PATCH 037/142] Replace color indexes of the text colors by real color values for RenderString() - If necessary, Correct data types of the color values --- src/gui/audioplayer.cpp | 34 +++---- src/gui/bedit/bouqueteditor_bouquets.cpp | 6 +- src/gui/bedit/bouqueteditor_channels.cpp | 6 +- src/gui/bedit/bouqueteditor_chanselect.cpp | 10 +- src/gui/bookmarkmanager.cpp | 12 +-- src/gui/bouquetlist.cpp | 6 +- src/gui/channellist.cpp | 40 ++++---- src/gui/components/cc_frm_button.cpp | 4 +- src/gui/components/cc_frm_clock.cpp | 2 +- src/gui/components/cc_frm_header.cpp | 2 +- src/gui/components/cc_item_infobox.h | 2 +- src/gui/components/cc_item_text.cpp | 2 +- src/gui/components/cc_item_text.h | 6 +- .../components/unmaintained/cc_item_box.cpp | 4 +- src/gui/components/unmaintained/cc_misc.h | 6 +- src/gui/dboxinfo.cpp | 10 +- src/gui/epgplus.cpp | 26 +++--- src/gui/epgview.cpp | 24 ++--- src/gui/eventlist.cpp | 18 ++-- src/gui/filebrowser.cpp | 20 ++-- src/gui/infoclock.cpp | 2 +- src/gui/infoviewer.cpp | 92 +++++++++---------- src/gui/infoviewer_bb.cpp | 3 +- src/gui/motorcontrol.cpp | 10 +- src/gui/moviebrowser.cpp | 10 +- src/gui/movieplayer.cpp | 2 +- src/gui/pictureviewer.cpp | 12 +-- src/gui/pipsetup.cpp | 8 +- src/gui/pluginlist.cpp | 4 +- src/gui/scan.cpp | 12 +-- src/gui/screensetup.cpp | 6 +- src/gui/streaminfo2.cpp | 88 +++++++++--------- src/gui/timeosd.cpp | 4 +- src/gui/timerlist.cpp | 8 +- src/gui/upnpbrowser.cpp | 46 +++++----- src/gui/volumebar.cpp | 2 +- src/gui/widget/buttons.cpp | 4 +- src/gui/widget/buttons.h | 2 +- src/gui/widget/colorchooser.cpp | 4 +- src/gui/widget/drawable.cpp | 4 +- src/gui/widget/hintbox.cpp | 8 +- src/gui/widget/hintboxext.cpp | 2 +- src/gui/widget/keychooser.cpp | 6 +- src/gui/widget/listbox.cpp | 16 ++-- src/gui/widget/listframe.cpp | 14 +-- src/gui/widget/menue.cpp | 12 +-- src/gui/widget/messagebox.cpp | 4 +- src/gui/widget/msgbox.cpp | 18 ++-- src/gui/widget/progresswindow.cpp | 6 +- src/gui/widget/stringinput.cpp | 14 +-- src/gui/widget/stringinput_ext.cpp | 12 +-- src/gui/widget/textbox.cpp | 2 +- 52 files changed, 341 insertions(+), 336 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index c30f02c40..c40a822ea 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -830,7 +830,7 @@ int CAudioPlayerGui::show() m_frameBuffer->paintBoxRel(x1 - 7, y1 - h - 5, w + 14, h + 10, COL_MENUCONTENT_PLUS_6, RADIUS_SMALL); m_frameBuffer->paintBoxRel(x1 - 4, y1 - h - 3, w + 8, h + 6, COL_MENUCONTENTSELECTED_PLUS_0, RADIUS_SMALL); g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP] - ->RenderString(x1,y1,w+1,selectedKey,COL_MENUCONTENTSELECTED,0); + ->RenderString(x1,y1,w+1,selectedKey,COL_MENUCONTENTSELECTED_TEXT,0); g_RCInput->getMsg_ms(&msg, &data, AUDIOPLAYERGUI_SMSKEY_TIMEOUT - 200); @@ -1547,19 +1547,19 @@ void CAudioPlayerGui::paintItem(int pos) int ypos = m_y + m_title_height + m_theight + pos*m_fheight; int c_rad_small; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if ((pos + m_liststart) == m_selected) { if ((pos + m_liststart) == (unsigned)m_current) { - color = COL_MENUCONTENTSELECTED + 2; + color = COL_MENUCONTENTSELECTED_TEXT_PLUS_2; bgcolor = COL_MENUCONTENTSELECTED_PLUS_2; } else { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } paintItemID3DetailsLine(pos); @@ -1571,12 +1571,12 @@ void CAudioPlayerGui::paintItem(int pos) { if ((pos + m_liststart) == (unsigned)m_current) { - color = COL_MENUCONTENTDARK + 2; + color = COL_MENUCONTENTDARK_TEXT_PLUS_2; bgcolor = COL_MENUCONTENTDARK_PLUS_2; } else { - color = COL_MENUCONTENTDARK; + color = COL_MENUCONTENTDARK_TEXT; bgcolor = COL_MENUCONTENTDARK_PLUS_0; } } @@ -1584,12 +1584,12 @@ void CAudioPlayerGui::paintItem(int pos) { if ((pos + m_liststart) == (unsigned)m_current) { - color = COL_MENUCONTENT + 2; + color = COL_MENUCONTENT_TEXT_PLUS_2; bgcolor = COL_MENUCONTENT_PLUS_2; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } } @@ -1815,7 +1815,7 @@ void CAudioPlayerGui::paintInfo() if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 1*m_fheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // second line (Artist/Title...) if (m_curr_audiofile.FileType != CFile::STREAM_AUDIO && @@ -1844,7 +1844,7 @@ void CAudioPlayerGui::paintInfo() xstart=(m_width-w)/2; if (xstart < 10) xstart=10; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x+xstart, m_y +4+ 2*m_fheight, m_width- 20, tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x+xstart, m_y +4+ 2*m_fheight, m_width- 20, tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // reset so fields get painted always m_metainfo.clear(); @@ -1928,7 +1928,7 @@ void CAudioPlayerGui::paintItemID3DetailsLine (int pos) ibox->paint(false); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + 10, ypos2 + 2 + 1*m_fheight, m_width- 80, - m_playlist[m_selected].MetaData.title, COL_MENUCONTENTDARK, 0, true); // UTF-8 + m_playlist[m_selected].MetaData.title, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 std::string tmp; if (m_playlist[m_selected].MetaData.genre.empty()) tmp = m_playlist[m_selected].MetaData.date; @@ -1942,7 +1942,7 @@ void CAudioPlayerGui::paintItemID3DetailsLine (int pos) } int w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true) + 10; // UTF-8 g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + m_width - w - 5, ypos2 + 2 + 1*m_fheight, - w, tmp, COL_MENUCONTENTDARK, 0, true); // UTF-8 + w, tmp, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 tmp = m_playlist[m_selected].MetaData.artist; if (!(m_playlist[m_selected].MetaData.album.empty())) { @@ -1951,7 +1951,7 @@ void CAudioPlayerGui::paintItemID3DetailsLine (int pos) tmp += ')'; } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + 10, ypos2 + 2*m_fheight - 2, m_width - 20, - tmp, COL_MENUCONTENTDARK, 0, true); // UTF-8 + tmp, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 } else { @@ -2195,7 +2195,7 @@ void CAudioPlayerGui::updateMetaData(bool screen_saver) int xstart = ((m_width - 20 - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo))/2)+10; g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL] ->RenderString(m_x + xstart, m_y + 4 + 2*m_fheight + m_sheight, - m_width- 2*xstart, m_metainfo, COL_MENUCONTENTSELECTED); + m_width- 2*xstart, m_metainfo, COL_MENUCONTENTSELECTED_TEXT); } } //------------------------------------------------------------------------ @@ -2241,7 +2241,7 @@ void CAudioPlayerGui::updateTimes(const bool force) m_fheight, COL_MENUCONTENTSELECTED_PLUS_0); if (m_time_total > 0) g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + m_width - w1 - 10, m_y + 4 + m_fheight, - w1, tot_time, COL_MENUCONTENTSELECTED); + w1, tot_time, COL_MENUCONTENTSELECTED_TEXT); } if (updatePlayed || (m_state == CAudioPlayerGui::PAUSE)) { @@ -2253,7 +2253,7 @@ void CAudioPlayerGui::updateTimes(const bool force) if ((m_state != CAudioPlayerGui::PAUSE) || (tv.tv_sec & 1)) { g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + m_width - w1 - w2 - 11, m_y + 4 + m_fheight, - w2+4, play_time, COL_MENUCONTENTSELECTED); + w2+4, play_time, COL_MENUCONTENTSELECTED_TEXT); } } } @@ -2378,7 +2378,7 @@ bool CAudioPlayerGui::getNumericInput(neutrino_msg_t& msg, int& val) { int h = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP]->getHeight(); m_frameBuffer->paintBoxRel(x1 - 7, y1 - h - 5, w + 14, h + 10, COL_MENUCONTENT_PLUS_6); m_frameBuffer->paintBoxRel(x1 - 4, y1 - h - 3, w + 8, h + 6, COL_MENUCONTENTSELECTED_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP]->RenderString(x1, y1, w + 1, str, COL_MENUCONTENTSELECTED, 0); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP]->RenderString(x1, y1, w + 1, str, COL_MENUCONTENTSELECTED_TEXT, 0); while (true) { g_RCInput->getMsg(&msg, &data, 100); diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 4c4343d3b..ded93358f 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -74,13 +74,13 @@ CBEBouquetWidget::CBEBouquetWidget() void CBEBouquetWidget::paintItem(int pos) { - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; int ypos = y+ theight+0 + pos*iheight; unsigned int current = liststart + pos; if (current == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, COL_MENUCONTENT_PLUS_0); frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, bgcolor, RADIUS_LARGE); @@ -88,7 +88,7 @@ void CBEBouquetWidget::paintItem(int pos) bool has_channels = true; if(current < Bouquets->size()) has_channels = (!(*Bouquets)[current]->tvChannels.empty() ) || (!(*Bouquets)[current]->radioChannels.empty()); - color = has_channels ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE; + color = has_channels ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT; bgcolor = has_channels ? COL_MENUCONTENT_PLUS_0 : COL_MENUCONTENTINACTIVE_PLUS_0; frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, bgcolor); } diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index cc5000e39..63887b3d7 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -97,13 +97,13 @@ CBEChannelWidget::~CBEChannelWidget() void CBEChannelWidget::paintItem(int pos) { - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; int ypos = y+ theight+0 + pos*iheight; unsigned int current = liststart + pos; if(current == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; if(current < Channels->size()) { @@ -114,7 +114,7 @@ void CBEChannelWidget::paintItem(int pos) frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, COL_MENUCONTENT_PLUS_0); frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, bgcolor, RADIUS_LARGE); } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, bgcolor); } diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 1810a9e45..56bf80e6d 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -105,11 +105,11 @@ void CBEChannelSelectWidget::paintItem(uint32_t itemNr, int paintNr, bool pselec { int ypos = y+ theight + paintNr*iheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pselected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; if(itemNr < getItemCount()) { @@ -122,7 +122,7 @@ void CBEChannelSelectWidget::paintItem(uint32_t itemNr, int paintNr, bool pselec } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; frameBuffer->paintBoxRel(x,ypos, width- 15, iheight, bgcolor); } @@ -199,10 +199,10 @@ void CBEChannelSelectWidget::paintFoot() #if 0 frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, x+width- 3* ButtonWidth+ 8, y+height+1); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 3* ButtonWidth+ 38, y+height+24 - 2, width, g_Locale->getText(LOCALE_BOUQUETEDITOR_SWITCH), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 3* ButtonWidth+ 38, y+height+24 - 2, width, g_Locale->getText(LOCALE_BOUQUETEDITOR_SWITCH), COL_INFOBAR_TEXT, 0, true); // UTF-8 frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_HOME, x+width - ButtonWidth+ 8, y+height+1); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width - ButtonWidth+ 38, y+height+24 - 2, width, g_Locale->getText(LOCALE_BOUQUETEDITOR_RETURN), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width - ButtonWidth+ 38, y+height+24 - 2, width, g_Locale->getText(LOCALE_BOUQUETEDITOR_RETURN), COL_INFOBAR_TEXT, 0, true); // UTF-8 #endif } diff --git a/src/gui/bookmarkmanager.cpp b/src/gui/bookmarkmanager.cpp index 7bc6ec861..996d529b4 100644 --- a/src/gui/bookmarkmanager.cpp +++ b/src/gui/bookmarkmanager.cpp @@ -369,23 +369,23 @@ void CBookmarkManager::paintItem(int pos) { int ypos = y+ theight+0 + pos*fheight*2; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pos & 1) { - color = COL_MENUCONTENTDARK; + color = COL_MENUCONTENTDARK_TEXT; bgcolor = COL_MENUCONTENTDARK_PLUS_0; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } if (liststart + pos == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } @@ -444,14 +444,14 @@ void CBookmarkManager::paintFoot() if (bookmarks.empty()) { frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, x+width- 1* ButtonWidth + 10, y+height); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width-1 * ButtonWidth + 38, y+height+footerHeight - 2, ButtonWidth- 28, g_Locale->getText(LOCALE_BOOKMARKMANAGER_SELECT), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width-1 * ButtonWidth + 38, y+height+footerHeight - 2, ButtonWidth- 28, g_Locale->getText(LOCALE_BOOKMARKMANAGER_SELECT), COL_INFOBAR_TEXT, 0, true); // UTF-8 } else { ::paintButtons(x + 10, y + height + 4, width, 2, BookmarkmanagerButtons, footerHeight, ButtonWidth); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, x+width- 1* ButtonWidth + 10, y+height); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width-1 * ButtonWidth + 38, y+height+footerHeight - 2, ButtonWidth- 28, g_Locale->getText(LOCALE_BOOKMARKMANAGER_SELECT), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width-1 * ButtonWidth + 38, y+height+footerHeight - 2, ButtonWidth- 28, g_Locale->getText(LOCALE_BOOKMARKMANAGER_SELECT), COL_INFOBAR_TEXT, 0, true); // UTF-8 } } diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp index 8c46a2982..cf193828c 100644 --- a/src/gui/bouquetlist.cpp +++ b/src/gui/bouquetlist.cpp @@ -538,7 +538,7 @@ void CBouquetList::hide() void CBouquetList::paintItem(int pos) { int ypos = y+ theight+0 + pos*fheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; bool iscurrent = true; int npos = liststart + pos; @@ -548,7 +548,7 @@ void CBouquetList::paintItem(int pos) lname = (Bouquets[npos]->zapitBouquet && Bouquets[npos]->zapitBouquet->bFav) ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : Bouquets[npos]->channelList->getName(); if (npos == (int) selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; frameBuffer->paintBoxRel(x, ypos, width- 15, fheight, bgcolor, RADIUS_LARGE); if(npos < (int) Bouquets.size()) @@ -556,7 +556,7 @@ void CBouquetList::paintItem(int pos) } else { if(npos < (int) Bouquets.size()) iscurrent = !Bouquets[npos]->channelList->isEmpty(); - color = iscurrent ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE; + color = iscurrent ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT; bgcolor = iscurrent ? COL_MENUCONTENT_PLUS_0 : COL_MENUCONTENTINACTIVE_PLUS_0; frameBuffer->paintBoxRel(x, ypos, width- 15, fheight, bgcolor); } diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index e973a49bb..17b2f5d17 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -1366,7 +1366,7 @@ int CChannelList::numericZap(int key) for (int i = maxchansize-1; i >= 0; i--) { valstr[i+ 1] = 0; - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP]->RenderString(ox+fw/3+ i*fw, oy+sy-3, sx, &valstr[i], COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP]->RenderString(ox+fw/3+ i*fw, oy+sy-3, sx, &valstr[i], COL_INFOBAR_TEXT); } showInfo(chn); @@ -1635,7 +1635,7 @@ void CChannelList::paintDetails(int index) text3= text3+ " - "; xstart += g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text3, true); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2* fheight, full_width - 30- noch_len, text3, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2* fheight, full_width - 30- noch_len, text3, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); } if (!(text2.empty())) { @@ -1652,12 +1652,12 @@ void CChannelList::paintDetails(int index) } } #endif - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ xstart, y+ height+ 5+ fdescrheight+ fheight, full_width- xstart- 30- noch_len, text2, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ xstart, y+ height+ 5+ fdescrheight+ fheight, full_width- xstart- 30- noch_len, text2, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); } - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, full_width - 30 - seit_len, text1, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- seit_len, y+ height+ 5+ fheight, seit_len, cSeit, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- noch_len, y+ height+ 5+ fdescrheight+ fheight, noch_len, cNoch, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, full_width - 30 - seit_len, text1, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- seit_len, y+ height+ 5+ fheight, seit_len, cSeit, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- noch_len, y+ height+ 5+ fdescrheight+ fheight, noch_len, cNoch, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 } if(g_settings.channellist_foot == 0) { transponder t; @@ -1669,7 +1669,7 @@ void CChannelList::paintDetails(int index) else desc = desc + " (" + CServiceManager::getInstance()->GetSatelliteName(chanlist[index]->getSatellitePosition()) + ")"; - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight +fdescrheight, full_width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight +fdescrheight, full_width - 30, desc.c_str(), COL_MENUCONTENTDARK_TEXT, 0, true); } else if( !displayNext && g_settings.channellist_foot == 1) { // next Event char buf[128] = {0}; @@ -1682,8 +1682,8 @@ void CChannelList::paintDetails(int index) snprintf(buf, sizeof(buf), "%s", CurrentNext.next_name.c_str()); int from_len = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getRenderWidth(cFrom, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+ fdescrheight, full_width - 30 - from_len, buf, colored_event_N ? COL_COLORED_EVENTS_CHANNELLIST :COL_MENUCONTENTDARK, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- from_len, y+ height+ 5+ 2*fheight+ fdescrheight, from_len, cFrom, colored_event_N ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2*fheight+ fdescrheight, full_width - 30 - from_len, buf, colored_event_N ? COL_COLORED_EVENTS_TEXT :COL_MENUCONTENTDARK_TEXT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ full_width- 10- from_len, y+ height+ 5+ 2*fheight+ fdescrheight, from_len, cFrom, colored_event_N ? COL_COLORED_EVENTS_TEXT : COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 } } if ((g_settings.channellist_additional) && (p_event != NULL)) @@ -1848,7 +1848,7 @@ void CChannelList::paintButtonBar(bool is_current) void CChannelList::paintItem(int pos, const bool firstpaint) { int ypos = y+ theight + pos*fheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; bool iscurrent = true; bool paintbuttons = false; @@ -1865,14 +1865,14 @@ void CChannelList::paintItem(int pos, const bool firstpaint) iscurrent = SameTP(chanlist[curr]); if (curr == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; paintItem2DetailsLine (pos); paintDetails(curr); c_rad_small = RADIUS_LARGE; paintbuttons = true; } else { - color = iscurrent ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE; + color = iscurrent ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT; bgcolor = iscurrent ? COL_MENUCONTENT_PLUS_0 : COL_MENUCONTENTINACTIVE_PLUS_0; } @@ -1886,7 +1886,7 @@ void CChannelList::paintItem(int pos, const bool firstpaint) CZapitChannel* chan = chanlist[curr]; int prg_offset=0; int title_offset=0; - uint8_t tcolor=(liststart + pos == selected) ? color : COL_MENUCONTENTINACTIVE; + uint8_t tcolor=(liststart + pos == selected) ? color : COL_MENUCONTENTINACTIVE_TEXT; int xtheight=fheight-2; if(g_settings.channellist_extended) @@ -2008,7 +2008,7 @@ void CChannelList::paintItem(int pos, const bool firstpaint) struct tm *pStartZeit = localtime(&p_event->startTime); snprintf((char*) tmp, sizeof(tmp), "%02d:%02d", pStartZeit->tm_hour, pStartZeit->tm_min); -// g_Font[SNeutrinoSettings::FONT_TYPE_IMAGEINFO_SMALL]->RenderString(x+ 5+ numwidth+ 6, ypos+ xtheight, width- numwidth- 20- 15 -poffs, tmp, COL_MENUCONTENT, 0, true); +// g_Font[SNeutrinoSettings::FONT_TYPE_IMAGEINFO_SMALL]->RenderString(x+ 5+ numwidth+ 6, ypos+ xtheight, width- numwidth- 20- 15 -poffs, tmp, COL_MENUCONTENT_TEXT, 0, true); g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER]->RenderString(x+ 5+ numwidth+ 6, ypos+ xtheight, width- numwidth- 20- 15 -prg_offset, tmp, tcolor, 0, true); } else @@ -2039,11 +2039,11 @@ void CChannelList::paintItem(int pos, const bool firstpaint) g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 5+ numwidth+ 10+prg_offset, ypos+ fheight, width- numwidth- 40- 15-prg_offset, nameAndDescription, color, 0, true); if (g_settings.channellist_epgtext_align_right) { // align right - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x + width - 20 - ch_desc_len - icon_space - 4, ypos + fheight, ch_desc_len, p_event->description, (curr == selected)?COL_MENUCONTENTSELECTED:(!displayNext ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE) , 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x + width - 20 - ch_desc_len - icon_space - 4, ypos + fheight, ch_desc_len, p_event->description, (curr == selected)?COL_MENUCONTENTSELECTED_TEXT:(!displayNext ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT) , 0, true); } else { // align left - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ 5+ numwidth+ 10+ ch_name_len+ 5+prg_offset, ypos+ fheight, ch_desc_len, p_event->description, (curr == selected)?COL_MENUCONTENTSELECTED:(!displayNext ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE) , 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ 5+ numwidth+ 10+ ch_name_len+ 5+prg_offset, ypos+ fheight, ch_desc_len, p_event->description, (curr == selected)?COL_MENUCONTENTSELECTED_TEXT:(!displayNext ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT) , 0, true); } } else { @@ -2086,7 +2086,7 @@ void CChannelList::paintHead() headerClock->setCornerType(CORNER_TOP_RIGHT); headerClock->setYPos(y); headerClock->setHeight(theight); - headerClock->setTextColor(COL_MENUHEAD); + headerClock->setTextColor(COL_MENUHEAD_TEXT); headerClock->setColorBody(COL_MENUHEAD_PLUS_0); headerClock->refresh(); headerClockWidth = headerClock->getWidth(); @@ -2269,12 +2269,12 @@ void CChannelList::paint_events(int index) if ((y+ theight+ pig_height + i*ffheight) < (y+ theight+ pig_height + infozone_height)) { bool first = false; - fb_pixel_t color = COL_MENUCONTENTDARK; + fb_pixel_t color = COL_MENUCONTENTDARK_TEXT; if (e->eventID) { first = (i == 1); if ((first && g_settings.colored_events_channellist == 1 /* current */) || (!first && g_settings.colored_events_channellist == 2 /* next */)) - color = COL_COLORED_EVENTS_CHANNELLIST; + color = COL_COLORED_EVENTS_TEXT; struct tm *tmStartZeit = localtime(&e->startTime); strftime(startTime, sizeof(startTime), "%H:%M", tmStartZeit ); //printf("%s %s\n", startTime, e->description.c_str()); @@ -2333,7 +2333,7 @@ void CChannelList::showdescription(int index) frameBuffer->paintBoxRel(x+ width,y+ theight+pig_height, infozone_width, infozone_height,COL_MENUCONTENT_PLUS_0); for (int i = 1; (i < (int)epgText.size()+1) && ((y+ theight+ pig_height + i*ffheight) < (y+ theight+ pig_height + infozone_height)); i++) - g_Font[eventFont]->RenderString(x+ width+5, y+ theight+ pig_height + i*ffheight, infozone_width - 20, epgText[i-1].first, COL_MENUCONTENTDARK , 0, true); + g_Font[eventFont]->RenderString(x+ width+5, y+ theight+ pig_height + i*ffheight, infozone_width - 20, epgText[i-1].first, COL_MENUCONTENTDARK_TEXT, 0, true); } void CChannelList::addTextToArray(const std::string & text, int screening) // UTF-8 diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp index b302caee5..d78471f63 100644 --- a/src/gui/components/cc_frm_button.cpp +++ b/src/gui/components/cc_frm_button.cpp @@ -45,7 +45,7 @@ CComponentsButton::CComponentsButton( const int x_pos, const int y_pos, const i initVarButton(); cc_btn_icon = icon_name; cc_btn_capt = caption; - cc_btn_capt_col = COL_MENUCONTENT; + cc_btn_capt_col = COL_MENUCONTENT_TEXT; cc_btn_text_w = cc_btn_font->getRenderWidth(cc_btn_capt, true); cc_btn_text_h = cc_btn_font->getHeight(); @@ -132,7 +132,7 @@ void CComponentsButton::initCaption() //set properties to label object if (cc_btn_capt_obj){ cc_btn_capt_obj->setDimensionsAll(cap_x, cap_y, width-cap_x, height); - cc_btn_capt_obj->setTextColor(this->cc_item_enabled ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE); + cc_btn_capt_obj->setTextColor(this->cc_item_enabled ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTINACTIVE_TEXT); cc_btn_capt_obj->setText(cc_btn_capt, CTextBox::NO_AUTO_LINEBREAK, cc_btn_font); cc_btn_capt_obj->forceTextPaint(); //here required; cc_btn_capt_obj->doPaintBg(false); diff --git a/src/gui/components/cc_frm_clock.cpp b/src/gui/components/cc_frm_clock.cpp index 8356d60fc..eda580c72 100644 --- a/src/gui/components/cc_frm_clock.cpp +++ b/src/gui/components/cc_frm_clock.cpp @@ -70,7 +70,7 @@ void CComponentsFrmClock::initVarClock() corner_rad = RADIUS_SMALL; cl_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]; - cl_col_text = COL_MENUCONTENT; + cl_col_text = COL_MENUCONTENT_TEXT; cl_format_str = "%H:%M"; cl_align = CC_ALIGN_VER_CENTER | CC_ALIGN_HOR_CENTER; diff --git a/src/gui/components/cc_frm_header.cpp b/src/gui/components/cc_frm_header.cpp index 4e9067f3a..da53e5de2 100644 --- a/src/gui/components/cc_frm_header.cpp +++ b/src/gui/components/cc_frm_header.cpp @@ -107,7 +107,7 @@ void CComponentsHeader::initVarHeader() cch_icon_name = NULL; cch_btn_obj = NULL; cch_text = ""; - cch_col_text = COL_MENUHEAD; + cch_col_text = COL_MENUHEAD_TEXT; cch_items_y = 0; cch_offset = 8; cch_icon_x = cch_offset; diff --git a/src/gui/components/cc_item_infobox.h b/src/gui/components/cc_item_infobox.h index 3e23de78f..afcfffd5b 100644 --- a/src/gui/components/cc_item_infobox.h +++ b/src/gui/components/cc_item_infobox.h @@ -67,7 +67,7 @@ class CComponentsInfoBox : public CComponentsText CComponentsInfoBox( const int x_pos, const int y_pos, const int w, const int h, std::string info_text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_text = COL_MENUCONTENT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + fb_pixel_t color_text = COL_MENUCONTENT_TEXT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); ~CComponentsInfoBox(); diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index afb3e6a88..33d828b99 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -102,7 +102,7 @@ void CComponentsText::initVarText() ct_text_Hborder = 1; ct_text_Vborder = 0; - ct_col_text = COL_MENUCONTENT; + ct_col_text = COL_MENUCONTENT_TEXT; ct_text_sent = false; ct_paint_textbg = false; ct_force_text_paint = false; diff --git a/src/gui/components/cc_item_text.h b/src/gui/components/cc_item_text.h index 37915331e..0e1815c9e 100644 --- a/src/gui/components/cc_item_text.h +++ b/src/gui/components/cc_item_text.h @@ -87,7 +87,7 @@ class CComponentsText : public CComponentsItem CComponentsText( const int x_pos, const int y_pos, const int w, const int h, std::string text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_text = COL_MENUCONTENT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + fb_pixel_t color_text = COL_MENUCONTENT_TEXT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); virtual ~CComponentsText(); ///default members to paint a text box and hide painted text @@ -146,7 +146,7 @@ class CComponentsLabel : public CComponentsText CComponentsLabel( const int x_pos, const int y_pos, const int w, const int h, std::string text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_text = COL_MENUCONTENTINACTIVE, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) + fb_pixel_t color_text = COL_MENUCONTENTINACTIVE_TEXT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) :CComponentsText(x_pos, y_pos, w, h, text, mode, font_text, has_shadow, color_text, color_frame, color_body, color_shadow) { cc_item_type = CC_ITEMTYPE_LABEL; @@ -155,7 +155,7 @@ class CComponentsLabel : public CComponentsText { initVarText(); cc_item_type = CC_ITEMTYPE_LABEL; - ct_col_text = COL_MENUCONTENTINACTIVE; + ct_col_text = COL_MENUCONTENTINACTIVE_TEXT; }; }; diff --git a/src/gui/components/unmaintained/cc_item_box.cpp b/src/gui/components/unmaintained/cc_item_box.cpp index e84067a83..29140ebc2 100644 --- a/src/gui/components/unmaintained/cc_item_box.cpp +++ b/src/gui/components/unmaintained/cc_item_box.cpp @@ -55,7 +55,7 @@ void CComponentsItemBox::initVarItemBox() initVarItem(); //CComponentsItemBox - it_col_text = COL_MENUCONTENT; + it_col_text = COL_MENUCONTENT_TEXT; hSpacer = 2; hOffset = 4; vOffset = 1; @@ -498,7 +498,7 @@ void CComponentsTitleBar::initVarTitleBar() onlyOneTextElement = true; font_text = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]; - it_col_text = COL_MENUHEAD; + it_col_text = COL_MENUHEAD_TEXT; //CComponents x = 0; diff --git a/src/gui/components/unmaintained/cc_misc.h b/src/gui/components/unmaintained/cc_misc.h index 728019abc..cda11f389 100644 --- a/src/gui/components/unmaintained/cc_misc.h +++ b/src/gui/components/unmaintained/cc_misc.h @@ -100,11 +100,11 @@ class CComponentsTitleBar : public CComponentsItemBox public: CComponentsTitleBar(); CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const char* c_text = NULL, const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + fb_pixel_t color_text = COL_MENUHEAD_TEXT, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const std::string& s_text ="", const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + fb_pixel_t color_text = COL_MENUHEAD_TEXT, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, neutrino_locale_t locale_text = NONEXISTANT_LOCALE, const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + fb_pixel_t color_text = COL_MENUHEAD_TEXT, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); diff --git a/src/gui/dboxinfo.cpp b/src/gui/dboxinfo.cpp index 7da5b5cba..45c2486e1 100644 --- a/src/gui/dboxinfo.cpp +++ b/src/gui/dboxinfo.cpp @@ -259,7 +259,7 @@ void CDBoxInfoWidget::paint() if (p) hw=++p; hw+=" Info"; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, y + hheight+1, width - 10, hw.c_str(), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, y + hheight+1, width - 10, hw.c_str(), COL_MENUHEAD_TEXT, 0, true); // UTF-8 break; } i++; @@ -267,7 +267,7 @@ void CDBoxInfoWidget::paint() continue; if (read > 0 && buffer[read-1] == '\n') buffer[read-1] = '\0'; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, buffer, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, buffer, COL_MENUCONTENT_TEXT); ypos+= mheight; } fclose(fd); @@ -313,7 +313,7 @@ void CDBoxInfoWidget::paint() LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2])); strcat(sbuf, ubuf); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, sbuf, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, sbuf, COL_MENUCONTENT_TEXT); ypos+= mheight/2; ypos+= mheight; int headOffset=0; @@ -340,7 +340,7 @@ void CDBoxInfoWidget::paint() headOffset = nameOffset + (sizeOffset+10)*3+15; break; } - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ headOffset, ypos+ mheight, width - 10, head[j], COL_MENUCONTENTINACTIVE); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ headOffset, ypos+ mheight, width - 10, head[j], COL_MENUCONTENTINACTIVE_TEXT); } ypos+= mheight; @@ -434,7 +434,7 @@ void CDBoxInfoWidget::paint() snprintf(ubuf, buf_size, "%4d%%", percent_used); break; } - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + mpOffset, ypos+ mheight, width - 10, ubuf, rec_mp ? COL_MENUCONTENTINACTIVE:COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + mpOffset, ypos+ mheight, width - 10, ubuf, rec_mp ? COL_MENUCONTENTINACTIVE_TEXT:COL_MENUCONTENT_TEXT); rec_mp = false; } int pbw = width - offsetw - 10; diff --git a/src/gui/epgplus.cpp b/src/gui/epgplus.cpp index 0d4ee75cc..3ee640c51 100644 --- a/src/gui/epgplus.cpp +++ b/src/gui/epgplus.cpp @@ -50,8 +50,8 @@ #include #include -#define COL_MENUCONTENT_P1 254-8*4+1 -#define COL_MENUCONTENT_P2 254-8*4+2 +#define COL_MENUCONTENT_P1 COL_MENUCONTENT_TEXT_PLUS_1 +#define COL_MENUCONTENT_P2 COL_MENUCONTENT_TEXT_PLUS_2 extern CBouquetList *bouquetList; Font * fonts[EpgPlus::NumberOfFontSettings]; @@ -126,8 +126,8 @@ void EpgPlus::Header::paint(const char * Name) } this->frameBuffer->paintBoxRel (this->x, this->y, this->width, this->font->getHeight()+4, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); this->font->RenderString (this->x + 10, this->y + this->font->getHeight() + 2, - this->width - 20, head, COL_MENUHEAD, 0, true); - //this->width - 20, g_Locale->getText (LOCALE_EPGPLUS_HEAD) , COL_MENUHEAD, 0, true); + this->width - 20, head, COL_MENUHEAD_TEXT, 0, true); + //this->width - 20, g_Locale->getText (LOCALE_EPGPLUS_HEAD) , COL_MENUHEAD_TEXT, 0, true); int icol_w, icol_h; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_HELP, &icol_w, &icol_h); this->frameBuffer->paintIcon (NEUTRINO_ICON_BUTTON_HELP, this->x + this->width - icol_w - RADIUS_LARGE - 10, this->y+ ((this->font->getHeight()-icol_h)/2), icol_h); @@ -179,7 +179,7 @@ void EpgPlus::TimeLine::paint (time_t startTime, int pduration) , toggleColor ? COL_MENUCONTENT_PLUS_2 : COL_MENUCONTENT_PLUS_1); this->fontDate->RenderString (this->x + 4, this->y + this->fontDate->getHeight() - , this->width, EpgPlus::getTimeString (startTime, "%d-%b") , COL_MENUCONTENT, 0, true); // UTF-8 + , this->width, EpgPlus::getTimeString (startTime, "%d-%b") , COL_MENUCONTENT_TEXT, 0, true); // UTF-8 // paint ticks for (int i = 0; i < numberOfTicks; ++i, xPos += tickDist, tickTime += pduration / numberOfTicks) { @@ -232,7 +232,7 @@ void EpgPlus::TimeLine::paintMark (time_t startTime, int pduration, int px, int int textWidth = this->fontTime->getRenderWidth (timeStr, true); this->fontTime->RenderString (px - textWidth, this->y + this->fontTime->getHeight() + this->fontTime->getHeight() - , textWidth, timeStr, COL_MENUCONTENT, 0, true); // UTF-8 + , textWidth, timeStr, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 // display end time after mark timeStr = EpgPlus::getTimeString (startTime + pduration, "%H:%M"); @@ -240,10 +240,10 @@ void EpgPlus::TimeLine::paintMark (time_t startTime, int pduration, int px, int if (px + pwidth + textWidth < this->x + this->width) { this->fontTime->RenderString (px + pwidth, this->y + this->fontTime->getHeight() + this->fontTime->getHeight() - , textWidth, timeStr, COL_MENUCONTENT, 0, true); // UTF-8 + , textWidth, timeStr, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } else if (textWidth < pwidth - 10) { this->fontTime->RenderString (px + pwidth - textWidth, this->y + this->fontTime->getHeight() + this->fontTime->getHeight() - , textWidth, timeStr, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + , textWidth, timeStr, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 } } @@ -297,7 +297,7 @@ void EpgPlus::ChannelEventEntry::paint (bool pisSelected, bool toggleColor) , this->channelEvent.description.empty()? COL_MENUCONTENT_PLUS_0 : (pisSelected ? COL_MENUCONTENTSELECTED_PLUS_0 : (toggleColor ? COL_MENUCONTENT_PLUS_1 : COL_MENUCONTENT_PLUS_2))); this->font->RenderString (this->x + 2, this->y + this->font->getHeight() - , this->width - 4 > 0 ? this->width - 4 : 0, this->channelEvent.description, pisSelected ? COL_MENUCONTENTSELECTED : (toggleColor ? COL_MENUCONTENT_P1 : COL_MENUCONTENT_P2) + , this->width - 4 > 0 ? this->width - 4 : 0, this->channelEvent.description, pisSelected ? COL_MENUCONTENTSELECTED_TEXT : (toggleColor ? COL_MENUCONTENT_P1 : COL_MENUCONTENT_P2) , 0, true); // paint the separation line @@ -374,7 +374,7 @@ void EpgPlus::ChannelEntry::paint (bool isSelected, time_t selectedTime) isSelected ? COL_MENUCONTENTSELECTED_PLUS_0 : COL_MENUCONTENT_PLUS_0); this->font->RenderString (this->x + 2, this->y + this->font->getHeight(), - this->width - 4, this->displayName, isSelected ? COL_MENUCONTENTSELECTED : COL_MENUCONTENT, 0, true); + this->width - 4, this->displayName, isSelected ? COL_MENUCONTENTSELECTED_TEXT : COL_MENUCONTENT_TEXT, 0, true); if (isSelected) { #if 0 @@ -475,7 +475,7 @@ void EpgPlus::Footer::paintEventDetails (const std::string & description, const yPos += height; // display new text - this->fontBouquetChannelName->RenderString (this->x + 10, yPos, this->width - 20, this->currentBouquetName + " : " + this->currentChannelName, COL_MENUHEAD, 0, true); + this->fontBouquetChannelName->RenderString (this->x + 10, yPos, this->width - 20, this->currentBouquetName + " : " + this->currentChannelName, COL_MENUHEAD_TEXT, 0, true); height = this->fontEventDescription->getHeight(); @@ -485,7 +485,7 @@ void EpgPlus::Footer::paintEventDetails (const std::string & description, const yPos += height; // display new text - this->fontEventDescription->RenderString (this->x + 10, yPos, this->width - 20, description, COL_MENUHEAD, 0, true); + this->fontEventDescription->RenderString (this->x + 10, yPos, this->width - 20, description, COL_MENUHEAD_TEXT, 0, true); height = this->fontEventShortDescription->getHeight(); @@ -495,7 +495,7 @@ void EpgPlus::Footer::paintEventDetails (const std::string & description, const yPos += height; // display new text - this->fontEventShortDescription->RenderString (this->x + 10, yPos, this->width - 20, shortDescription, COL_MENUHEAD, 0, true); + this->fontEventShortDescription->RenderString (this->x + 10, yPos, this->width - 20, shortDescription, COL_MENUHEAD_TEXT, 0, true); } struct button_label buttonLabels[] = { diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index de5bf35a4..1601220e2 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -248,7 +248,7 @@ void CEpgData::showText( int startPos, int ypos ) offset += digi; break; } - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->RenderString(sx+10+offset, y+medlineheight, ox- 15- 15, epgText[i].first.substr(pos1, pos2 - pos1), (epgText[i].second==2)? COL_MENUCONTENTINACTIVE: COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->RenderString(sx+10+offset, y+medlineheight, ox- 15- 15, epgText[i].first.substr(pos1, pos2 - pos1), (epgText[i].second==2)? COL_MENUCONTENTINACTIVE_TEXT: COL_MENUCONTENT_TEXT, 0, true); // UTF-8 count++; pos1 = epgText[i].first.find_first_not_of(tok, pos2); pos2 = epgText[i].first.find_first_of(tok, pos1); @@ -257,7 +257,7 @@ void CEpgData::showText( int startPos, int ypos ) count = 0; } else{ - g_Font[( i< info1_lines ) ?SNeutrinoSettings::FONT_TYPE_EPG_INFO1:SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->RenderString(sx+10, y+medlineheight, ox- 15- 15, epgText[i].first, COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[( i< info1_lines ) ?SNeutrinoSettings::FONT_TYPE_EPG_INFO1:SNeutrinoSettings::FONT_TYPE_EPG_INFO2]->RenderString(sx+10, y+medlineheight, ox- 15- 15, epgText[i].first, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } } @@ -623,9 +623,9 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start g_PicViewer->DisplayImage(lname, sx+10, sy + (toph-logo_h)/2, logo_w, logo_h); //show the title - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->RenderString(sx+15 + pic_offx, sy + topheight+ 3, ox-15- pic_offx, text1, COL_MENUHEAD, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->RenderString(sx+15 + pic_offx, sy + topheight+ 3, ox-15- pic_offx, text1, COL_MENUHEAD_TEXT, 0, true); if (!(text2.empty())) - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->RenderString(sx+15+ pic_offx, sy+ 2* topheight+ 3, ox-15 - pic_offx, text2, COL_MENUHEAD, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->RenderString(sx+15+ pic_offx, sy+ 2* topheight+ 3, ox-15 - pic_offx, text2, COL_MENUHEAD_TEXT, 0, true); //show date-time.... frameBuffer->paintBoxRel(sx, sy+oy-botboxheight, ox, botboxheight, COL_MENUHEAD_PLUS_0); @@ -636,9 +636,9 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start fromto += epg_end; widthl = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->getRenderWidth(fromto); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+40, sy+oy-3, widthl, fromto, COL_MENUHEAD); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+40, sy+oy-3, widthl, fromto, COL_MENUHEAD_TEXT); widthr = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->getRenderWidth(epg_date); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ox-40-widthr, sy+oy-3, widthr, epg_date, COL_MENUHEAD, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ox-40-widthr, sy+oy-3, widthr, epg_date, COL_MENUHEAD_TEXT, 0, true); int showPos = 0; textCount = epgText.size(); @@ -681,13 +681,13 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start if ((prev_id != 0) && !call_fromfollowlist) { frameBuffer->paintBoxRel(sx+ 5, sy+ oy- botboxheight+ 4, botboxheight- 8, botboxheight- 8, COL_MENUCONTENT_PLUS_3); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ 10, sy+ oy- 3, widthr, "<", COL_MENUCONTENT + 3); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ 10, sy+ oy- 3, widthr, "<", COL_MENUCONTENT_TEXT_PLUS_3); } if ((next_id != 0) && !call_fromfollowlist) { frameBuffer->paintBoxRel(sx+ ox- botboxheight+ 8- 5, sy+ oy- botboxheight+ 4, botboxheight- 8, botboxheight- 8, COL_MENUCONTENT_PLUS_3); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ ox- botboxheight+ 8, sy+ oy- 3, widthr, ">", COL_MENUCONTENT + 3); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ ox- botboxheight+ 8, sy+ oy- 3, widthr, ">", COL_MENUCONTENT_TEXT_PLUS_3); } if ( doLoop ) @@ -741,7 +741,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start if ((prev_id != 0) && !call_fromfollowlist) { frameBuffer->paintBoxRel(sx+ 5, sy+ oy- botboxheight+ 4, botboxheight- 8, botboxheight- 8, COL_MENUCONTENT_PLUS_1); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ 10, sy+ oy- 3, widthr, "<", COL_MENUCONTENT + 1); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ 10, sy+ oy- 3, widthr, "<", COL_MENUCONTENT_TEXT_PLUS_1); show(channel_id, prev_id, &prev_zeit, false); showPos=0; @@ -752,7 +752,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start if ((next_id != 0) && !call_fromfollowlist) { frameBuffer->paintBoxRel(sx+ ox- botboxheight+ 8- 5, sy+ oy- botboxheight+ 4, botboxheight- 8, botboxheight- 8, COL_MENUCONTENT_PLUS_1); - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ ox- botboxheight+ 8, sy+ oy- 3, widthr, ">", COL_MENUCONTENT + 1); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->RenderString(sx+ ox- botboxheight+ 8, sy+ oy- 3, widthr, ">", COL_MENUCONTENT_TEXT_PLUS_1); show(channel_id, next_id, &next_zeit, false); showPos=0; @@ -1168,12 +1168,12 @@ void CEpgData::showTimerEventBar (bool pshow) { pos = 0; frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_RED, x+8+cellwidth*pos, y+h_offset ); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+29+cellwidth*pos, y+h-h_offset, w-30, g_Locale->getText(LOCALE_TIMERBAR_RECORDEVENT), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+29+cellwidth*pos, y+h-h_offset, w-30, g_Locale->getText(LOCALE_TIMERBAR_RECORDEVENT), COL_INFOBAR_TEXT, 0, true); // UTF-8 } // Button: Timer Channelswitch pos = 2; frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_YELLOW, x+8+cellwidth*pos, y+h_offset ); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+29+cellwidth*pos, y+h-h_offset, w-30, g_Locale->getText(LOCALE_TIMERBAR_CHANNELSWITCH), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+29+cellwidth*pos, y+h-h_offset, w-30, g_Locale->getText(LOCALE_TIMERBAR_CHANNELSWITCH), COL_INFOBAR_TEXT, 0, true); // UTF-8 #endif } diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp index 78a167d91..b581de234 100644 --- a/src/gui/eventlist.cpp +++ b/src/gui/eventlist.cpp @@ -250,7 +250,7 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c // Calculate iheight (we assume the red button is the largest one?) struct button_label tmp_button[1] = { { NEUTRINO_ICON_BUTTON_RED, LOCALE_EVENTLISTBAR_RECORDEVENT } }; - iheight = ::paintButtons(0, 0, 0, 1, tmp_button, 0, 0, "", false, COL_INFOBAR_SHADOW, NULL, 0, false); + iheight = ::paintButtons(0, 0, 0, 1, tmp_button, 0, 0, "", false, COL_INFOBAR_SHADOW_TEXT, NULL, 0, false); // Calculate theight theight = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getHeight(); @@ -702,7 +702,7 @@ CTimerd::CTimerEventTypes CNeutrinoEventList::isScheduled(t_channel_id channel_i void CNeutrinoEventList::paintItem(unsigned int pos, t_channel_id channel_idI) { - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; int ypos = y+ theight+0 + pos*fheight; unsigned int curpos = liststart + pos; @@ -712,17 +712,17 @@ void CNeutrinoEventList::paintItem(unsigned int pos, t_channel_id channel_idI) if (curpos==selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else if (curpos == current_event ) { - color = COL_MENUCONTENT + 1; + color = COL_MENUCONTENT_TEXT_PLUS_1; bgcolor = COL_MENUCONTENT_PLUS_1; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } @@ -865,9 +865,9 @@ void CNeutrinoEventList::paintHead(std::string _channelname, std::string _channe middle_offset = 0; } - g_Font[font_h]->RenderString(x+10,y+theight-pn_y_off+1, prev_len, _channelname_prev.c_str(), COL_INFOBAR, 0, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+prev_len+middle_offset,y+theight+1, middle_len, _channelname.c_str(), COL_MENUHEAD, 0, true); // UTF-8 - g_Font[font_h]->RenderString(x+full_width-next_len-10,y+theight-pn_y_off+1, next_len, _channelname_next.c_str(), COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_h]->RenderString(x+10,y+theight-pn_y_off+1, prev_len, _channelname_prev.c_str(), COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+prev_len+middle_offset,y+theight+1, middle_len, _channelname.c_str(), COL_MENUHEAD_TEXT, 0, true); // UTF-8 + g_Font[font_h]->RenderString(x+full_width-next_len-10,y+theight-pn_y_off+1, next_len, _channelname_next.c_str(), COL_INFOBAR_TEXT, 0, true); // UTF-8 } @@ -886,7 +886,7 @@ void CNeutrinoEventList::paintHead(t_channel_id _channel_id, std::string _channe logo_ok = g_PicViewer->DisplayImage(lname, x+10, y+(theight-logo_h)/2, logo_w, logo_h); } else - g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+15+(logo_ok? 5+logo_w:0),y+theight+1, full_width, _channelname.c_str(), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+15+(logo_ok? 5+logo_w:0),y+theight+1, full_width, _channelname.c_str(), COL_MENUHEAD_TEXT, 0, true); // UTF-8 } void CNeutrinoEventList::paint(t_channel_id channel_id) diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 2d3ae691d..0dafb8ff9 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -1239,7 +1239,7 @@ void CFileBrowser::paintItem(unsigned int pos) { int colwidth1, colwidth2, colwidth3; int c_rad_small; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; int ypos = y+ theight+0 + pos*fheight; CFile * actual_file = NULL; @@ -1247,14 +1247,14 @@ void CFileBrowser::paintItem(unsigned int pos) if (liststart + pos == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; c_rad_small = RADIUS_SMALL; // paintFoot(); } else { - color = COL_MENUCONTENT;//DARK; + color = COL_MENUCONTENT_TEXT;//DARK; bgcolor = COL_MENUCONTENT_PLUS_0;//DARK; c_rad_small = 0; } @@ -1267,8 +1267,14 @@ void CFileBrowser::paintItem(unsigned int pos) actual_file = &filelist[liststart+pos]; if (actual_file->Marked) { - color = COL_MENUCONTENTINACTIVE; //+= 2; FIXME - bgcolor = (liststart + pos == selected) ? COL_MENUCONTENTSELECTED_PLUS_2 : COL_MENUCONTENT_PLUS_2; + if (liststart + pos == selected) { + color = COL_MENUCONTENTINACTIVE_TEXT; + bgcolor = COL_MENUCONTENTSELECTED_PLUS_2; + } + else { + color = COL_MENUCONTENT_TEXT; + bgcolor = COL_MENUCONTENT_PLUS_2; + } } if (g_settings.filebrowser_showrights == 0 && S_ISREG(actual_file->Mode)) @@ -1293,7 +1299,7 @@ void CFileBrowser::paintItem(unsigned int pos) case CFile::FILE_FLAC: #endif fileicon = NEUTRINO_ICON_MP3; -// color = COL_MENUCONTENT; +// color = COL_MENUCONTENT_TEXT; break; case CFile::FILE_DIR: @@ -1505,7 +1511,7 @@ void CFileBrowser::paintFoot() char cKey[2]={m_SMSKeyInput.getOldKey(),0}; cKey[0] = toupper(cKey[0]); int len = fnt_small->getRenderWidth(cKey); - fnt_small->RenderString(x + width - 10 - len, by2 + foheight, len, cKey, COL_MENUHEAD, 0, true); + fnt_small->RenderString(x + width - 10 - len, by2 + foheight, len, cKey, COL_MENUHEAD_TEXT, 0, true); } } } diff --git a/src/gui/infoclock.cpp b/src/gui/infoclock.cpp index 44fe7f045..9ea868ce9 100644 --- a/src/gui/infoclock.cpp +++ b/src/gui/infoclock.cpp @@ -63,7 +63,7 @@ void CInfoClock::paintTime( bool show_dot) int x_diff = (time_width - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getRenderWidth(timestr)) / 2; frameBuffer->paintBoxRel(clock_x, y, time_width, time_height, COL_MENUCONTENT_PLUS_0, RADIUS_SMALL); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString(clock_x + x_diff, y + digit_h + digit_offset + ((time_height - digit_h) / 2), time_width, timestr, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString(clock_x + x_diff, y + digit_h + digit_offset + ((time_height - digit_h) / 2), time_width, timestr, COL_MENUCONTENT_TEXT); } void* CInfoClock::TimerProc(void *arg) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index f6aa75332..27db7e516 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -255,7 +255,7 @@ void CInfoViewer::paintTime (bool show_dot, bool firstPaint) if (show_dot) frameBuffer->paintBoxRel (BoxEndX - time_width + time_left_width - LEFT_OFFSET, ChanNameY, time_dot_width, time_height / 2 + 2, COL_INFOBAR_PLUS_0); else - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width + time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_dot_width, ":", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width + time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_dot_width, ":", COL_INFOBAR_TEXT); strcpy (old_timestr, timestr); } else { strcpy (old_timestr, timestr); @@ -265,9 +265,9 @@ void CInfoViewer::paintTime (bool show_dot, bool firstPaint) } timestr[2] = 0; - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width - LEFT_OFFSET, ChanNameY + time_height, time_left_width, timestr, COL_INFOBAR); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_left_width, ×tr[3], COL_INFOBAR); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width + time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_dot_width, ":", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width - LEFT_OFFSET, ChanNameY + time_height, time_left_width, timestr, COL_INFOBAR_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_left_width, ×tr[3], COL_INFOBAR_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString (BoxEndX - time_width + time_left_width - LEFT_OFFSET, ChanNameY + time_height, time_dot_width, ":", COL_INFOBAR_TEXT); if (show_dot) frameBuffer->paintBoxRel (BoxEndX - time_left_width - time_dot_width - LEFT_OFFSET, ChanNameY, time_dot_width, time_height / 2 + 2, COL_INFOBAR_PLUS_0); } @@ -342,7 +342,7 @@ void CInfoViewer::showRecordIcon (const bool show) frameBuffer->paintBoxRel(box_posX, BoxStartY + box_posY , box_len, chanH, COL_INFOBAR_PLUS_0, radius); if (rec_mode != CRecordManager::RECMODE_TSHIFT) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (rec_icon_posX + rec_icon_w + icon_space, BoxStartY + box_posY + chanH, box_len, records_msg, COL_INFOBAR_TEXT, 0, true); if (rec_mode == CRecordManager::RECMODE_REC) { @@ -521,7 +521,7 @@ void CInfoViewer::showMovieTitle(const int playState, const std::string &Channel infoViewerBB->paintshowButtonBar(); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString(ChanNameX + 10 , ChanNameY + time_height,BoxEndX - (ChanNameX + 20) - time_width - LEFT_OFFSET - 5 ,ChannelName, COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString(ChanNameX + 10 , ChanNameY + time_height,BoxEndX - (ChanNameX + 20) - time_width - LEFT_OFFSET - 5 ,ChannelName, COL_INFOBAR_TEXT, 0, true); // UTF-8 // show_Data if (CMoviePlayerGui::getInstance().file_prozent > 100) @@ -570,7 +570,7 @@ void CInfoViewer::showMovieTitle(const int playState, const std::string &Channel if (speed) { int sh = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight(); int sy = BoxStartY + ChanHeight/2 - sh/2 + sh; - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(icon_x, sy, ChanHeight, runningRest, COL_INFOBAR, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(icon_x, sy, ChanHeight, runningRest, COL_INFOBAR_TEXT, 0, true); icon_x += speedw; } frameBuffer->paintIcon(playicon, icon_x, icon_y); @@ -651,14 +651,14 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con is_visible = true; infoViewerBB->is_visible = true; - int col_NumBoxText = COL_INFOBAR; - int col_NumBox = COL_INFOBAR_PLUS_0; + fb_pixel_t col_NumBoxText = COL_INFOBAR_TEXT; + fb_pixel_t col_NumBox = COL_INFOBAR_PLUS_0; ChannelName = Channel; bool new_chan = false; if (virtual_zap_mode) { if (g_RemoteControl->current_channel_id != new_channel_id) { - col_NumBoxText = COL_MENUHEAD; + col_NumBoxText = COL_MENUHEAD_TEXT; } if ((channel_id != new_channel_id) || (evtlist.empty())) { CEitManager::getInstance()->getEventsServiceKey(new_channel_id, evtlist); @@ -727,7 +727,7 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con } } int chanH = g_SignalFont->getHeight (); - g_SignalFont->RenderString (3 + BoxStartX + ((ChanWidth - satNameWidth) / 2) , BoxStartY + chanH, satNameWidth, satname_tmp, COL_INFOBAR); + g_SignalFont->RenderString (3 + BoxStartX + ((ChanWidth - satNameWidth) / 2) , BoxStartY + chanH, satNameWidth, satname_tmp, COL_INFOBAR_TEXT); ChanNumYPos += 10; } @@ -752,12 +752,12 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con if (g_settings.infobar_show_channellogo < 5 || !logo_ok) { if (ChannelLogoMode != 2) { //FIXME good color to display inactive for zap ? - //uint8_t color = CNeutrinoApp::getInstance ()->channelList->SameTP(new_channel_id) ? COL_INFOBAR : COL_INFOBAR_SHADOW; - uint8_t color = COL_INFOBAR; + //fb_pixel_t color = CNeutrinoApp::getInstance ()->channelList->SameTP(new_channel_id) ? COL_INFOBAR_TEXT : COL_INFOBAR_SHADOW_TEXT; + fb_pixel_t color = COL_INFOBAR_TEXT; g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->RenderString( ChanNameX + 10 + ChanNumWidth, ChanNameY + time_height, BoxEndX - (ChanNameX + 20) - time_width - LEFT_OFFSET - 5 - ChanNumWidth, - ChannelName, color /*COL_INFOBAR*/, 0, true); // UTF-8 + ChannelName, color /*COL_INFOBAR_TEXT*/, 0, true); // UTF-8 //provider name if(g_settings.infobar_show_channeldesc && pname){ std::string prov_name = pname; @@ -771,7 +771,7 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString( ChanNameX + 10 + ChanNumWidth + chname_width, ChanNameY + time_height -SHADOW_OFFSET/2, BoxEndX - (ChanNameX + 20) - time_width - LEFT_OFFSET - 5 - ChanNumWidth - chname_width, - prov_name, color /*COL_INFOBAR*/, 0, true); // UTF-8 + prov_name, color /*COL_INFOBAR_TEXT*/, 0, true); // UTF-8 } } @@ -1038,15 +1038,15 @@ void CInfoViewer::showSubchan () lframeBuffer->paintBackgroundBoxRel (x + dx, y, borderwidth, dy); lframeBuffer->paintBoxRel (x, y, dx, dy, COL_MENUCONTENT_PLUS_0); - //g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + 30, dx - 20, text, COL_MENUCONTENT, 0, true); + //g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + 30, dx - 20, text, COL_MENUCONTENT_TEXT, 0, true); if (g_RemoteControl->director_mode) { lframeBuffer->paintIcon (NEUTRINO_ICON_BUTTON_YELLOW, x + 8, y + dy - 20); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (x + 30, y + dy - 2, dx - 40, g_Locale->getText (LOCALE_NVODSELECTOR_DIRECTORMODE), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString (x + 30, y + dy - 2, dx - 40, g_Locale->getText (LOCALE_NVODSELECTOR_DIRECTORMODE), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 int h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + dy - h - 2, dx - 20, text, COL_MENUCONTENT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + dy - h - 2, dx - 20, text, COL_MENUCONTENT_TEXT, 0, true); } else - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + dy - 2, dx - 20, text, COL_MENUCONTENT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (x + 10, y + dy - 2, dx - 20, text, COL_MENUCONTENT_TEXT, 0, true); uint64_t timeoutEnd_tmp = CRCInput::calcTimeoutEnd (2); int res = messages_return::none; @@ -1135,7 +1135,7 @@ void CInfoViewer::showRadiotext() // shadow frameBuffer->paintBoxRel(rt_x+SHADOW_OFFSET, rt_y+SHADOW_OFFSET, rt_dx, rt_dy, COL_INFOBAR_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_TOP); frameBuffer->paintBoxRel(rt_x, rt_y, rt_dx, rt_dy, COL_INFOBAR_PLUS_0, RADIUS_LARGE, CORNER_TOP); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rt_x+10, rt_y+ 30, rt_dx-20, stext[0], COL_INFOBAR, 0, RTisIsUTF); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rt_x+10, rt_y+ 30, rt_dx-20, stext[0], COL_INFOBAR_TEXT, 0, RTisIsUTF); // UTF-8 } // yoff = 17; ii = 1; @@ -1172,15 +1172,15 @@ void CInfoViewer::showRadiotext() int rts_dx = rt_dx-20; if (g_Radiotext->S_RtOsdLoop == 1) { // latest bottom for (int i = ind+1; i < g_Radiotext->S_RtOsdRows; i++) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR, 0, RTisIsUTF); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); // UTF-8 for (int i = 0; i <= ind; i++) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR, 0, RTisIsUTF); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); // UTF-8 } else { // latest top for (int i = ind; i >= 0; i--) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR, 0, RTisIsUTF); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); // UTF-8 for (int i = g_Radiotext->S_RtOsdRows-1; i > ind; i--) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR, 0, RTisIsUTF); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(rts_x, rts_y + (ii++)*rt_dy, rts_dx, g_Radiotext->RT_Text[i], COL_INFOBAR_TEXT, 0, RTisIsUTF); // UTF-8 } } #if 0 @@ -1427,7 +1427,7 @@ void CInfoViewer::showSNR () snprintf (freq, sizeof(freq), "%d.%d MHz %s", frequency / 1000, frequency % 1000, polarisation.c_str()); int satNameWidth = g_SignalFont->getRenderWidth (freq); - g_SignalFont->RenderString (3 + BoxStartX + ((ChanWidth - satNameWidth) / 2), BoxStartY + 2 * chanH - 3, satNameWidth, freq, SDT_freq_update ? COL_COLORED_EVENTS_INFOBAR:COL_INFOBAR); + g_SignalFont->RenderString (3 + BoxStartX + ((ChanWidth - satNameWidth) / 2), BoxStartY + 2 * chanH - 3, satNameWidth, freq, SDT_freq_update ? COL_COLORED_EVENTS_TEXT:COL_INFOBAR_TEXT); SDT_freq_update = false; } int sw, snr, sig, posx, posy; @@ -1452,7 +1452,7 @@ void CInfoViewer::showSNR () posx = posx + bar_width + 2; sw = BoxStartX + ChanWidth - posx; frameBuffer->paintBoxRel (posx, posy, sw, height, COL_INFOBAR_PLUS_0); - g_SignalFont->RenderString (posx, posy + height, sw, percent, COL_INFOBAR); + g_SignalFont->RenderString (posx, posy + height, sw, percent, COL_INFOBAR_TEXT); } if (lastsnr != snr) { lastsnr = snr; @@ -1466,7 +1466,7 @@ void CInfoViewer::showSNR () posx = posx + bar_width + 2; sw = BoxStartX + ChanWidth - posx -4; frameBuffer->paintBoxRel (posx, posy, sw, height-2, COL_INFOBAR_PLUS_0); - g_SignalFont->RenderString (posx, posy + height, sw, percent, COL_INFOBAR); + g_SignalFont->RenderString (posx, posy + height, sw, percent, COL_INFOBAR_TEXT); } } if(showButtonBar) @@ -1583,8 +1583,8 @@ void CInfoViewer::display_Info(const char *current, const char *next, { frameBuffer->paintBox(InfoX, CurrInfoY - height, currTimeX, CurrInfoY, COL_INFOBAR_PLUS_0); if (runningStart != NULL) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(InfoX, CurrInfoY, info_time_width, runningStart, colored_event_C ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(xStart, CurrInfoY, currTimeX - xStart - 5, current, colored_event_C ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(InfoX, CurrInfoY, info_time_width, runningStart, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(xStart, CurrInfoY, currTimeX - xStart - 5, current, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); oldCurrTimeX = currTimeX; } @@ -1593,19 +1593,19 @@ void CInfoViewer::display_Info(const char *current, const char *next, frameBuffer->paintBox(oldCurrTimeX, CurrInfoY-height, BoxEndX, CurrInfoY, COL_INFOBAR_PLUS_0); oldCurrTimeX = currTimeX; if (currTimeW != 0) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(currTimeX, CurrInfoY, currTimeW, runningRest, colored_event_C ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(currTimeX, CurrInfoY, currTimeW, runningRest, colored_event_C ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); if (next != NULL && update_next) { frameBuffer->paintBox(InfoX, NextInfoY-height, BoxEndX, NextInfoY, COL_INFOBAR_PLUS_0); if (nextStart != NULL) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(InfoX, NextInfoY, info_time_width, nextStart, colored_event_N ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(InfoX, NextInfoY, info_time_width, nextStart, colored_event_N ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); if (starttimes) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(xStart, NextInfoY, nextTimeX - xStart - 5, next, colored_event_N ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(xStart, NextInfoY, nextTimeX - xStart - 5, next, colored_event_N ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); else - g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->RenderString(xStart, NextInfoY, nextTimeX - xStart - 5, next, colored_event_N ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->RenderString(xStart, NextInfoY, nextTimeX - xStart - 5, next, colored_event_N ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); if (nextTimeW != 0) - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(nextTimeX, NextInfoY, nextTimeW, nextDuration, colored_event_N ? COL_COLORED_EVENTS_INFOBAR : COL_INFOBAR, 0, UTF8); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(nextTimeX, NextInfoY, nextTimeW, nextDuration, colored_event_N ? COL_COLORED_EVENTS_TEXT : COL_INFOBAR_TEXT, 0, UTF8); } } @@ -1760,7 +1760,7 @@ void CInfoViewer::show_Data (bool calledFromEvent) // no EPG available ChanInfoY += height; frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (BoxStartX + ChanWidth + 20, ChanInfoY + height, BoxEndX - (BoxStartX + ChanWidth + 20), g_Locale->getText (gotTime ? LOCALE_INFOVIEWER_NOEPG : LOCALE_INFOVIEWER_WAITTIME), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (BoxStartX + ChanWidth + 20, ChanInfoY + height, BoxEndX - (BoxStartX + ChanWidth + 20), g_Locale->getText (gotTime ? LOCALE_INFOVIEWER_NOEPG : LOCALE_INFOVIEWER_WAITTIME), COL_INFOBAR_TEXT, 0, true); // UTF-8 } else { // irgendein EPG gefunden int duration1Width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth (runningRest); @@ -1772,7 +1772,7 @@ void CInfoViewer::show_Data (bool calledFromEvent) if ((info_CurrentNext.flags & CSectionsdClient::epgflags::has_next) && (!(info_CurrentNext.flags & CSectionsdClient::epgflags::has_current))) { // there are later events available - yet no current frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, BoxEndX - xStart, g_Locale->getText (LOCALE_INFOVIEWER_NOCURRENT), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, BoxEndX - xStart, g_Locale->getText (LOCALE_INFOVIEWER_NOCURRENT), COL_INFOBAR_TEXT, 0, true); // UTF-8 ChanInfoY += height; @@ -1781,21 +1781,21 @@ void CInfoViewer::show_Data (bool calledFromEvent) if (last_next_id != info_CurrentNext.next_uniqueKey) { frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR_TEXT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR_TEXT); last_next_id = info_CurrentNext.next_uniqueKey; } } else { if (last_curr_id != info_CurrentNext.current_uniqueKey) { frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, runningStart, COL_INFOBAR); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration1TextPos - xStart - 5, info_CurrentNext.current_name, COL_INFOBAR, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, runningStart, COL_INFOBAR_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration1TextPos - xStart - 5, info_CurrentNext.current_name, COL_INFOBAR_TEXT, 0, true); last_curr_id = info_CurrentNext.current_uniqueKey; } frameBuffer->paintBox (BoxEndX - 80, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0);//FIXME duration1TextPos not really good - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration1TextPos, ChanInfoY + height, duration1Width, runningRest, COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration1TextPos, ChanInfoY + height, duration1Width, runningRest, COL_INFOBAR_TEXT); ChanInfoY += height; @@ -1805,9 +1805,9 @@ void CInfoViewer::show_Data (bool calledFromEvent) if ((!is_nvod) && (info_CurrentNext.flags & CSectionsdClient::epgflags::has_next)) { if (last_next_id != info_CurrentNext.next_uniqueKey) { frameBuffer->paintBox (ChanInfoX + 10, ChanInfoY, BoxEndX, ChanInfoY + height, COL_INFOBAR_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (ChanInfoX + 10, ChanInfoY + height, 100, nextStart, COL_INFOBAR_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (xStart, ChanInfoY + height, duration2TextPos - xStart - 5, info_CurrentNext.next_name, COL_INFOBAR_TEXT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString (duration2TextPos, ChanInfoY + height, duration2Width, nextDuration, COL_INFOBAR_TEXT); last_next_id = info_CurrentNext.next_uniqueKey; } } //else @@ -1867,7 +1867,7 @@ void CInfoViewer::showInfoFile() infobar_txt->setDimensionsAll(xStart, yStart, width, height); infobar_txt->setCornerRadius(RADIUS_SMALL); infobar_txt->setShadowOnOff(true); - infobar_txt->setTextColor(COL_INFOBAR); + infobar_txt->setTextColor(COL_INFOBAR_TEXT); infobar_txt->setColorBody(COL_INFOBAR_PLUS_0); infobar_txt->doPaintTextBoxBg(false); diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index cfcb9404d..7dd0cc7e4 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -63,7 +63,6 @@ extern CRemoteControl *g_RemoteControl; /* neutrino.cpp */ extern cVideo * videoDecoder; //#define SHOW_RADIOTEXT_ICON -#define COL_INFOBAR_BUTTONS (COL_INFOBAR_SHADOW + 1) #define COL_INFOBAR_BUTTONS_BACKGROUND (COL_INFOBAR_SHADOW_PLUS_1) CInfoViewerBB::CInfoViewerBB() @@ -387,7 +386,7 @@ void CInfoViewerBB::showBBButtons(const int modus) frameBuffer->paintIcon(bbButtonInfo[i].icon, bbButtonInfo[i].x, BBarY, InfoHeightY_Info); g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(bbButtonInfo[i].x + bbButtonInfo[i].cx, BBarFontY, - bbButtonInfo[i].w - bbButtonInfo[i].cx, bbButtonInfo[i].text, COL_INFOBAR_BUTTONS, 0, true); // UTF-8 + bbButtonInfo[i].w - bbButtonInfo[i].cx, bbButtonInfo[i].text, COL_INFOBAR_TEXT, 0, true); // UTF-8 } } diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index 012d3430b..8a6750c94 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -503,13 +503,13 @@ void CMotorControl::paintLine(int px, int *py, int pwidth, const char *txt) { *py += mheight; frameBuffer->paintBoxRel(px, *py - mheight, pwidth, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py, pwidth, txt, COL_MENUCONTENT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py, pwidth, txt, COL_MENUCONTENT_TEXT, 0, true); } void CMotorControl::paintLine(int px, int py, int pwidth, const char *txt) { //frameBuffer->paintBoxRel(px, py - mheight, pwidth, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py, pwidth, txt, COL_MENUCONTENT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py, pwidth, txt, COL_MENUCONTENT_TEXT, 0, true); } void CMotorControl::paintSeparator(int xpos, int *pypos, int pwidth, const char * /*txt*/) @@ -527,7 +527,7 @@ void CMotorControl::paintSeparator(int xpos, int *pypos, int pwidth, const char stringstartposX = 0; stringstartposX = (xpos + (pwidth >> 1)) - (stringwidth >> 1); frameBuffer->paintBoxRel(stringstartposX - 5, *pypos - mheight, stringwidth + 10, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposX, *pypos, stringwidth, txt, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposX, *pypos, stringwidth, txt, COL_MENUCONTENT_TEXT); #endif } @@ -744,7 +744,7 @@ void CMotorControl::showSNR() posx_sig += barwidth + 3; frameBuffer->paintBoxRel(posx_sig, posy - 2, sw+4, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx_sig+2, posy + mheight, sw, percent, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx_sig+2, posy + mheight, sw, percent, COL_MENUCONTENT_TEXT); } if (lastsnr != snr) { @@ -758,6 +758,6 @@ void CMotorControl::showSNR() posx_snr += barwidth + 3; frameBuffer->paintBoxRel(posx_snr, posy - 2, sw+4, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx_snr+2, posy + mheight, sw, percent, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx_snr+2, posy + mheight, sw, percent, COL_MENUCONTENT_TEXT); } } diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 76c40a3a3..c00b79c94 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -138,7 +138,7 @@ const CMenuOptionChooser::keyval MESSAGEBOX_PARENTAL_LOCKAGE_OPTIONS[MESSAGEBOX_ }; #define TITLE_BACKGROUND_COLOR ((CFBWindow::color_t)COL_MENUHEAD_PLUS_0) -#define TITLE_FONT_COLOR ((CFBWindow::color_t)COL_MENUHEAD) +#define TITLE_FONT_COLOR COL_MENUHEAD_TEXT #define TITLE_FONT g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE] #define FOOT_FONT g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL] @@ -1638,7 +1638,7 @@ void CMovieBrowser::refreshTitle(void) void CMovieBrowser::refreshFoot(void) { //TRACE("[mb]->refreshButtonLine \r\n"); - int color = (CFBWindow::color_t) COL_INFOBAR_SHADOW; + fb_pixel_t color = COL_INFOBAR_TEXT; int iw = 0, ih = 0; std::string filter_text = g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_FILTER); @@ -3799,16 +3799,16 @@ int CMenuSelector::paint(bool selected) { CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); - unsigned char color = COL_MENUCONTENT; + fb_pixel_t color = COL_MENUCONTENT_TEXT; fb_pixel_t bgcolor = COL_MENUCONTENT_PLUS_0; if (selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } if (!active) { - color = COL_MENUCONTENTINACTIVE; + color = COL_MENUCONTENTINACTIVE_TEXT; bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; } diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 54f3816bd..aaa89fbfb 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1454,7 +1454,7 @@ void CMoviePlayerGui::showSubtitle(neutrino_msg_data_t data) frameBuffer->paintBoxRel(min_x, min_y, max_x - min_x, max_y-min_y, COL_MENUCONTENT_PLUS_0); for (unsigned i = 0; i < subtext.size(); i++) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x[i], y[i], sw, subtext[i].c_str(), COL_MENUCONTENT, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x[i], y[i], sw, subtext[i].c_str(), COL_MENUCONTENT_TEXT, 0, true); end_time = sub->end_display_time + time_monotonic_ms(); } diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index 35175ea09..cc7ddafd4 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -162,8 +162,8 @@ int CPictureViewerGui::exec(CMenuTarget* parent, const std::string & actionKey) fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); //get footerHeight from paintButtons - buttons1Height = ::paintButtons(0, 0, 0, PictureViewerButtons1Count, PictureViewerButtons1, 0, 0, "", false, COL_INFOBAR_SHADOW, NULL, 0, false); - buttons2Height = ::paintButtons(0, 0, 0, PictureViewerButtons2Count, PictureViewerButtons2, 0, 0, "", false, COL_INFOBAR_SHADOW, NULL, 0, false); + buttons1Height = ::paintButtons(0, 0, 0, PictureViewerButtons1Count, PictureViewerButtons1, 0, 0, "", false, COL_INFOBAR_SHADOW_TEXT, NULL, 0, false); + buttons2Height = ::paintButtons(0, 0, 0, PictureViewerButtons2Count, PictureViewerButtons2, 0, 0, "", false, COL_INFOBAR_SHADOW_TEXT, NULL, 0, false); footerHeight = buttons1Height + buttons2Height; listmaxshow = (height-theight-footerHeight)/(fheight); @@ -660,24 +660,24 @@ void CPictureViewerGui::paintItem(int pos) // printf("paintItem{\n"); int ypos = y+ theight + 0 + pos*fheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if ((liststart+pos < playlist.size()) && (pos & 1) ) { - color = COL_MENUCONTENTDARK; + color = COL_MENUCONTENTDARK_TEXT; bgcolor = COL_MENUCONTENTDARK_PLUS_0; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } if (liststart+pos == selected) { frameBuffer->paintBoxRel(x,ypos, width-15, fheight, bgcolor); - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } diff --git a/src/gui/pipsetup.cpp b/src/gui/pipsetup.cpp index 505576479..98692ad7a 100644 --- a/src/gui/pipsetup.cpp +++ b/src/gui/pipsetup.cpp @@ -188,10 +188,10 @@ void CPipSetup::paint() frameBuffer->paintBoxRel(x, y, mwidth, mheight*4, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight, mwidth, xpos, COL_MENUCONTENT); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*2, mwidth, ypos, COL_MENUCONTENT); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*3, mwidth, wpos, COL_MENUCONTENT); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*4, mwidth, hpos, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight, mwidth, xpos, COL_MENUCONTENT_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*2, mwidth, ypos, COL_MENUCONTENT_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*3, mwidth, wpos, COL_MENUCONTENT_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*4, mwidth, hpos, COL_MENUCONTENT_TEXT); } #endif //#ifdef ENABLE_PIP diff --git a/src/gui/pluginlist.cpp b/src/gui/pluginlist.cpp index c74ab285e..470e40ab5 100644 --- a/src/gui/pluginlist.cpp +++ b/src/gui/pluginlist.cpp @@ -266,12 +266,12 @@ void CPluginList::paintItem(int pos) int ypos = (y+theight) + pos*fheight; int itemheight = fheight; - uint8_t color = COL_MENUCONTENT; + fb_pixel_t color = COL_MENUCONTENT_TEXT; fb_pixel_t bgcolor = COL_MENUCONTENT_PLUS_0; if (liststart+pos==selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index 9387449b8..c3a4fd2a6 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -487,7 +487,7 @@ void CScanTs::hide() void CScanTs::paintLineLocale(int px, int * py, int pwidth, const neutrino_locale_t l) { frameBuffer->paintBoxRel(px, *py, pwidth, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py + mheight, pwidth, g_Locale->getText(l), COL_MENUCONTENTINACTIVE, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py + mheight, pwidth, g_Locale->getText(l), COL_MENUCONTENTINACTIVE_TEXT, 0, true); // UTF-8 *py += mheight; } @@ -495,7 +495,7 @@ void CScanTs::paintLine(int px, int py, int w, const char * const txt) { //printf("CScanTs::paintLine x %d y %d w %d width %d xpos2 %d: %s\n", px, py, w, width, xpos2, txt); frameBuffer->paintBoxRel(px, py, w, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py + mheight, w, txt, COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py + mheight, w, txt, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void CScanTs::paint(bool fortest) @@ -584,10 +584,10 @@ void CScanTs::showSNR () posx = posx + barwidth + 3; frameBuffer->paintBoxRel(posx, posy -1, sw, mheight-8, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2, posy + mheight-(mheight-BAR_HEIGHT)/4, sw, percent, COL_MENUCONTENTDARK); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2, posy + mheight-(mheight-BAR_HEIGHT)/4, sw, percent, COL_MENUCONTENTDARK_TEXT); frameBuffer->paintBoxRel(posx+(4*fw), posy - 2, 4*fw, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2+(4*fw), posy + mheight-(mheight-BAR_HEIGHT)/4, 4*fw, "SIG", COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2+(4*fw), posy + mheight-(mheight-BAR_HEIGHT)/4, 4*fw, "SIG", COL_MENUCONTENT_TEXT); } if (lastsnr != snr) { @@ -600,10 +600,10 @@ void CScanTs::showSNR () posx = posx + barwidth + 3; frameBuffer->paintBoxRel(posx, posy - 1, sw, mheight-8, COL_MENUCONTENT_PLUS_0, 0, true); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx + 2, posy + mheight-(mheight-BAR_HEIGHT)/4, sw, percent, COL_MENUCONTENTDARK, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx + 2, posy + mheight-(mheight-BAR_HEIGHT)/4, sw, percent, COL_MENUCONTENTDARK_TEXT, 0, true); frameBuffer->paintBoxRel(posx+(4*fw), posy - 2, 4*fw, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2+(4*fw), posy + mheight-(mheight-BAR_HEIGHT)/4, 4*fw, "SNR", COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx+2+(4*fw), posy + mheight-(mheight-BAR_HEIGHT)/4, 4*fw, "SNR", COL_MENUCONTENT_TEXT); } } diff --git a/src/gui/screensetup.cpp b/src/gui/screensetup.cpp index fd51c7def..b1662e478 100644 --- a/src/gui/screensetup.cpp +++ b/src/gui/screensetup.cpp @@ -259,9 +259,9 @@ void CScreenSetup::paintIcons(int pselected) frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, x_box + 5, y_box+BoxHeight, BoxHeight); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_box + icol_w + 10, y_box + BoxHeight, BoxWidth, - g_Locale->getText(LOCALE_SCREENSETUP_UPPERLEFT ), (pselected == 0) ? COL_MENUCONTENTSELECTED:COL_MENUCONTENT , 0, true); // UTF-8 + g_Locale->getText(LOCALE_SCREENSETUP_UPPERLEFT ), (pselected == 0) ? COL_MENUCONTENTSELECTED_TEXT:COL_MENUCONTENT_TEXT , 0, true); // UTF-8 g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_box + icol_w + 10, y_box + BoxHeight * 2, BoxWidth, - g_Locale->getText(LOCALE_SCREENSETUP_LOWERRIGHT), (pselected == 1) ? COL_MENUCONTENTSELECTED:COL_MENUCONTENT, 0, true); // UTF-8 + g_Locale->getText(LOCALE_SCREENSETUP_LOWERRIGHT), (pselected == 1) ? COL_MENUCONTENTSELECTED_TEXT:COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void CScreenSetup::paintBorderUL() @@ -296,7 +296,7 @@ void CScreenSetup::paintCoords() /* the code is smaller with this loop instead of open-coded 4x RenderString() :-) */ for (int i = 0; i < 4; i++) { - f->RenderString(x2, y2, w, str[i], COL_MENUCONTENT); + f->RenderString(x2, y2, w, str[i], COL_MENUCONTENT_TEXT); y2 += fh; } } diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 5304134a8..7def6b751 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -175,12 +175,12 @@ int CStreamInfo2::doSignalStrengthLoop () rate.min_short_average = minb = bit_s; sprintf(tmp_str, "%s:",g_Locale->getText(LOCALE_STREAMINFO_BITRATE)); - g_Font[font_info]->RenderString(dx1 , average_bitrate_pos, offset+10, tmp_str, COL_INFOBAR, 0, true); + g_Font[font_info]->RenderString(dx1 , average_bitrate_pos, offset+10, tmp_str, COL_INFOBAR_TEXT, 0, true); sprintf(currate, "%5llu.%02llu", rate.short_average / 1000ULL, rate.short_average % 1000ULL); frameBuffer->paintBoxRel (dx1 + average_bitrate_offset , average_bitrate_pos -dheight, sw, dheight, COL_MENUHEAD_PLUS_0); - g_Font[font_info]->RenderString (dx1 + average_bitrate_offset , average_bitrate_pos, sw - 10, currate, COL_INFOBAR); + g_Font[font_info]->RenderString (dx1 + average_bitrate_offset , average_bitrate_pos, sw - 10, currate, COL_INFOBAR_TEXT); sprintf(tmp_str, "(%s)",g_Locale->getText(LOCALE_STREAMINFO_AVERAGE_BITRATE)); - g_Font[font_info]->RenderString (dx1 + average_bitrate_offset + sw , average_bitrate_pos, sw *2, tmp_str, COL_INFOBAR); + g_Font[font_info]->RenderString (dx1 + average_bitrate_offset + sw , average_bitrate_pos, sw *2, tmp_str, COL_INFOBAR_TEXT); } showSNR (); @@ -270,7 +270,7 @@ void CStreamInfo2::paint_signal_fe_box(int _x, int _y, int w, int h) char tname[255]; snprintf(tname, sizeof(tname), "%s: %d: %s", g_Locale->getText(LOCALE_STREAMINFO_SIGNAL), tuner, frontend->getInfo()->name); - g_Font[font_small]->RenderString(_x, _y+iheight+15, width-10, tname /*tuner_name.c_str()*/, COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x, _y+iheight+15, width-10, tname /*tuner_name.c_str()*/, COL_INFOBAR_TEXT, 0, true); sigBox_x = _x; sigBox_y = _y+iheight+15; @@ -283,16 +283,16 @@ void CStreamInfo2::paint_signal_fe_box(int _x, int _y, int w, int h) frameBuffer->paintBoxRel(_x+xd*0,y1- 12,16,2, COL_RED); //red - g_Font[font_small]->RenderString(_x+20+xd*0, y1, fw*4, "BER", COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x+20+xd*0, y1, fw*4, "BER", COL_INFOBAR_TEXT, 0, true); frameBuffer->paintBoxRel(_x+xd*1,y1- 12,16,2,COL_BLUE); //blue - g_Font[font_small]->RenderString(_x+20+xd*1, y1, fw*4, "SNR", COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x+20+xd*1, y1, fw*4, "SNR", COL_INFOBAR_TEXT, 0, true); frameBuffer->paintBoxRel(_x+8+xd*2,y1- 12,16,2, COL_GREEN); //green - g_Font[font_small]->RenderString(_x+28+xd*2, y1, fw*4, "SIG", COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x+28+xd*2, y1, fw*4, "SIG", COL_INFOBAR_TEXT, 0, true); frameBuffer->paintBoxRel(_x+xd*3,y1- 12,16,2,COL_YELLOW); // near yellow - g_Font[font_small]->RenderString(_x+20+xd*3, y1, fw*5, "Bitrate", COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x+20+xd*3, y1, fw*5, "Bitrate", COL_INFOBAR_TEXT, 0, true); sig_text_ber_x = _x + xd * 0; sig_text_snr_x = _x + 5 + xd * 1; @@ -307,9 +307,9 @@ void CStreamInfo2::paint_signal_fe_box(int _x, int _y, int w, int h) else maxmin_x = _x + 40 + xd * 3 + (fontW*4); - g_Font[font_small]->RenderString(maxmin_x, y1 + sheight + 5, fw*3, "max", COL_INFOBAR, 0, true); - g_Font[font_small]->RenderString(maxmin_x, y1 + (sheight * 2) +5, fw*3, "now", COL_INFOBAR, 0, true); - g_Font[font_small]->RenderString(maxmin_x, y1 + (sheight * 3) +5, fw*3, "min", COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(maxmin_x, y1 + sheight + 5, fw*3, "max", COL_INFOBAR_TEXT, 0, true); + g_Font[font_small]->RenderString(maxmin_x, y1 + (sheight * 2) +5, fw*3, "now", COL_INFOBAR_TEXT, 0, true); + g_Font[font_small]->RenderString(maxmin_x, y1 + (sheight * 3) +5, fw*3, "min", COL_INFOBAR_TEXT, 0, true); sigBox_pos = 0; @@ -399,7 +399,7 @@ void CStreamInfo2::SignalRenderStr(unsigned int value, int _x, int _y) fw *=(fw>17)?5:6; frameBuffer->paintBoxRel(_x, _y - sheight + 5, fw, sheight -1, COL_MENUHEAD_PLUS_0); sprintf(str,"%6u",value); - g_Font[font_small]->RenderString(_x, _y + 5, fw, str, COL_INFOBAR, 0, true); + g_Font[font_small]->RenderString(_x, _y + 5, fw, str, COL_INFOBAR_TEXT, 0, true); } void CStreamInfo2::paint (int /*mode*/) @@ -420,7 +420,7 @@ void CStreamInfo2::paint (int /*mode*/) // paint backround, title pig, etc. frameBuffer->paintBoxRel (0, 0, max_width, max_height, COL_MENUHEAD_PLUS_0); - g_Font[font_head]->RenderString (xpos, ypos + hheight + 1, width, head_string, COL_MENUHEAD, 0, true); // UTF-8 + g_Font[font_head]->RenderString (xpos, ypos + hheight + 1, width, head_string, COL_MENUHEAD_TEXT, 0, true); // UTF-8 ypos += hheight; if (pip == NULL) @@ -482,14 +482,14 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) //Video RESOLUTION ypos += iheight; sprintf (buf, "%s:",g_Locale->getText (LOCALE_STREAMINFO_RESOLUTION)); - g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 sprintf (buf, "%dx%d", xres, yres); - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //audio rate ypos += iheight; sprintf (buf, "%s:",g_Locale->getText (LOCALE_STREAMINFO_ARATIO)); - g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 switch (aspectRatio) { case 0: sprintf (buf, "N/A"); @@ -509,12 +509,12 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) default: strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_ARATIO_UNKNOWN), sizeof (buf)-1); } - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //Video FRAMERATE ypos += iheight; sprintf (buf, "%s:", g_Locale->getText (LOCALE_STREAMINFO_FRAMERATE)); - g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 switch (framerate) { case 0: snprintf (buf,sizeof(buf), "23.976fps"); @@ -544,7 +544,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) strncpy (buf, g_Locale->getText (LOCALE_STREAMINFO_FRAMERATE_UNKNOWN), sizeof (buf)-1); break; } - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 // place for average bitrate average_bitrate_pos = ypos += iheight; //AUDIOTYPE @@ -556,14 +556,14 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) const char *ddmodes[8] = { "CH1/CH2", "C", "L/R", "L/C/R", "L/R/S", "L/C/R/S", "L/R/SL/SR", "L/C/R/SL/SR" }; sprintf (buf, "%s:", g_Locale->getText (LOCALE_STREAMINFO_AUDIOTYPE)); - g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 if(type == 0) { sprintf (buf, "MPEG %s (%d)", mpegmodes[mode], freq); } else { sprintf (buf, "DD %s (%d)", ddmodes[mode], freq); } - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //satellite ypos += iheight; @@ -572,18 +572,18 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) else if(t.deltype == FE_QAM) sprintf (buf, "%s:",g_Locale->getText (LOCALE_CHANNELLIST_PROVS)); - g_Font[font_info]->RenderString(xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString(xpos, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 sprintf (buf, "%s", CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str()); - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //channel ypos += iheight; sprintf (buf, "%s:",g_Locale->getText (LOCALE_TIMERLIST_CHANNEL));//swiped locale - g_Font[font_info]->RenderString(xpos, ypos, box_width, buf , COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString(xpos, ypos, box_width, buf , COL_INFOBAR_TEXT, 0, true); // UTF-8 sprintf(buf, "%s", channel->getName().c_str()); - g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //tsfrequenz ypos += iheight; @@ -593,8 +593,8 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) scaling = 15000; sprintf (buf, "%s",g_Locale->getText (LOCALE_SCANTS_FREQDATA)); - g_Font[font_info]->RenderString(xpos, ypos, box_width, buf , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_info]->RenderString(xpos+spaceoffset, ypos, box_width, t.description().c_str(), COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_info]->RenderString(xpos, ypos, box_width, buf , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_info]->RenderString(xpos+spaceoffset, ypos, box_width, t.description().c_str(), COL_INFOBAR_TEXT, 0, true); // UTF-8 // paint labels int fontW = g_Font[font_small]->getWidth(); @@ -602,27 +602,27 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) //onid ypos+= sheight; sprintf(buf, "0x%04X (%i)", channel->getOriginalNetworkId(), channel->getOriginalNetworkId()); - g_Font[font_small]->RenderString(xpos, ypos, box_width, "ONid:" , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "ONid:" , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //sid ypos+= sheight; sprintf(buf, "0x%04X (%i)", channel->getServiceId(), channel->getServiceId()); - g_Font[font_small]->RenderString(xpos, ypos, box_width, "Sid:" , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "Sid:" , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //tsid ypos+= sheight; sprintf(buf, "0x%04X (%i)", channel->getTransportStreamId(), channel->getTransportStreamId()); - g_Font[font_small]->RenderString(xpos, ypos, box_width, "TSid:" , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "TSid:" , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //pmtpid ypos+= sheight; pmt_version = channel->getPmtVersion(); sprintf(buf, "0x%04X (%i) [0x%02X]", channel->getPmtPid(), channel->getPmtPid(), pmt_version); - g_Font[font_small]->RenderString(xpos, ypos, box_width, "PMTpid:", COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "PMTpid:", COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //vpid ypos+= sheight; @@ -631,12 +631,12 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) } else { sprintf(buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE)); } - g_Font[font_small]->RenderString(xpos, ypos, box_width, "Vpid:" , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "Vpid:" , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 //apid ypos+= sheight; - g_Font[font_small]->RenderString(xpos, ypos, box_width, "Apid(s):" , COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "Apid(s):" , COL_INFOBAR_TEXT, 0, true); // UTF-8 if (g_RemoteControl->current_PIDs.APIDs.empty()){ sprintf(buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE)); } else { @@ -645,10 +645,10 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) { sprintf(buf, "0x%04X (%i)", g_RemoteControl->current_PIDs.APIDs[li].pid, g_RemoteControl->current_PIDs.APIDs[li].pid ); if (li == g_RemoteControl->current_PIDs.PIDs.selected_apid){ - g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_MENUHEAD, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_MENUHEAD_TEXT, 0, true); // UTF-8 } else{ - g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 } sw = g_Font[font_small]->getRenderWidth(buf)+sw+10; if (((li+1)%3 == 0) &&(g_RemoteControl->current_PIDs.APIDs.size()-1 > li)){ // if we have lots of apids, put "intermediate" line with pids @@ -664,8 +664,8 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) sprintf(buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE)); else sprintf(buf, "0x%04X (%i)", g_RemoteControl->current_PIDs.PIDs.vtxtpid, g_RemoteControl->current_PIDs.PIDs.vtxtpid ); - g_Font[font_small]->RenderString(xpos, ypos, box_width, "VTXTpid:" , COL_INFOBAR, 0, true); // UTF-8 - g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos, ypos, box_width, "VTXTpid:" , COL_INFOBAR_TEXT, 0, true); // UTF-8 + g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR_TEXT, 0, true); // UTF-8 if(box_h == 0) box_h = ypos - ypos1; yypos = ypos; @@ -753,7 +753,7 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) if(caids[ca_id] == true){ if(cryptsysteme){ ypos += iheight; - g_Font[font_info]->RenderString(xpos , ypos, box_width, "Conditional access:" , COL_INFOBAR, 0, false); + g_Font[font_info]->RenderString(xpos , ypos, box_width, "Conditional access:" , COL_INFOBAR_TEXT, 0, false); cryptsysteme = false; } ypos += sheight; @@ -762,7 +762,7 @@ void CStreamInfo2::paintCASystem(int xpos, int ypos) std::string::size_type last_pos = casys[ca_id].find_first_not_of(tok, 0); std::string::size_type pos = casys[ca_id].find_first_of(tok, last_pos); while (std::string::npos != pos || std::string::npos != last_pos){ - g_Font[font_small]->RenderString(xpos + width_txt, ypos, box_width, casys[ca_id].substr(last_pos, pos - last_pos).c_str() , COL_INFOBAR, 0, false); + g_Font[font_small]->RenderString(xpos + width_txt, ypos, box_width, casys[ca_id].substr(last_pos, pos - last_pos).c_str() , COL_INFOBAR_TEXT, 0, false); if(index == 0) width_txt = spaceoffset; else diff --git a/src/gui/timeosd.cpp b/src/gui/timeosd.cpp index 48d32aea0..6b0cd6488 100644 --- a/src/gui/timeosd.cpp +++ b/src/gui/timeosd.cpp @@ -98,10 +98,10 @@ void CTimeOSD::update(time_t time_show) if(m_mode == MODE_ASC) { color1 = COL_MENUCONTENT_PLUS_0; - color2 = COL_MENUCONTENT; + color2 = COL_MENUCONTENT_TEXT; } else { color1 = COL_MENUCONTENTSELECTED_PLUS_0; - color2 = COL_MENUCONTENTSELECTED; + color2 = COL_MENUCONTENTSELECTED_TEXT; } strftime(cDisplayTime, 9, "%T", gmtime(&time_show)); frameBuffer->paintBoxRel(m_xend - m_width - t1, m_y, m_width, m_height, color1,RADIUS_SMALL); diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 0b3d3dd97..c5fa8e6f9 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -438,7 +438,7 @@ void CTimerList::updateEvents(void) theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); //get footerHeight from paintButtons - footerHeight = ::paintButtons(0, 0, 0, TimerListButtonsCount, TimerListButtons, 0, 0, "", false, COL_INFOBAR_SHADOW, NULL, 0, false); + footerHeight = ::paintButtons(0, 0, 0, TimerListButtonsCount, TimerListButtons, 0, 0, "", false, COL_INFOBAR_SHADOW_TEXT, NULL, 0, false); width = w_max(g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getWidth()*56, 20); height = frameBuffer->getScreenHeight() - (2*theight); // max height @@ -687,7 +687,7 @@ void CTimerList::paintItem(int pos) { int ypos = y+ theight+ pos*fheight*2; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; int real_width=width; @@ -696,7 +696,7 @@ void CTimerList::paintItem(int pos) real_width-=15; //scrollbar } - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; if (pos & 1) bgcolor = COL_MENUCONTENT_PLUS_1; else @@ -708,7 +708,7 @@ void CTimerList::paintItem(int pos) if (liststart + pos == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } //selected item diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 29bfe8161..48ed0808c 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -870,17 +870,17 @@ bool CUpnpBrowserGui::selectItem(std::string id) void CUpnpBrowserGui::paintDevicePos(unsigned int pos) { int ypos = m_y + m_title_height + m_theight + pos*m_fheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pos == m_selecteddevice) { - color = COL_MENUCONTENT + 2; + color = COL_MENUCONTENT_TEXT_PLUS_2; bgcolor = COL_MENUCONTENT_PLUS_2; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, bgcolor); @@ -906,12 +906,12 @@ void CUpnpBrowserGui::paintDevicePos(unsigned int pos) void CUpnpBrowserGui::paintItemPos(std::vector *entry, unsigned int pos, unsigned int selected) { int ypos = m_y + m_title_height + m_theight + pos*m_fheight; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pos == selected) { - color = COL_MENUCONTENT + 2; + color = COL_MENUCONTENT_TEXT_PLUS_2; bgcolor = COL_MENUCONTENT_PLUS_2; paintDetails(entry, pos); if ((*entry)[pos].isdir) @@ -921,7 +921,7 @@ void CUpnpBrowserGui::paintItemPos(std::vector *entry, unsigned int p } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, bgcolor); @@ -987,7 +987,7 @@ void CUpnpBrowserGui::paintDevice() if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 1*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // second line tmp = m_devices[m_selecteddevice].modelname + " " + @@ -998,7 +998,7 @@ void CUpnpBrowserGui::paintDevice() if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 2*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // third line tmp = m_devices[m_selecteddevice].modelurl; w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true); // UTF-8 @@ -1006,7 +1006,7 @@ void CUpnpBrowserGui::paintDevice() if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 3*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // Head CComponentsHeader header(m_x, m_y + m_title_height, m_width, m_theight, LOCALE_UPNPBROWSER_HEAD, NEUTRINO_ICON_UPNP, CComponentsHeader::CC_BTN_MENU); @@ -1070,7 +1070,7 @@ void CUpnpBrowserGui::paintItem(std::vector *entry, unsigned int sele if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 1*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // second line if ((*entry)[selected].isdir) @@ -1093,7 +1093,7 @@ void CUpnpBrowserGui::paintItem(std::vector *entry, unsigned int sele if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 2*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 //third line tmp = ""; @@ -1112,7 +1112,7 @@ void CUpnpBrowserGui::paintItem(std::vector *entry, unsigned int sele if (xstart < 10) xstart = 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + 4 + 3*m_mheight, m_width - 20, - tmp, COL_MENUCONTENTSELECTED, 0, true); // UTF-8 + tmp, COL_MENUCONTENTSELECTED_TEXT, 0, true); // UTF-8 // Head @@ -1120,7 +1120,7 @@ void CUpnpBrowserGui::paintItem(std::vector *entry, unsigned int sele m_frameBuffer->paintBoxRel(m_x, m_y + m_title_height, m_width, m_theight, COL_MENUHEAD_PLUS_0); m_frameBuffer->paintIcon(NEUTRINO_ICON_UPNP, m_x + 7, m_y + m_title_height + 6); g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(m_x + 35, m_y + m_theight + m_title_height + 0, - m_width - 45, tmp, COL_MENUHEAD, 0, true); // UTF-8 + m_width - 45, tmp, COL_MENUHEAD_TEXT, 0, true); // UTF-8 ypos = m_y + m_title_height; if (m_theight > 26) ypos = (m_theight - 26) / 2 + m_y + m_title_height; @@ -1184,9 +1184,9 @@ void CUpnpBrowserGui::paintDetails(std::vector *entry, unsigned int i m_playing_entry_is_shown = true; g_Font[SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM]->RenderString(text_start, top + 1 * m_buttonHeight + 4, m_x + m_width - 8, m_playing_entry.title + " - " + - m_playing_entry.artist, COL_MENUCONTENTDARK, 0, true); // UTF-8 + m_playing_entry.artist, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 g_Font[SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM]->RenderString(text_start, - top + 2 * m_buttonHeight + 4, m_x + m_width - 8, m_playing_entry.album, COL_MENUCONTENTDARK, 0, true); // UTF-8 + top + 2 * m_buttonHeight + 4, m_x + m_width - 8, m_playing_entry.album, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 } } else @@ -1195,9 +1195,9 @@ void CUpnpBrowserGui::paintDetails(std::vector *entry, unsigned int i m_playing_entry_is_shown = false; g_Font[SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM]->RenderString(text_start, top + 1 * m_buttonHeight + 4, m_x + m_width - 8, (*entry)[index].title + " - " + - (*entry)[index].artist, COL_MENUCONTENTDARK, 0, true); // UTF-8 + (*entry)[index].artist, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 g_Font[SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM]->RenderString(text_start, - top + 2 * m_buttonHeight + 4, m_x + m_width - 8, (*entry)[index].album, COL_MENUCONTENTDARK, 0, true); // UTF-8 + top + 2 * m_buttonHeight + 4, m_x + m_width - 8, (*entry)[index].album, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 } //// printf("title = %s\n", (*entry)[selected].title.c_str()); // printf("artist = %s\n", (*entry)[selected].artist.c_str()); @@ -1236,7 +1236,7 @@ void CUpnpBrowserGui::paintDetails(std::vector *entry, unsigned int i text3 += " . "; xstart += g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text3); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2* fheight, width - 30- noch_len, text3, COL_MENUCONTENTDARK); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 2* fheight, width - 30- noch_len, text3, COL_MENUCONTENTDARK_TEXT); } if (!(text2.empty())) @@ -1244,12 +1244,12 @@ void CUpnpBrowserGui::paintDetails(std::vector *entry, unsigned int i while ( text2.find_first_of("[ -.+*#?=!$%&/]+") == 0 ) text2 = text2.substr( 1 ); text2 = text2.substr( 0, text2.find('\n') ); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ xstart, y+ height+ 5+ 2* fheight, width- xstart- 20- noch_len, text2, COL_MENUCONTENTDARK); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ xstart, y+ height+ 5+ 2* fheight, width- xstart- 20- noch_len, text2, COL_MENUCONTENTDARK_TEXT); } - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30 - seit_len, text1, COL_MENUCONTENTDARK); - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString (x+ width- 10- seit_len, y+ height+ 5+ fheight , seit_len, cSeit, COL_MENUCONTENTDARK, 0, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER]->RenderString(x+ width- 10- noch_len, y+ height+ 5+ 2* fheight- 2, noch_len, cNoch, COL_MENUCONTENTDARK, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ fheight, width - 30 - seit_len, text1, COL_MENUCONTENTDARK_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString (x+ width- 10- seit_len, y+ height+ 5+ fheight , seit_len, cSeit, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER]->RenderString(x+ width- 10- noch_len, y+ height+ 5+ 2* fheight- 2, noch_len, cNoch, COL_MENUCONTENTDARK_TEXT, 0, true); // UTF-8 #endif } @@ -1339,7 +1339,7 @@ void CUpnpBrowserGui::updateTimes(const bool force) paintDetails(NULL, 0, true); top = m_y + (m_height - m_info_height - 1 * m_buttonHeight) + m_buttonHeight + 4; m_frameBuffer->paintBoxRel(m_x + m_width - w - 15, top + 1, w + 4, m_buttonHeight, COL_MENUCONTENTDARK_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(m_x + m_width - w - 11, top + 1 + m_buttonHeight, w, play_time, COL_MENUCONTENTDARK); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(m_x + m_width - w - 11, top + 1 + m_buttonHeight, w, play_time, COL_MENUCONTENTDARK_TEXT); } } } diff --git a/src/gui/volumebar.cpp b/src/gui/volumebar.cpp index 6330ef150..b2287efb2 100644 --- a/src/gui/volumebar.cpp +++ b/src/gui/volumebar.cpp @@ -209,7 +209,7 @@ void CVolumeBar::initVolumeBarDigit() vb_digit = new CComponentsLabel(); vb_digit->setDimensionsAll(vb_digit_x, 0, vb_digit_w, height); - vb_digit->setTextColor(COL_MENUCONTENT); + vb_digit->setTextColor(COL_MENUCONTENT_TEXT); vb_digit->setCornerRadius(cornerRad()); vb_digit->setCornerType(CORNER_RIGHT); initVolumeBarDigitValue(); diff --git a/src/gui/widget/buttons.cpp b/src/gui/widget/buttons.cpp index 0a0edfa36..647bcc80b 100644 --- a/src/gui/widget/buttons.cpp +++ b/src/gui/widget/buttons.cpp @@ -53,7 +53,7 @@ * stuff below here was obviously not tested recently * vertical_paint optional, default value is false (horizontal) sets direction of painted buttons - * fcolor optional, default value is COL_INFOBAR_SHADOW, use it to render font with other color + * fcolor optional, default value is COL_INFOBAR_SHADOW_TEXT, use it to render font with other color * alt_buttontext optional, default NULL, overwrites button caption at definied buttonlabel id (see parameter alt_buttontext_id) with this text * alt_buttontext_id optional, default 0, means id from buttonlable struct which text you will change * show optional, default value is true (show button), if false, then no show and return the height of the button. @@ -68,7 +68,7 @@ int paintButtons( const int &x, const int &footerheight, std::string /* just to make sure nobody uses anything below */, bool vertical_paint, - const unsigned char fcolor, + const uint32_t fcolor, const char * alt_buttontext, const uint &buttontext_id, bool show, diff --git a/src/gui/widget/buttons.h b/src/gui/widget/buttons.h index d4a187ab6..f988dcfae 100644 --- a/src/gui/widget/buttons.h +++ b/src/gui/widget/buttons.h @@ -44,7 +44,7 @@ int paintButtons( const int &x, const int &footerheight = 0, std::string tmp = "", /* just to make sure compilation breaks */ bool vertical_paint = false, - const unsigned char fcolor = COL_INFOBAR_SHADOW, + const uint32_t fcolor = COL_INFOBAR_SHADOW_TEXT, const char * alt_buttontext = NULL, const uint &buttontext_id = 0, bool show = true, diff --git a/src/gui/widget/colorchooser.cpp b/src/gui/widget/colorchooser.cpp index d23fff11f..e2e060725 100644 --- a/src/gui/widget/colorchooser.cpp +++ b/src/gui/widget/colorchooser.cpp @@ -246,7 +246,7 @@ void CColorChooser::paint() { //frameBuffer->paintBoxRel(x,y, width,hheight, COL_MENUHEAD_PLUS_0); frameBuffer->paintBoxRel(x,y, width,hheight, COL_MENUHEAD_PLUS_0, RADIUS_MID, CORNER_TOP); //round - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+hheight, width, g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+hheight, width, g_Locale->getText(name), COL_MENUHEAD_TEXT, 0, true); // UTF-8 //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_MID, CORNER_BOTTOM);//round @@ -266,5 +266,5 @@ void CColorChooser::paintSlider(int px, int py, unsigned char *spos, const neutr 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, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px,py+mheight, width, g_Locale->getText(text), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } diff --git a/src/gui/widget/drawable.cpp b/src/gui/widget/drawable.cpp index bfb41c807..7435d9158 100644 --- a/src/gui/widget/drawable.cpp +++ b/src/gui/widget/drawable.cpp @@ -88,7 +88,7 @@ void DText::init() void DText::draw(CFBWindow *window, int x, int y, int width) { window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU], x, y + m_height, width, - m_text.c_str(), (CFBWindow::color_t)COL_MENUCONTENT, 0, true); // UTF-8 + m_text.c_str(), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void DText::print(void) @@ -136,7 +136,7 @@ void DPagebreak::draw(CFBWindow */*window*/, int /*x*/, int /*y*/, int /*width*/ { // window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU], // x, y + m_height, width, "", -// (CFBWindow::color_t)COL_MENUCONTENT, 0, true); // UTF-8 +// COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void DPagebreak::print(void) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index f195f2deb..3c9828678 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -189,11 +189,11 @@ void CHintBox::refresh(void) CFrameBuffer::getInstance()->getIconSize(iconfile.c_str(), &iw, &ih); //window->paintIcon(iconfile.c_str(), 8, 5); window->paintIcon(iconfile.c_str(), 10, 0, theight); - //window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, g_Locale->getText(caption), (CFBWindow::color_t)COL_MENUHEAD, 0, true); // UTF-8 - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, caption, (CFBWindow::color_t)COL_MENUHEAD, 0, true); // UTF-8 + //window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, g_Locale->getText(caption), COL_MENUHEAD_TEXT, 0, true); // UTF-8 + window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], iw+20, theight, width - 20-iw, caption, COL_MENUHEAD_TEXT, 0, true); // UTF-8 } else - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], 10, theight, width - 10, caption, (CFBWindow::color_t)COL_MENUHEAD, 0, true); // UTF-8 + window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], 10, theight, width - 10, caption, COL_MENUHEAD_TEXT, 0, true); // UTF-8 //window->paintBoxRel(0, theight, width, (entries_per_page + 1) * fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0); window->paintBoxRel(0, theight, width, (entries_per_page + 1) * fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);//round @@ -202,7 +202,7 @@ void CHintBox::refresh(void) int ypos = theight + (fheight >> 1); for (std::vector::const_iterator it = line.begin() + (entries_per_page * current_page); ((it != line.end()) && (count > 0)); ++it, count--) - window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU], textStartX, (ypos += fheight), width, *it, (CFBWindow::color_t)COL_MENUCONTENT, 0, true); // UTF-8 + window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU], textStartX, (ypos += fheight), width, *it, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 if (entries_per_page < line.size()) { diff --git a/src/gui/widget/hintboxext.cpp b/src/gui/widget/hintboxext.cpp index 8684e6899..040e525f9 100644 --- a/src/gui/widget/hintboxext.cpp +++ b/src/gui/widget/hintboxext.cpp @@ -257,7 +257,7 @@ void CHintBoxExt::refresh(bool toround) x_text = x_offset; // title text - m_window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], x_text, m_theight, m_width, title_text.c_str(), (CFBWindow::color_t)COL_MENUHEAD, 0, true); // UTF-8 + m_window->RenderString(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE], x_text, m_theight, m_width, title_text.c_str(), COL_MENUHEAD_TEXT, 0, true); // UTF-8 // background of text panel m_window->paintBoxRel(0, m_theight, m_width, (m_maxEntriesPerPage + 1) * m_fheight, (CFBWindow::color_t)COL_MENUCONTENT_PLUS_0, toround ? RADIUS_LARGE : 0, CORNER_BOTTOM);//round diff --git a/src/gui/widget/keychooser.cpp b/src/gui/widget/keychooser.cpp index 7518cd60b..41f325273 100644 --- a/src/gui/widget/keychooser.cpp +++ b/src/gui/widget/keychooser.cpp @@ -173,9 +173,9 @@ void CKeyChooserItem::paint() frameBuffer->paintBoxRel(x, y , width, hheight , COL_MENUHEAD_PLUS_0 , RADIUS_LARGE, CORNER_TOP);//round frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);//round - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ 10, y+ hheight, width, g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ 10, y+ hheight, width, g_Locale->getText(name), COL_MENUHEAD_TEXT, 0, true); // UTF-8 //paint msg... - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT1), COL_MENUCONTENT, 0, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight* 2, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT2), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT1), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, y+ hheight+ mheight* 2, width, g_Locale->getText(LOCALE_KEYCHOOSER_TEXT2), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } diff --git a/src/gui/widget/listbox.cpp b/src/gui/widget/listbox.cpp index 9e057e72a..57d37cfee 100644 --- a/src/gui/widget/listbox.cpp +++ b/src/gui/widget/listbox.cpp @@ -83,7 +83,7 @@ void CListBox::paintHead() { //frameBuffer->paintBoxRel(x,y, width,theight+0, COL_MENUHEAD_PLUS_0); frameBuffer->paintBoxRel(x, y, width, theight+0, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, width, caption.c_str() , COL_MENUHEAD, 0, true); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, width, caption.c_str() , COL_MENUHEAD_TEXT, 0, true); } void CListBox::paintFoot() @@ -94,16 +94,16 @@ void CListBox::paintFoot() frameBuffer->paintHLine(x, x+width, y, COL_INFOBAR_SHADOW_PLUS_0); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, x+width- 4* ButtonWidth+ 8, y+height+1); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 4* ButtonWidth+ 38, y+height+24 - 2, width, "edit", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 4* ButtonWidth+ 38, y+height+24 - 2, width, "edit", COL_INFOBAR_TEXT); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, x+width- 3* ButtonWidth+ 8, y+height+4); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 3* ButtonWidth+ 29, y+height+24 - 2, width- 26, "add", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 3* ButtonWidth+ 29, y+height+24 - 2, width- 26, "add", COL_INFOBAR_TEXT); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_RED, x+width- 2* ButtonWidth+ 8, y+height+4); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 2* ButtonWidth+ 29, y+height+24 - 2, width- 26, "remove", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width- 2* ButtonWidth+ 29, y+height+24 - 2, width- 26, "remove", COL_INFOBAR_TEXT); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_HOME, x+width - ButtonWidth+ 8, y+height+1); - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width - ButtonWidth+ 38, y+height+24 - 2, width, "ready", COL_INFOBAR); + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(x+width - ButtonWidth+ 38, y+height+24 - 2, width, "ready", COL_INFOBAR_TEXT); } void CListBox::paintItem(int pos) @@ -130,17 +130,17 @@ void CListBox::paintItem(unsigned int /*itemNr*/, int paintNr, bool pselected) { int ypos = y+ theight + paintNr*getItemHeight(); - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pselected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } diff --git a/src/gui/widget/listframe.cpp b/src/gui/widget/listframe.cpp index 437cdd0c9..fe8d979af 100644 --- a/src/gui/widget/listframe.cpp +++ b/src/gui/widget/listframe.cpp @@ -72,11 +72,11 @@ //#define LIST_BACKGROUND_COLOR_SELECTED ((CFBWindow::color_t)COL_MENUCONTENT_PLUS_1) #define LIST_BACKGROUND_COLOR_SELECTED ((CFBWindow::color_t)COL_MENUCONTENTSELECTED_PLUS_0) -#define TITLE_FONT_COLOR COL_MENUHEAD -#define HEADER_LIST_FONT_COLOR COL_MENUCONTENT -#define LIST_FONT_COLOR COL_MENUCONTENT -//#define LIST_FONT_COLOR_SELECTED COL_MENUCONTENT -#define LIST_FONT_COLOR_SELECTED COL_MENUCONTENTSELECTED +#define TITLE_FONT_COLOR COL_MENUHEAD_TEXT +#define HEADER_LIST_FONT_COLOR COL_MENUCONTENT_TEXT +#define LIST_FONT_COLOR COL_MENUCONTENT_TEXT +//#define LIST_FONT_COLOR_SELECTED COL_MENUCONTENT_TEXT +#define LIST_FONT_COLOR_SELECTED COL_MENUCONTENTSELECTED_TEXT #define FONT_LIST g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO2] #define FONT_HEADER_LIST g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1] @@ -418,7 +418,7 @@ void CListFrame::refreshList(void) line < m_nNrOfLines && line < m_nCurrentLine + m_nLinesPerPage; line++) { - int color = LIST_FONT_COLOR; + uint32_t color = LIST_FONT_COLOR; // draw line if(line == m_nSelectedLine && m_showSelection == true) { @@ -461,7 +461,7 @@ void CListFrame::refreshLine(int line) if((line < m_nCurrentLine) && (line > m_nCurrentLine + m_nLinesPerPage)) return; - uint8_t color; + uint32_t color; int rel_line = line - m_nCurrentLine; int y = m_cFrameListRel.iY + TEXT_BORDER_WIDTH + (rel_line*m_nFontListHeight); diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 0fb4a3972..9d3cc6aad 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -74,7 +74,7 @@ void CMenuItem::init(const int X, const int Y, const int DX, const int OFFX) dx = DX; offx = OFFX; name_start_x = x + offx + icon_frame_w; - item_color = COL_MENUCONTENT; + item_color = COL_MENUCONTENT_TEXT; item_bgcolor = COL_MENUCONTENT_PLUS_0; } @@ -100,17 +100,17 @@ void CMenuItem::initItemColors(const bool select_mode) { if (select_mode) { - item_color = COL_MENUCONTENTSELECTED; + item_color = COL_MENUCONTENTSELECTED_TEXT; item_bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else if (!active) { - item_color = COL_MENUCONTENTINACTIVE; + item_color = COL_MENUCONTENTINACTIVE_TEXT; item_bgcolor = COL_MENUCONTENTINACTIVE_PLUS_0; } else { - item_color = COL_MENUCONTENT; + item_color = COL_MENUCONTENT_TEXT; item_bgcolor = COL_MENUCONTENT_PLUS_0; } } @@ -1910,12 +1910,12 @@ int CMenuSeparator::paint(bool selected) if ((type & SUB_HEAD)) { - item_color = COL_MENUHEAD; + item_color = COL_MENUHEAD_TEXT; item_bgcolor = COL_MENUHEAD_PLUS_0; } else { - item_color = COL_MENUCONTENTINACTIVE; + item_color = COL_MENUCONTENTINACTIVE_TEXT; item_bgcolor = COL_MENUCONTENT_PLUS_0; } diff --git a/src/gui/widget/messagebox.cpp b/src/gui/widget/messagebox.cpp index f70dab35d..747af9503 100644 --- a/src/gui/widget/messagebox.cpp +++ b/src/gui/widget/messagebox.cpp @@ -156,10 +156,10 @@ void CMessageBox::paintButtons() for (i = 0; i < ButtonCount; i++) { if (Buttons[i].def) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_INFOBAR_SHADOW; + color = COL_INFOBAR_SHADOW_TEXT; bgcolor = COL_INFOBAR_SHADOW_PLUS_0; } CFrameBuffer::getInstance()->getIconSize(Buttons[i].icon, &iw, &ih); diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index a4f88ca16..9b8426251 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -328,7 +328,7 @@ void CMsgBox::initFramesRel(void) ////////////////////////////////////////////////////////////////////// void CMsgBox::refreshFoot(void) { - int color,bgcolor; + uint32_t color, bgcolor; if( !(m_nMode & FOOT)) return; // draw the background first @@ -351,12 +351,12 @@ void CMsgBox::refreshFoot(void) { if (m_nResult == mbrYes) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_INFOBAR_SHADOW; + color = COL_INFOBAR_SHADOW_TEXT; bgcolor = COL_INFOBAR_SHADOW_PLUS_0; } m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor, RADIUS_MID); @@ -372,12 +372,12 @@ void CMsgBox::refreshFoot(void) { if (m_nResult == mbrNo) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_INFOBAR_SHADOW; + color = COL_INFOBAR_SHADOW_TEXT; bgcolor = COL_INFOBAR_SHADOW_PLUS_0; } @@ -394,12 +394,12 @@ void CMsgBox::refreshFoot(void) { if (m_nResult >= mbrCancel) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_INFOBAR_SHADOW; + color = COL_INFOBAR_SHADOW_TEXT; bgcolor = COL_INFOBAR_SHADOW_PLUS_0; } @@ -441,7 +441,7 @@ void CMsgBox::refreshTitle(void) m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY, m_cBoxFrameTitleRel.iWidth - TITLE_ICON_WIDTH + TEXT_BORDER_WIDTH, m_cTitle.c_str(), - (CFBWindow::color_t)COL_MENUHEAD, + COL_MENUHEAD_TEXT, 0, true); // UTF-8 } @@ -454,7 +454,7 @@ void CMsgBox::refreshTitle(void) m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY, m_cBoxFrameTitleRel.iWidth - TEXT_BORDER_WIDTH, m_cTitle.c_str(), - (CFBWindow::color_t)COL_MENUHEAD, + COL_MENUHEAD_TEXT, 0, true); // UTF-8 } diff --git a/src/gui/widget/progresswindow.cpp b/src/gui/widget/progresswindow.cpp index 7d587fe47..59b29f8a9 100644 --- a/src/gui/widget/progresswindow.cpp +++ b/src/gui/widget/progresswindow.cpp @@ -128,7 +128,7 @@ void CProgressWindow::showStatusMessageUTF(const std::string & text) { statusText = text; frameBuffer->paintBox(x, statusTextY-mheight, x+width, statusTextY, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+10, statusTextY, width-20, text, COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+10, statusTextY, width-20, text, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 #ifdef VFD_UPDATE CVFD::getInstance()->showProgressBar2(-1,text.c_str()); // set local text in VFD @@ -152,7 +152,7 @@ void CProgressWindow::paint() int ypos=y; frameBuffer->paintBoxRel(x, ypos, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); if (caption != NONEXISTANT_LOCALE) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, ypos+ hheight, width - 10, g_Locale->getText(caption), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, ypos+ hheight, width - 10, g_Locale->getText(caption), COL_MENUHEAD_TEXT, 0, true); // UTF-8 frameBuffer->paintBoxRel(x, ypos+ hheight, width, height- hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); ypos+= hheight + (mheight >>1); @@ -164,7 +164,7 @@ void CProgressWindow::paint() showLocalStatus(0); ypos+= mheight+10; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width- 10, g_Locale->getText(LOCALE_FLASHUPDATE_GLOBALPROGRESS), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width- 10, g_Locale->getText(LOCALE_FLASHUPDATE_GLOBALPROGRESS), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 ypos+= mheight; globalstatusY = ypos+ mheight-20; diff --git a/src/gui/widget/stringinput.cpp b/src/gui/widget/stringinput.cpp index 9220b5f61..b4c4a440d 100644 --- a/src/gui/widget/stringinput.cpp +++ b/src/gui/widget/stringinput.cpp @@ -560,7 +560,7 @@ void CStringInput::paint(bool sms) icol_o = icol_w + (offset/2); } - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2)+ icol_o, y+ hheight, width- offset- icol_o, head ? head : g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2)+ icol_o, y+ hheight, width- offset- icol_o, head ? head : g_Locale->getText(name), COL_MENUHEAD_TEXT, 0, true); // UTF-8 int tmp_y = y+ hheight+ offset+ input_h+ offset; if ((hint_1 != NONEXISTANT_LOCALE) || (hint_2 != NONEXISTANT_LOCALE)) @@ -568,12 +568,12 @@ void CStringInput::paint(bool sms) if (hint_1 != NONEXISTANT_LOCALE) { tmp_y += iheight; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } if (hint_2 != NONEXISTANT_LOCALE) { tmp_y += iheight; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } tmp_y += offset; } @@ -582,7 +582,7 @@ void CStringInput::paint(bool sms) if (sms) { frameBuffer->getIconSize(NEUTRINO_ICON_NUMERIC_PAD, &icol_w, &icol_h); - frameBuffer->paintIcon(NEUTRINO_ICON_NUMERIC_PAD, x + (width/2) - (icol_w/2), tmp_y, 0, COL_MENUCONTENT); + frameBuffer->paintIcon(NEUTRINO_ICON_NUMERIC_PAD, x + (width/2) - (icol_w/2), tmp_y, 0, COL_MENUCONTENT_TEXT); //buttonbar ::paintButtons(x, y+ hheight+ bheight, width, CStringInputSMSButtonsCount, CStringInputSMSButtons, width, fheight); @@ -606,17 +606,17 @@ void CStringInput::paintChar(int pos, const char c) char ch[2] = {c, 0}; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (pos == selected) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } diff --git a/src/gui/widget/stringinput_ext.cpp b/src/gui/widget/stringinput_ext.cpp index 9e57bd8ea..af6c9b410 100644 --- a/src/gui/widget/stringinput_ext.cpp +++ b/src/gui/widget/stringinput_ext.cpp @@ -301,7 +301,7 @@ void CExtendedInput::paint() frameBuffer->paintBoxRel(x, y, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); frameBuffer->paintBoxRel(x, y + hheight, width, bheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2), y+ hheight, width- offset, g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2), y+ hheight, width- offset, g_Locale->getText(name), COL_MENUHEAD_TEXT, 0, true); // UTF-8 int tmp_y = y+ hheight+ offset+ input_h+ offset; @@ -310,12 +310,12 @@ void CExtendedInput::paint() if (hint_1 != NONEXISTANT_LOCALE) { tmp_y += iheight; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } if (hint_2 != NONEXISTANT_LOCALE) { tmp_y += iheight; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } tmp_y += offset; } @@ -355,17 +355,17 @@ void CExtendedInput_Item_Char::paint(int x, int y, bool focusGained ) char ch[2] = {*data, 0}; - uint8_t color; + fb_pixel_t color; fb_pixel_t bgcolor; if (focusGained) { - color = COL_MENUCONTENTSELECTED; + color = COL_MENUCONTENTSELECTED_TEXT; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; } else { - color = COL_MENUCONTENT; + color = COL_MENUCONTENT_TEXT; bgcolor = COL_MENUCONTENT_PLUS_0; } diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index bd5af4723..342cc64bb 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -174,7 +174,7 @@ void CTextBox::initVar(void) m_nMinWidth = MIN_WINDOW_WIDTH; m_textBackgroundColor = COL_MENUCONTENT_PLUS_0; - m_textColor = COL_MENUCONTENT; + m_textColor = COL_MENUCONTENT_TEXT; m_nPaintBackground = true; m_nBgRadius = 0; m_nBgRadiusType = CORNER_ALL; From 20fd26a65db8d7cc39dd49d75ddaa9fe9ed3a474 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 13 Jul 2013 17:47:29 +0200 Subject: [PATCH 038/142] Fontrenderer: Use real color values for Renderstring() --- src/driver/fontrenderer.cpp | 231 ++++++++++++++++++------------------ src/driver/fontrenderer.h | 6 +- 2 files changed, 119 insertions(+), 118 deletions(-) diff --git a/src/driver/fontrenderer.cpp b/src/driver/fontrenderer.cpp index 970124b73..3c03f14c6 100644 --- a/src/driver/fontrenderer.cpp +++ b/src/driver/fontrenderer.cpp @@ -37,10 +37,6 @@ #include #include -/* Drawing pixels is actually faster without the GXA accelerator (wich OTOH is - faster for drawing lines, so disable it here. */ -#undef USE_NEVIS_GXA - FT_Error FBFontRenderClass::myFTC_Face_Requester(FTC_FaceID face_id, FT_Library /*library*/, FT_Pointer request_data, @@ -367,7 +363,21 @@ int UTF8ToUnicode(const char * &text, const bool utf8_encoded) // returns -1 on return unicode_value; } -void Font::RenderString(int x, int y, const int width, const char *text, const unsigned char color, const int boxheight, const bool utf8_encoded) +#define F_MUL 0x7FFF + +void Font::paintFontPixel(fb_pixel_t *td, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, fb_pixel_t fg_trans) +{ + int korr_r = ((bg_col & 0x00FF0000) >> 16) - fg_red; + int korr_g = ((bg_col & 0x0000FF00) >> 8) - fg_green; + int korr_b = (bg_col & 0x000000FF) - fg_blue; + + *td = fg_trans | + (((fg_red + ((korr_r*faktor)/F_MUL)) << 16) & 0x00FF0000) | + (((fg_green + ((korr_g*faktor)/F_MUL)) << 8) & 0x0000FF00) | + ((fg_blue + ((korr_b*faktor)/F_MUL)) & 0x000000FF); +} + +void Font::RenderString(int x, int y, const int width, const char *text, const fb_pixel_t color, const int boxheight, const bool utf8_encoded, const bool useFullBg) { if (!frameBuffer->getActive()) return; @@ -430,57 +440,61 @@ void Font::RenderString(int x, int y, const int width, const char *text, const u int lastindex=0; // 0 == missing glyph (never has kerning values) FT_Vector kerning; int pen1=-1; // "pen" positions for kerning, pen2 is "x" + static fb_pixel_t old_bgcolor = 0, old_fgcolor = 0; + static uint8_t fg_red = 0, fg_green = 0, fg_blue = 0; + static bool olduseFullBg = false; + static fb_pixel_t colors[256] = {0}; + static fb_pixel_t fg_trans[256] = {0}; + static int faktor[256] = {0}; + static bool fontRecsInit = false; + fb_pixel_t bg_color = 1; + fb_pixel_t fg_color = color; - static fb_pixel_t oldbgcolor = 0, oldfgcolor = 0; - static fb_pixel_t colors[256]={0}; + if (!useFullBg) { + /* the GXA seems to do it's job asynchonously, so we need to wait until + it's ready, otherwise the font will sometimes "be overwritten" with + background color or bgcolor will be wrong */ + frameBuffer->waitForIdle("Font::RenderString 1"); + /* fetch bgcolor from framebuffer, using lower left edge of the font... */ + bg_color = *(frameBuffer->getFrameBufferPointer() + x + + y * frameBuffer->getStride() / sizeof(fb_pixel_t)); + } + else + bg_color = 0; - // fb_pixel_t bgcolor = frameBuffer->realcolor[color]; - uint8_t fgindex = color; /* index of font color in the palette */ - if (color > COL_BLACK0 && color < 254) /* bigger than 254 would result in > 255 */ - fgindex = ((((int)color) + 2) | 7) - 2; /* no idea what this does exactly... */ - fb_pixel_t fgcolor = frameBuffer->realcolor[fgindex]; -#ifndef USE_NEVIS_GXA - /* the GXA seems to do it's job asynchonously, so we need to wait until - it's ready, otherwise the font will sometimes "be overwritten" with - background color or bgcolor will be wrong */ - frameBuffer->waitForIdle("Font::RenderString"); -#endif - /* fetch bgcolor from framebuffer, using lower left edge of the font... */ - fb_pixel_t bgcolor = *(frameBuffer->getFrameBufferPointer() + x + - y * frameBuffer->getStride() / sizeof(fb_pixel_t)); + if ((old_fgcolor != fg_color) || (old_bgcolor != bg_color) || (olduseFullBg != useFullBg) || !fontRecsInit) { + old_bgcolor = bg_color; + old_fgcolor = fg_color; + olduseFullBg = useFullBg; + fontRecsInit = true; - if((oldbgcolor != bgcolor) || (oldfgcolor != fgcolor)) { + uint8_t fgt; + fgt = (fg_color & 0xFF000000) >> 24; + fg_red = (fg_color & 0x00FF0000) >> 16; + fg_green = (fg_color & 0x0000FF00) >> 8; + fg_blue = fg_color & 0x000000FF; - oldbgcolor = bgcolor; - oldfgcolor = fgcolor; - t_fb_var_screeninfo * screeninfo = frameBuffer->getScreenInfo(); - int rl = screeninfo->red.length; - int ro = screeninfo->red.offset; - int gl = screeninfo->green.length; - int go = screeninfo->green.offset; - int bl = screeninfo->blue.length; - int bo = screeninfo->blue.offset; - int tl = screeninfo->transp.length; - int to = screeninfo->transp.offset; - int fgr = (((int)fgcolor >> ro) & ((1 << rl) - 1)); - int fgg = (((int)fgcolor >> go) & ((1 << gl) - 1)); - int fgb = (((int)fgcolor >> bo) & ((1 << bl) - 1)); - int fgt = (((int)fgcolor >> to) & ((1 << tl) - 1)); - int deltar = (((int)bgcolor >> ro) & ((1 << rl) - 1)) - fgr; - int deltag = (((int)bgcolor >> go) & ((1 << gl) - 1)) - fgg; - int deltab = (((int)bgcolor >> bo) & ((1 << bl) - 1)) - fgb; - int deltat = (((int)bgcolor >> to) & ((1 << tl) - 1)) - fgt; + int korr_r=0, korr_g=0, korr_b=0; + if (!useFullBg) { + korr_r = ((bg_color & 0x00FF0000) >> 16) - fg_red; + korr_g = ((bg_color & 0x0000FF00) >> 8) - fg_green; + korr_b = (bg_color & 0x000000FF) - fg_blue; + } + for (int i = 0; i <= 0xFF; i++) { + int _faktor = ((0xFF - i) * F_MUL) / 0xFF; + fb_pixel_t _fg_trans = (g_settings.contrast_fonts && (i > 128)) ? 0xFF000000 : (fgt << 24) & 0xFF000000; - for (int i = 0; i < 256; i++) { - colors[255 - i] = - ((((fgr + deltar * i / 255) & ((1 << rl) - 1)) << ro) | - (((fgg + deltag * i / 255) & ((1 << gl) - 1)) << go) | - (((fgb + deltab * i / 255) & ((1 << bl) - 1)) << bo) | - (((fgt + deltat * i / 255) & ((1 << tl) - 1)) << to)); - /* FIXME must be better solution */ - if(g_settings.contrast_fonts && ((255-i) > 128)) - colors[255 - i] |= 0xFF << to; + if (useFullBg) { + faktor[i] = _faktor; + fg_trans[i] = _fg_trans; + } + else { + colors[i] = (_fg_trans | + (((fg_red + ((korr_r*_faktor)/F_MUL)) << 16) & 0x00FF0000) | + (((fg_green + ((korr_g*_faktor)/F_MUL)) << 8) & 0x0000FF00) | + ((fg_blue + ((korr_b*_faktor)/F_MUL)) & 0x000000FF)); + } } } @@ -536,98 +550,83 @@ void Font::RenderString(int x, int y, const int width, const char *text, const u if (x + glyph->xadvance + spread_by > left + width) break; - #ifndef USE_NEVIS_GXA int stride = frameBuffer->getStride(); int ap=(x + glyph->left) * sizeof(fb_pixel_t) + stride * (y - glyph->top); uint8_t * d = ((uint8_t *)frameBuffer->getFrameBufferPointer()) + ap; - #endif uint8_t * s = glyph->buffer; int w = glyph->width; int h = glyph->height; int pitch = glyph->pitch; - #ifndef USE_NEVIS_GXA - if(ap>-1){ - #endif - for (int ay=0; ay-1) { + fb_pixel_t *bg_buf = NULL; + if (useFullBg) { + // save background of the char + bg_buf = new fb_pixel_t[h * (w+spread_by)]; + uint8_t *pos = d; + fb_pixel_t *bkpos = bg_buf; + /* the GXA seems to do it's job asynchonously, so we need to wait until + it's ready, otherwise the font will sometimes "be overwritten" with + background color or bgcolor will be wrong */ + frameBuffer->waitForIdle("Font::RenderString 2"); + for (int j = 0; j < h; j++) { + fb_pixel_t *dest = (fb_pixel_t*)pos; + for (int i = 0; i < (w + spread_by); i++) + *(bkpos++) = *(dest++); + pos += stride; + } + } + + for (int ay = 0; ay < h; ay++) { fb_pixel_t * td = (fb_pixel_t *)d; - #endif - int ax; - for (ax=0; ax < w + spread_by; ax++) - { - if (stylemodifier != Font::Embolden) - { - #ifdef USE_NEVIS_GXA - /* not nice (and also slower), but currently the easiest way to prevent visible errors */ - frameBuffer->paintPixel(x + glyph->left + ax, y - glyph->top + ay, colors[*s++]); - #else - /* do not paint the backgroundcolor, see below */ - //if (colors[*s] != bgcolor) - // from code above bgcolor index should be always 0 - if(*s != 0) - *td = colors[*s]; - td++; s++; - #endif + for (ax = 0; ax < w + spread_by; ax++) { + if (stylemodifier != Font::Embolden) { + /* do not paint the backgroundcolor (*s = 0) */ + if(*s != 0) { + if (useFullBg) + paintFontPixel(td, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[*s], fg_trans[*s]); + else + *td = colors[*s]; + } } - else - { - int start, end; + else { int lcolor = -1; - - if (ax < w) - start = 0; - else - start = ax - w + 1; - - if (ax < spread_by) - end = ax + 1; - else - end = spread_by + 1; - + int start = (ax < w) ? 0 : ax - w + 1; + int end = (ax < spread_by) ? ax + 1 : spread_by + 1; for (int i = start; i < end; i++) if (lcolor < *(s - i)) lcolor = *(s - i); - #ifdef USE_NEVIS_GXA - frameBuffer->paintPixel(x + glyph->left + ax, y - glyph->top + ay, colors[lcolor]); - #else - /* we make the font "transparent" by not painting the background color - colored boxes are painted beneath the fonts anyway - note that this is not totally correct, because of subpixel hinting etc, - but that should be barely visible in reality ;) */ - //if (colors[lcolor] != bgcolor) - // from code above bgcolor index should be always 0 - if (lcolor != 0) - *td = colors[lcolor]; - td++; - #endif - s++; + /* do not paint the backgroundcolor (lcolor = 0) */ + if(lcolor != 0) { + if (useFullBg) + paintFontPixel(td, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[lcolor], fg_trans[lcolor]); + else + *td = colors[lcolor]; + } } + td++; s++; } - s += pitch- ax; - #ifndef USE_NEVIS_GXA + s += pitch - ax; d += stride; - #endif } - #ifndef USE_NEVIS_GXA + if (bg_buf != NULL) + delete[] bg_buf; + bg_buf = NULL; } - #endif - x+=glyph->xadvance+1; - //x+=glyph->xadvance; - if(pen1>x) - x=pen1; - pen1=x; - lastindex=index; + x += glyph->xadvance + 1; + if (pen1 > x) + x = pen1; + pen1 = x; + lastindex = index; } //printf("RenderStat: %d %d %d \n", renderer->cacheManager->num_nodes, renderer->cacheManager->num_bytes, renderer->cacheManager->max_bytes); pthread_mutex_unlock( &renderer->render_mutex ); frameBuffer->checkFbArea(x, y-height, width, height, false); } -void Font::RenderString(int x, int y, const int width, const std::string & text, const unsigned char color, const int boxheight, const bool utf8_encoded) +void Font::RenderString(int x, int y, const int width, const std::string & text, const fb_pixel_t color, const int boxheight, const bool utf8_encoded, const bool useFullBg) { - RenderString(x, y, width, text.c_str(), color, boxheight, utf8_encoded); + RenderString(x, y, width, text.c_str(), color, boxheight, utf8_encoded, useFullBg); } int Font::getRenderWidth(const char *text, const bool utf8_encoded) diff --git a/src/driver/fontrenderer.h b/src/driver/fontrenderer.h index e10baf6dc..954875add 100644 --- a/src/driver/fontrenderer.h +++ b/src/driver/fontrenderer.h @@ -54,6 +54,8 @@ class Font int height,DigitHeight,DigitOffset,ascender,descender,upper,lower; int fontwidth; + inline void paintFontPixel(fb_pixel_t *td, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, fb_pixel_t fg_trans); + public: enum fontmodifier { @@ -62,8 +64,8 @@ class Font }; fontmodifier stylemodifier; - void RenderString(int x, int y, const int width, const char * text, const unsigned char color, const int boxheight = 0, const bool utf8_encoded = false); - void RenderString(int x, int y, const int width, const std::string & text, const unsigned char color, const int boxheight = 0, const bool utf8_encoded = false); + void RenderString(int x, int y, const int width, const char * text, const fb_pixel_t color, const int boxheight = 0, const bool utf8_encoded = false, const bool useFullBg = false); + void RenderString(int x, int y, const int width, const std::string & text, const fb_pixel_t color, const int boxheight = 0, const bool utf8_encoded = false, const bool useFullBg = false); int getRenderWidth(const char * text, const bool utf8_encoded = false); int getRenderWidth(const std::string & text, const bool utf8_encoded = false); From 25c40a63dd5d4ed6efd09ee535dfa737e5951dfe Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 7 Jul 2013 18:35:25 +0200 Subject: [PATCH 039/142] CComponentsText: remove delete of CBox() object Obtain of one instance of CBox() should working just as like a new instance. --- src/gui/components/cc_item_text.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index 33d828b99..e5f758398 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -118,20 +118,15 @@ void CComponentsText::initCCText() //define height from font size height = max(height, ct_font->getHeight()); - //text box dimensions - if (ct_box== NULL){ - //ensure that we have a new instance - delete ct_box; - ct_box = NULL; - } - //using of real x/y values to paint images if this text object is bound in a parent form int tx = x, ty = y; if (cc_parent){ tx = cc_xr; ty = cc_yr; } - ct_box = new CBox(); + //init text box dimensions + if (ct_box == NULL) + ct_box = new CBox(); ct_box->iX = tx+fr_thickness; ct_box->iY = ty+fr_thickness; ct_box->iWidth = width-2*fr_thickness; From a6c43a62bd34c315790e11aee9f84459c260059f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 12 Jul 2013 09:25:13 +0200 Subject: [PATCH 040/142] CComponentsText: try to use an inherited version of CBox class It's a partial solution to use full functionality for size handling of CTextBox in CComponentsText. --- src/gui/components/cc_item_text.cpp | 30 ++++++++++++++--------------- src/gui/components/cc_item_text.h | 4 +--- src/gui/widget/textbox.h | 6 +++++- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index e5f758398..2e43fff4b 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -90,12 +90,16 @@ void CComponentsText::initVarText() //CComponentsText ct_font = NULL; - ct_box = NULL; ct_textbox = NULL; ct_text = ""; ct_old_text = ct_text; ct_text_mode = CTextBox::AUTO_WIDTH; + pX = &x; + pY = &y; + pHeight = &height; + pWidth = &width; + /* we need a minimal borderwith of 1px because the edge-smoothing (or fontrenderer?) otherwise will paint single pixels outside the defined area. e.g. 'j' is leaving such residues */ @@ -125,12 +129,10 @@ void CComponentsText::initCCText() ty = cc_yr; } //init text box dimensions - if (ct_box == NULL) - ct_box = new CBox(); - ct_box->iX = tx+fr_thickness; - ct_box->iY = ty+fr_thickness; - ct_box->iWidth = width-2*fr_thickness; - ct_box->iHeight = height-2*fr_thickness; + this->iX/*x*/ = tx+fr_thickness; + this->iY/*y*/ = ty+fr_thickness; + this->iWidth/*width*/ = width-2*fr_thickness; + this->iHeight/*height*/ = height-2*fr_thickness; //init textbox if (ct_textbox == NULL) @@ -139,30 +141,26 @@ void CComponentsText::initCCText() //set text box properties ct_textbox->setTextFont(ct_font); ct_textbox->setTextMode(ct_text_mode); - ct_textbox->setWindowPos(ct_box); + ct_textbox->setWindowPos(this); ct_textbox->setTextBorderWidth(ct_text_Hborder, ct_text_Vborder); ct_textbox->enableBackgroundPaint(ct_paint_textbg); ct_textbox->setBackGroundColor(col_body); ct_textbox->setBackGroundRadius(corner_rad-fr_thickness, corner_type); ct_textbox->setTextColor(ct_col_text); - ct_textbox->setWindowMaxDimensions(ct_box->iWidth, ct_box->iHeight); - ct_textbox->setWindowMinDimensions(ct_box->iWidth, ct_box->iHeight); + ct_textbox->setWindowMaxDimensions(width, height); + ct_textbox->setWindowMinDimensions(width, height); //send text to CTextBox object, but paint text only if text has changed or force option is enabled if ((ct_old_text != ct_text) || ct_force_text_paint) - ct_text_sent = ct_textbox->setText(&ct_text, ct_box->iWidth); + ct_text_sent = ct_textbox->setText(&ct_text, this->iWidth); ct_old_text = ct_text; #ifdef DEBUG_CC - printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, w %d, h %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), ct_box->iX, ct_box->iY, ct_box->iWidth, ct_box->iHeight); + printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, w %d, h %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), this->iX, this->iY, this->iWidth, this->iHeight); #endif } void CComponentsText::clearCCText() { - if (ct_box) - delete ct_box; - ct_box = NULL; - if (ct_textbox) delete ct_textbox; ct_textbox = NULL; diff --git a/src/gui/components/cc_item_text.h b/src/gui/components/cc_item_text.h index 0e1815c9e..aba86c1fe 100644 --- a/src/gui/components/cc_item_text.h +++ b/src/gui/components/cc_item_text.h @@ -38,13 +38,11 @@ Handling of text parts based up CTextBox attributes and methodes. CComponentsText provides a interface to the embedded CTextBox object. */ -class CComponentsText : public CComponentsItem +class CComponentsText : public CComponentsItem, public CBox { protected: ///object: CTextBox object CTextBox * ct_textbox; - ///object: CBox object - CBox * ct_box; ///object: Fontrenderer object Font * ct_font; diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index feada28aa..210db2717 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -68,7 +68,11 @@ class CBox { - private: + protected: + int *pX; + int *pY; + int *pWidth; + int *pHeight; public: /* Constructor */ From 71423089b0598b54cd7dface1d2819d64fb184a1 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 11 Jul 2013 11:10:16 +0200 Subject: [PATCH 041/142] CZapitChannel: use unsigned char instead size_t This removes some annoying warnings with specific compiler flags. --- src/gui/components/cc_item_progressbar.cpp | 2 +- src/zapit/include/zapit/channel.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/components/cc_item_progressbar.cpp b/src/gui/components/cc_item_progressbar.cpp index d2b77720e..2ffdf1abe 100644 --- a/src/gui/components/cc_item_progressbar.cpp +++ b/src/gui/components/cc_item_progressbar.cpp @@ -202,7 +202,7 @@ void CProgressBar::paintAdvanced() if (pb_active_width > pb_last_width) { int step, off; int b = 0; - uint8_t diff = 0; + uint32_t diff = 0; for (i = 0; (i < rd) && (i < maxi); i++) { diff = i * 255 / rd; if (pb_invert) diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index d8f1225bf..4aa756340 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -208,7 +208,7 @@ class CZapitChannel /* get methods - read and write variables */ const std::string& getName(void) const { return name; } t_satellite_position getSatellitePosition(void) const { return satellitePosition; } - unsigned char getAudioChannelCount(void) { return audioChannels.size(); } + unsigned char getAudioChannelCount(void) { return (unsigned char) audioChannels.size(); } unsigned short getPcrPid(void) { return pcrPid; } unsigned short getPmtPid(void) { return pmtPid; } unsigned short getTeletextPid(void) { return teletextPid; } @@ -256,8 +256,8 @@ class CZapitChannel void dumpServiceXml(FILE * fd, const char * action = NULL); void dumpBouquetXml(FILE * fd); - void setRecordDemux(int num) { record_demux = num; }; - void setPipDemux(int num) { pip_demux = num; }; + void setRecordDemux(uint8_t num) { record_demux = num; }; + void setPipDemux(uint8_t num) { pip_demux = num; }; int getRecordDemux() { return record_demux; }; int getPipDemux() { return pip_demux; }; static t_channel_id makeChannelId(t_satellite_position sat, freq_id_t freq, From 9cfd8e675df2c968de51dae52d96fb03fd3b5cf4 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 12 Jul 2013 09:30:40 +0200 Subject: [PATCH 042/142] localize: use general syntax for #incude --- src/system/localize.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/system/localize.h b/src/system/localize.h index 6717490f5..ad8bedb81 100644 --- a/src/system/localize.h +++ b/src/system/localize.h @@ -34,7 +34,7 @@ #define __locale__ #include -#include_next +#include #include #include #include From 8b4cff7146b6a5f90ee9f132b5618793ac60c457 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 15 Jul 2013 14:55:35 +0200 Subject: [PATCH 043/142] CBEChannelWidget: use int instead float, is unnecessary here --- src/gui/bedit/bouqueteditor_channels.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 63887b3d7..8b0f4a2ac 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -163,7 +163,7 @@ void CBEChannelWidget::paint() if (sbc < 1) sbc = 1; - float sbh= (sb- 4)/ sbc; + int sbh= (sb- 4)/ sbc; int sbs= (selected/listmaxshow); frameBuffer->paintBoxRel(x+ width- 13, ypos+ 2+ int(sbs* sbh) , 11, int(sbh), COL_MENUCONTENT_PLUS_3); From 72c4deb17c73df334441222b27b5a854cab93ef8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 15 Jul 2013 15:06:25 +0200 Subject: [PATCH 044/142] CChannelList: use matching datatype for color --- src/gui/channellist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 17b2f5d17..c982d3eba 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -1886,7 +1886,7 @@ void CChannelList::paintItem(int pos, const bool firstpaint) CZapitChannel* chan = chanlist[curr]; int prg_offset=0; int title_offset=0; - uint8_t tcolor=(liststart + pos == selected) ? color : COL_MENUCONTENTINACTIVE_TEXT; + fb_pixel_t tcolor=(liststart + pos == selected) ? color : COL_MENUCONTENTINACTIVE_TEXT; int xtheight=fheight-2; if(g_settings.channellist_extended) From e199d0c558edd297dc17066882eabdc99611cd46 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 18 Jul 2013 20:38:57 +0200 Subject: [PATCH 045/142] CFrontend: fix compiler warnings, wrong datatype There are a lot of possible conversion problems to one data type from other datatype those may alter values. Sure, not for all, but on this quantity it's not to be underestimated. This should be considered in more detail and should be corrected over time, if required. --- src/zapit/include/zapit/frontend_c.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index feefe3feb..957d0cbb3 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -171,7 +171,7 @@ class CFrontend static fe_code_rate_t getCodeRate(const uint8_t fec_inner, int system = 0); uint8_t getDiseqcPosition(void) const { return currentTransponder.diseqc; } - uint8_t getDiseqcRepeats(void) const { return config.diseqcRepeats; } + uint8_t getDiseqcRepeats(void) const { return (uint8_t) config.diseqcRepeats; } diseqc_t getDiseqcType(void) const { return (diseqc_t) config.diseqcType; } uint32_t getFrequency(void) const { return currentTransponder.feparams.dvb_feparams.frequency; } bool getHighBand() { return (int) getFrequency() >= lnbSwitch; } From 2cffcf53a3037456169f78eb0ad5c1987914aec0 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sat, 20 Jul 2013 21:24:12 +0200 Subject: [PATCH 046/142] CComponentsText: do also paint text on changed text color --- src/gui/components/cc_item_text.cpp | 22 ++++++++++++---------- src/gui/components/cc_item_text.h | 16 +++++++++------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index 2e43fff4b..34cd31277 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -1,5 +1,5 @@ /* - Based up Neutrino-GUI - Tuxbox-Project + Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. @@ -57,17 +57,17 @@ CComponentsText::CComponentsText( const int x_pos, const int y_pos, const int w, y = y_pos, width = w; height = h; - + col_frame = color_frame; col_body = color_body; col_shadow = color_shadow; shadow = has_shadow; - + ct_font = font_text; ct_text = text; ct_text_mode = mode; ct_col_text = color_text; - + initCCText(); } @@ -107,6 +107,7 @@ void CComponentsText::initVarText() ct_text_Vborder = 0; ct_col_text = COL_MENUCONTENT_TEXT; + ct_old_col_text = ct_col_text; ct_text_sent = false; ct_paint_textbg = false; ct_force_text_paint = false; @@ -150,10 +151,11 @@ void CComponentsText::initCCText() ct_textbox->setWindowMaxDimensions(width, height); ct_textbox->setWindowMinDimensions(width, height); - //send text to CTextBox object, but paint text only if text has changed or force option is enabled - if ((ct_old_text != ct_text) || ct_force_text_paint) + //send text to CTextBox object, but paint text only if text or text coloer has changed or force option is enabled + if ((ct_old_text != ct_text) || ct_old_col_text != ct_col_text || ct_force_text_paint) ct_text_sent = ct_textbox->setText(&ct_text, this->iWidth); - ct_old_text = ct_text; + ct_old_text = ct_text; + ct_old_col_text = ct_col_text; #ifdef DEBUG_CC printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, w %d, h %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), this->iX, this->iY, this->iWidth, this->iHeight); #endif @@ -200,21 +202,21 @@ bool CComponentsText::setTextFromFile(const string& path_to_textfile, const int { string file = path_to_textfile; string txt = ""; - + ifstream in (file.c_str(), ios::in); if (!in){ printf("[CComponentsText] [%s - %d] error while open %s -> %s\n", __FUNCTION__, __LINE__, file.c_str(), strerror(errno)); return false; } string line; - + while(getline(in, line)){ txt += line + '\n'; } in.close(); setText(txt, mode, font_text); - + return true; } diff --git a/src/gui/components/cc_item_text.h b/src/gui/components/cc_item_text.h index aba86c1fe..194bd2dfb 100644 --- a/src/gui/components/cc_item_text.h +++ b/src/gui/components/cc_item_text.h @@ -1,5 +1,5 @@ /* - Based up Neutrino-GUI - Tuxbox-Project + Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. @@ -46,8 +46,10 @@ class CComponentsText : public CComponentsItem, public CBox ///object: Fontrenderer object Font * ct_font; - ///property: CTextBox object + ///property: text color fb_pixel_t ct_col_text; + ///property: cached text color + fb_pixel_t ct_old_col_text; ///property: text display modes, see textbox.h for possible modes int ct_text_mode; ///property: horizontal text border width (left and right) @@ -63,7 +65,7 @@ class CComponentsText : public CComponentsItem, public CBox bool ct_text_sent; ///property: send to CTextBox object enableBackgroundPaint(true) bool ct_paint_textbg; - + ///property: force sending text to the CTextBox object, false= text only sended, if text was changed, see also textChanged() bool ct_force_text_paint; @@ -75,7 +77,7 @@ class CComponentsText : public CComponentsItem, public CBox ///destroy current CTextBox and CBox objects void clearCCText(); - + ///initialize all required attributes for text and send to the CTextBox object void initCCText(); ///paint CCItem backckrond (if paint_bg=true), apply initCCText() and send paint() to the CTextBox object @@ -90,9 +92,9 @@ class CComponentsText : public CComponentsItem, public CBox ///default members to paint a text box and hide painted text ///hide textbox - void hide(bool no_restore = false); + void hide(bool no_restore = false); ///paint text box, parameter do_save_bg: default = true, causes fill of backckrond pixel buffer - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); ///send options for text font (size and type), color and mode (allignment) virtual inline void setTextFont(Font* font_text){ct_font = font_text;}; @@ -119,7 +121,7 @@ class CComponentsText : public CComponentsItem, public CBox ///helper to remove linebreak chars from a string if needed virtual void removeLineBreaks(std::string& str); - + ///returns true, if text was changed virtual bool textChanged(){return ct_old_text != ct_text;}; ///force paint of text even if text was changed or not From 465d2aba23935107c746598a287f758b953466dd Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 27 Jun 2013 19:06:35 +0200 Subject: [PATCH 047/142] Add new class CNeutrinoFonts for setup and modify neutrino fonts - move SetupFonts() from CNeutrinoApp to CFontSetup --- src/driver/Makefile.am | 1 + src/driver/neutrinofonts.cpp | 102 +++++++++++++++++++++++++++++++++++ src/driver/neutrinofonts.h | 70 ++++++++++++++++++++++++ src/gui/osd_setup.cpp | 55 +++++++++---------- src/neutrino.cpp | 72 ++++--------------------- src/neutrino.h | 26 --------- 6 files changed, 210 insertions(+), 116 deletions(-) create mode 100644 src/driver/neutrinofonts.cpp create mode 100644 src/driver/neutrinofonts.h diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 77823407f..55cbdd75e 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -27,6 +27,7 @@ libneutrino_driver_a_SOURCES = \ fontrenderer.cpp \ framebuffer.cpp \ genpsi.cpp \ + neutrinofonts.cpp \ radiotext.cpp \ radiotools.cpp \ rcinput.cpp \ diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp new file mode 100644 index 000000000..8c7e0c360 --- /dev/null +++ b/src/driver/neutrinofonts.cpp @@ -0,0 +1,102 @@ +/* + Neutrino-GUI - DBoxII-Project + + Copyright (C) 2001 Steffen Hehn 'McClean' + + License: GPL + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include + +#include + +extern font_sizes_groups_struct font_sizes_groups[]; +extern font_sizes_struct neutrino_font[]; +extern const char * locale_real_names[]; /* #include */ + +const font_sizes_struct signal_font = {LOCALE_FONTSIZE_INFOBAR_SMALL, 14, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}; + +CNeutrinoFonts::CNeutrinoFonts() +{ + memset(&fontDescr, 0, sizeof(neutrino_font_descr_struct)); +} + +CNeutrinoFonts::~CNeutrinoFonts() +{ +} + +CNeutrinoFonts* CNeutrinoFonts::getInstance() +{ + static CNeutrinoFonts* nf = NULL; + if (!nf) + nf = new CNeutrinoFonts(); + return nf; +} + +void CNeutrinoFonts::SetupNeutrinoFonts() +{ + if (g_fontRenderer != NULL) + delete g_fontRenderer; + g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100); + + if (fontDescr.filename != NULL) + free((void *)fontDescr.filename); + printf("[neutrino] settings font file %s\n", g_settings.font_file); + if (access(g_settings.font_file, F_OK)) { + if (!access(FONTDIR"/neutrino.ttf", F_OK)) { + fontDescr.filename = strdup(FONTDIR"/neutrino.ttf"); + strcpy(g_settings.font_file, fontDescr.filename); + } else { + fprintf( stderr,"[neutrino] font file [%s] not found\n neutrino exit\n",FONTDIR"/neutrino.ttf"); + _exit(0); + } + + } else + fontDescr.filename = strdup(g_settings.font_file); + fontStyle[0] = g_fontRenderer->AddFont(fontDescr.filename); + + if (fontDescr.name != NULL) + free((void *)fontDescr.name); + fontDescr.name = strdup(g_fontRenderer->getFamily(fontDescr.filename).c_str()); + printf("[neutrino] font family %s\n", fontDescr.name); + fontStyle[1] = "Bold Regular"; + + g_fontRenderer->AddFont(fontDescr.filename, true); // make italics + fontStyle[2] = "Italic"; + + for (int i = 0; i < SNeutrinoSettings::FONT_TYPE_COUNT; i++) { + if (g_Font[i]) delete g_Font[i]; + g_Font[i] = g_fontRenderer->getFont(fontDescr.name, fontStyle[neutrino_font[i].style], CNeutrinoApp::getInstance()->getConfigFile()->getInt32(locale_real_names[neutrino_font[i].name], neutrino_font[i].defaultsize) + neutrino_font[i].size_offset * fontDescr.size_offset); + } + g_SignalFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[signal_font.style], signal_font.defaultsize + signal_font.size_offset * fontDescr.size_offset); +} diff --git a/src/driver/neutrinofonts.h b/src/driver/neutrinofonts.h new file mode 100644 index 000000000..4e0dce68f --- /dev/null +++ b/src/driver/neutrinofonts.h @@ -0,0 +1,70 @@ +/* + Neutrino-GUI - DBoxII-Project + + Copyright (C) 2001 Steffen Hehn 'McClean' + + License: GPL + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __neutrinofonts__ +#define __neutrinofonts__ + +typedef struct neutrino_font_descr { + const char *name; + const char *filename; + int size_offset; +} neutrino_font_descr_struct; + +typedef struct font_sizes { + const neutrino_locale_t name; + const unsigned int defaultsize; + const unsigned int style; + const unsigned int size_offset; +} font_sizes_struct; + +typedef struct font_sizes_groups { + const neutrino_locale_t groupname; + const unsigned int count; + const SNeutrinoSettings::FONT_TYPES *const content; + const char * const actionkey; + const neutrino_locale_t hint; +} font_sizes_groups_struct; + +class CNeutrinoFonts +{ + private: + const char * fontStyle[3]; + + public: + enum { + FONT_STYLE_REGULAR = 0, + FONT_STYLE_BOLD = 1, + FONT_STYLE_ITALIC = 2 + }; + + CNeutrinoFonts(); + ~CNeutrinoFonts(); + static CNeutrinoFonts* getInstance(); + + neutrino_font_descr_struct fontDescr; + + void SetupNeutrinoFonts(); +}; + + +#endif //__neutrinofonts__ diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index 4c7b70c31..511e53ea3 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -49,6 +49,7 @@ #include #include +#include #include #include #include @@ -146,37 +147,33 @@ font_sizes_groups font_sizes_groups[6] = {LOCALE_FONTMENU_GAMELIST , 2, gamelist_font_sizes , "fontsize.dgam", LOCALE_MENU_HINT_GAMELIST_FONTS } }; -#define FONT_STYLE_REGULAR 0 -#define FONT_STYLE_BOLD 1 -#define FONT_STYLE_ITALIC 2 - font_sizes_struct neutrino_font[SNeutrinoSettings::FONT_TYPE_COUNT] = { - {LOCALE_FONTSIZE_MENU , 20, FONT_STYLE_BOLD , 0}, - {LOCALE_FONTSIZE_MENU_TITLE , 30, FONT_STYLE_BOLD , 0}, - {LOCALE_FONTSIZE_MENU_INFO , 16, FONT_STYLE_REGULAR, 0}, - {LOCALE_FONTSIZE_EPG_TITLE , 25, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_EPG_INFO1 , 17, FONT_STYLE_ITALIC , 2}, - {LOCALE_FONTSIZE_EPG_INFO2 , 17, FONT_STYLE_REGULAR, 2}, - {LOCALE_FONTSIZE_EPG_DATE , 15, FONT_STYLE_REGULAR, 2}, - {LOCALE_FONTSIZE_EVENTLIST_TITLE , 30, FONT_STYLE_REGULAR, 0}, - {LOCALE_FONTSIZE_EVENTLIST_ITEMLARGE, 20, FONT_STYLE_BOLD , 1}, - {LOCALE_FONTSIZE_EVENTLIST_ITEMSMALL, 14, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_EVENTLIST_DATETIME , 16, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_EVENTLIST_EVENT , 17, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_GAMELIST_ITEMLARGE , 20, FONT_STYLE_BOLD , 1}, - {LOCALE_FONTSIZE_GAMELIST_ITEMSMALL , 16, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_CHANNELLIST , 20, FONT_STYLE_BOLD , 1}, - {LOCALE_FONTSIZE_CHANNELLIST_DESCR , 20, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_CHANNELLIST_NUMBER , 14, FONT_STYLE_BOLD , 2}, - {LOCALE_FONTSIZE_CHANNELLIST_EVENT , 17, FONT_STYLE_REGULAR, 2}, - {LOCALE_FONTSIZE_CHANNEL_NUM_ZAP , 40, FONT_STYLE_BOLD , 0}, - {LOCALE_FONTSIZE_INFOBAR_NUMBER , 50, FONT_STYLE_BOLD , 0}, - {LOCALE_FONTSIZE_INFOBAR_CHANNAME , 30, FONT_STYLE_BOLD , 0}, - {LOCALE_FONTSIZE_INFOBAR_INFO , 20, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_INFOBAR_SMALL , 14, FONT_STYLE_REGULAR, 1}, - {LOCALE_FONTSIZE_FILEBROWSER_ITEM , 16, FONT_STYLE_BOLD , 1}, - {LOCALE_FONTSIZE_MENU_HINT , 16, FONT_STYLE_REGULAR, 0} + {LOCALE_FONTSIZE_MENU , 20, CNeutrinoFonts::FONT_STYLE_BOLD , 0}, + {LOCALE_FONTSIZE_MENU_TITLE , 30, CNeutrinoFonts::FONT_STYLE_BOLD , 0}, + {LOCALE_FONTSIZE_MENU_INFO , 16, CNeutrinoFonts::FONT_STYLE_REGULAR, 0}, + {LOCALE_FONTSIZE_EPG_TITLE , 25, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_EPG_INFO1 , 17, CNeutrinoFonts::FONT_STYLE_ITALIC , 2}, + {LOCALE_FONTSIZE_EPG_INFO2 , 17, CNeutrinoFonts::FONT_STYLE_REGULAR, 2}, + {LOCALE_FONTSIZE_EPG_DATE , 15, CNeutrinoFonts::FONT_STYLE_REGULAR, 2}, + {LOCALE_FONTSIZE_EVENTLIST_TITLE , 30, CNeutrinoFonts::FONT_STYLE_REGULAR, 0}, + {LOCALE_FONTSIZE_EVENTLIST_ITEMLARGE, 20, CNeutrinoFonts::FONT_STYLE_BOLD , 1}, + {LOCALE_FONTSIZE_EVENTLIST_ITEMSMALL, 14, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_EVENTLIST_DATETIME , 16, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_EVENTLIST_EVENT , 17, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_GAMELIST_ITEMLARGE , 20, CNeutrinoFonts::FONT_STYLE_BOLD , 1}, + {LOCALE_FONTSIZE_GAMELIST_ITEMSMALL , 16, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_CHANNELLIST , 20, CNeutrinoFonts::FONT_STYLE_BOLD , 1}, + {LOCALE_FONTSIZE_CHANNELLIST_DESCR , 20, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_CHANNELLIST_NUMBER , 14, CNeutrinoFonts::FONT_STYLE_BOLD , 2}, + {LOCALE_FONTSIZE_CHANNELLIST_EVENT , 17, CNeutrinoFonts::FONT_STYLE_REGULAR, 2}, + {LOCALE_FONTSIZE_CHANNEL_NUM_ZAP , 40, CNeutrinoFonts::FONT_STYLE_BOLD , 0}, + {LOCALE_FONTSIZE_INFOBAR_NUMBER , 50, CNeutrinoFonts::FONT_STYLE_BOLD , 0}, + {LOCALE_FONTSIZE_INFOBAR_CHANNAME , 30, CNeutrinoFonts::FONT_STYLE_BOLD , 0}, + {LOCALE_FONTSIZE_INFOBAR_INFO , 20, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_INFOBAR_SMALL , 14, CNeutrinoFonts::FONT_STYLE_REGULAR, 1}, + {LOCALE_FONTSIZE_FILEBROWSER_ITEM , 16, CNeutrinoFonts::FONT_STYLE_BOLD , 1}, + {LOCALE_FONTSIZE_MENU_HINT , 16, CNeutrinoFonts::FONT_STYLE_REGULAR, 0} }; int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index c66a93807..efa262bd8 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -177,6 +178,7 @@ CPictureViewer * g_PicViewer; CCAMMenuHandler * g_CamHandler; CVolume * g_volume; CAudioMute * g_audioMute; +CNeutrinoFonts * neutrinoFonts = NULL; // Globale Variablen - to use import global.h @@ -200,10 +202,9 @@ CNeutrinoApp::CNeutrinoApp() frameBuffer = CFrameBuffer::getInstance(); frameBuffer->setIconBasePath(DATADIR "/neutrino/icons/"); - SetupFrameBuffer(); - mode = mode_unknown; + mode = mode_unknown; channelList = NULL; TVchannelList = NULL; RADIOchannelList = NULL; @@ -213,7 +214,6 @@ CNeutrinoApp::CNeutrinoApp() current_muted = 0; recordingstatus = 0; g_channel_list_changed = false; - memset(&font, 0, sizeof(neutrino_font_descr_struct)); } /*------------------------------------------------------------------------------------- @@ -223,6 +223,9 @@ CNeutrinoApp::~CNeutrinoApp() { if (channelList) delete channelList; + if (neutrinoFonts) + delete neutrinoFonts; + neutrinoFonts = NULL; } CNeutrinoApp* CNeutrinoApp::getInstance() @@ -236,16 +239,6 @@ CNeutrinoApp* CNeutrinoApp::getInstance() return neutrinoApp; } - -#define FONT_STYLE_REGULAR 0 -#define FONT_STYLE_BOLD 1 -#define FONT_STYLE_ITALIC 2 - -extern font_sizes_groups_struct font_sizes_groups[]; -extern font_sizes_struct neutrino_font[]; - -const font_sizes_struct signal_font = {LOCALE_FONTSIZE_INFOBAR_SMALL , 14, FONT_STYLE_REGULAR, 1}; - typedef struct lcd_setting_t { const char * const name; @@ -1469,8 +1462,6 @@ void CNeutrinoApp::CmdParser(int argc, char **argv) softupdate = false; //fromflash = false; - font.name = NULL; - for(int x=1; xSetupNeutrinoFonts(); - if (g_fontRenderer != NULL) - delete g_fontRenderer; - - g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100); - - if(font.filename != NULL) - free((void *)font.filename); - - printf("[neutrino] settings font file %s\n", g_settings.font_file); - - if(access(g_settings.font_file, F_OK)) { - if(!access(FONTDIR"/neutrino.ttf", F_OK)){ - font.filename = strdup(FONTDIR"/neutrino.ttf"); - strcpy(g_settings.font_file, font.filename); - } - else{ - fprintf( stderr,"[neutrino] font file [%s] not found\n neutrino exit\n",FONTDIR"/neutrino.ttf"); - _exit(0); - } - - } - else{ - font.filename = strdup(g_settings.font_file); - } - style[0] = g_fontRenderer->AddFont(font.filename); - - if(font.name != NULL) - free((void *)font.name); - - font.name = strdup(g_fontRenderer->getFamily(font.filename).c_str()); - - printf("[neutrino] font family %s\n", font.name); - - style[1] = "Bold Regular"; - - g_fontRenderer->AddFont(font.filename, true); // make italics - style[2] = "Italic"; - - for (int i = 0; i < SNeutrinoSettings::FONT_TYPE_COUNT; i++) - { - if(g_Font[i]) delete g_Font[i]; - g_Font[i] = g_fontRenderer->getFont(font.name, style[neutrino_font[i].style], configfile.getInt32(locale_real_names[neutrino_font[i].name], neutrino_font[i].defaultsize) + neutrino_font[i].size_offset * font.size_offset); - } - g_SignalFont = g_fontRenderer->getFont(font.name, style[signal_font.style], signal_font.defaultsize + signal_font.size_offset * font.size_offset); /* recalculate infobar position */ if (g_InfoViewer) g_InfoViewer->start(); @@ -1781,6 +1730,7 @@ TIMER_START(); show_startwizard = true; } /* setup GUI */ + neutrinoFonts = CNeutrinoFonts::getInstance(); SetupFonts(); SetupTiming(); g_PicViewer = new CPictureViewer(); @@ -1789,7 +1739,7 @@ TIMER_START(); CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_NEUTRINO_STARTING)); hintBox->paint(); - CVFD::getInstance()->init(font.filename, font.name); + CVFD::getInstance()->init(neutrinoFonts->fontDescr.filename, neutrinoFonts->fontDescr.name); CVFD::getInstance()->Clear(); CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_NEUTRINO_STARTING)); CVFD::getInstance()->setBacklight(g_settings.backlight_tv); diff --git a/src/neutrino.h b/src/neutrino.h index b79678e08..133a29310 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -58,30 +58,6 @@ * * **************************************************************************************/ -typedef struct neutrino_font_descr -{ - const char * name; - const char * filename; - int size_offset; -} neutrino_font_descr_struct; - -typedef struct font_sizes -{ - const neutrino_locale_t name; - const unsigned int defaultsize; - const unsigned int style; - const unsigned int size_offset; -} font_sizes_struct; - -typedef struct font_sizes_groups -{ - const neutrino_locale_t groupname; - const unsigned int count; - const SNeutrinoSettings::FONT_TYPES * const content; - const char * const actionkey; - const neutrino_locale_t hint; -} font_sizes_groups_struct; - extern const unsigned char genre_sub_classes[]; /* epgview.cpp */ extern const neutrino_locale_t * genre_sub_classes_list[]; /* epgview.cpp */ @@ -108,8 +84,6 @@ private: int network_dhcp; int network_automatic_start; - neutrino_font_descr_struct font; - int mode; int lastMode; bool softupdate; From 0bcb7bcfae525cceb85a632966b6b1ff10d41052 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Fri, 28 Jun 2013 05:52:23 +0200 Subject: [PATCH 048/142] Add dynamic fonts to CNeutrinoFonts - Dynamic fonts with their size matched to a given text box. The display size is retained even when changing the font size factor. - "Normal" dynamic fonts, characterized by FONT_ID_SHARE in CNeutrinoFonts::getDynFont() can be used by several objects simultaneously. That is, if the calculated font size and font style are the same, the existing font is used. - Dynamic font for exclusive application will only be used by an object. For this, a FontID (FONT_ID_xxx, defined in src/driver/neutrinofonts.h) in CNeutrinoFonts::getDynFont() is specified. - Objects with dynamic font for exclusive application can resize at run time, the font size will be adjusted accordingly. - The return value of CNeutrinoFonts::getDynFont() is a pointer to a font, for example: Font** font = CNeutrinoFonts::getInstance()->getDynFont(...); (*font)->RenderString(...) --- src/driver/neutrinofonts.cpp | 246 +++++++++++++++++++++++++++++++++++ src/driver/neutrinofonts.h | 38 ++++++ src/neutrino.cpp | 1 + 3 files changed, 285 insertions(+) diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp index 8c7e0c360..93e34f32d 100644 --- a/src/driver/neutrinofonts.cpp +++ b/src/driver/neutrinofonts.cpp @@ -3,6 +3,9 @@ Copyright (C) 2001 Steffen Hehn 'McClean' + CNeutrinoFonts class for gui. + Copyright (C) 2013, M. Liebmann (micha-bbg) + License: GPL This program is free software; you can redistribute it and/or @@ -48,11 +51,39 @@ const font_sizes_struct signal_font = {LOCALE_FONTSIZE_INFOBAR_SMALL, 14, CNeutr CNeutrinoFonts::CNeutrinoFonts() { + useDigitOffset = false; memset(&fontDescr, 0, sizeof(neutrino_font_descr_struct)); + InitDynFonts(); +} + +void CNeutrinoFonts::InitDynFonts() +{ + for (int i = 0; i < FONT_ID_MAX; i++) { + dyn_font_t dyn_font; + dyn_font.dx = 0; + dyn_font.dy = 0; + dyn_font.size = 0; + dyn_font.style = 0; + dyn_font.text = ""; + dyn_font.font = NULL; + dyn_font.useDigitOffset = false; + v_dyn_fonts.push_back(dyn_font); + } } CNeutrinoFonts::~CNeutrinoFonts() { + if (!v_share_fonts.empty()) { + for (unsigned int i = 0; i < v_share_fonts.size(); i++) + delete v_share_fonts[i].font; + v_share_fonts.clear(); + } + + if (!v_dyn_fonts.empty()) { + for (unsigned int i = 0; i < v_dyn_fonts.size(); i++) + delete v_dyn_fonts[i].font; + v_dyn_fonts.clear(); + } } CNeutrinoFonts* CNeutrinoFonts::getInstance() @@ -100,3 +131,218 @@ void CNeutrinoFonts::SetupNeutrinoFonts() } g_SignalFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[signal_font.style], signal_font.defaultsize + signal_font.size_offset * fontDescr.size_offset); } + +void CNeutrinoFonts::refreshDynFonts() +{ + if (!v_share_fonts.empty()) { + for (unsigned int i = 0; i < v_share_fonts.size(); i++) { + if (v_share_fonts[i].font != NULL) + refreshDynFont(v_share_fonts[i].dx, v_share_fonts[i].dy, v_share_fonts[i].text, v_share_fonts[i].style, i, true); + } + } + + if (!v_dyn_fonts.empty()) { + for (unsigned int i = 0; i < v_dyn_fonts.size(); i++) { + if (v_dyn_fonts[i].font != NULL) + refreshDynFont(v_dyn_fonts[i].dx, v_dyn_fonts[i].dy, v_dyn_fonts[i].text, v_dyn_fonts[i].style, i, false); + } + } +} + +void CNeutrinoFonts::refreshDynFont(int dx, int dy, std::string text, int style, int index, bool isShare) +{ + if ((dx <= 0) && (dy <= 0)) + return; + + dyn_font_t *dyn_font = (isShare) ? &(v_share_fonts[index]) : &(v_dyn_fonts[index]); + int oldSize = dyn_font->size; + bool tmp = useDigitOffset; + useDigitOffset = dyn_font->useDigitOffset; + int dynSize = getDynFontSize(dx, dy, text, style); + useDigitOffset = tmp; + if (dyn_font->size == dynSize) + return; + + if (dyn_font->font != NULL) + delete dyn_font->font; + Font *dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + dyn_font->font = dynFont; + dyn_font->size = dynSize; + printf("##### [%s] change %s_font size old %d to new %d, index: %u\n", __FUNCTION__, (isShare)?"share":"dyn", oldSize, dyn_font->size, index); +} + +int CNeutrinoFonts::getFontHeight(Font* fnt) +{ + if (useDigitOffset) + return fnt->getDigitHeight() + (fnt->getDigitOffset() * 18) / 10; + else + return fnt->getHeight(); +} + +int CNeutrinoFonts::getDynFontSize(int dx, int dy, std::string text, int style) +{ + Font *dynFont = NULL; + int _width = 0; + int _height = 0; + int dynSize = 8; + bool dynFlag = false; + + if (dx == 0) dx = 1280; + while (1) { + if (dynFont != NULL) + delete dynFont; + dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + // calculate height & width + _height = getFontHeight(dynFont); + std::string tmpText = text; + if (text == "") tmpText = "x"; + _width = dynFont->getRenderWidth(tmpText.c_str()); + if ((_height > dy) || (_width > dx)) { + if (dynFlag) + dynSize--; + else + printf("##### [%s] Specified size (dx=%d, dy=%d) too small, use minimal font size.\n", __FUNCTION__, dx, dy); + break; + } + else if ((_height < dy) || (_width < dx)) { + dynFlag = true; + dynSize++; + } + else + break; + } + + if (dynFont != NULL) + delete dynFont; + + return dynSize; +} + +/* CNeutrinoFonts::getDynFont usage + + * dx, dy max. width/height of text field / return: real width/height of text field + If dx = 0, then the width is calculated automatically + + * text Text to display + If text = "", then only the height is calculated + + * style Font style (FONT_STYLE_REGULAR or FONT_STYLE_BOLD or FONT_STYLE_ITALIC) + + * share Select font modus + FONT_ID_SHARE Font for used by several objects simultaneously + FONT_ID_xxx Font for exclusive application + FONT_ID_yyy - "" - + FONT_ID_zzz - "" - + + * return value: Pointer to dynamic font + + example: + dx = 0; //dx = 0, width is calculated automatically + dy = 30; //max. height + text = "100"; //max. text to display + //CNeutrinoFonts::FONT_STYLE_REGULAR = normal font style + //CNeutrinoFonts::FONT_ID_VOLBAR = exclusive font for Volume bar (defined in src/driver/neutrinofonts.h) + Font** font = CNeutrinoFonts::getInstance()->getDynFont(dx, dy, text, CNeutrinoFonts::FONT_STYLE_REGULAR, CNeutrinoFonts::FONT_ID_VOLBAR); + (*font)->RenderString(...) + +*/ +Font **CNeutrinoFonts::getDynFont(int &dx, int &dy, std::string text/*=""*/, int style/*=FONT_STYLE_REGULAR*/, int share/*=FONT_ID_SHARE*/) +{ + if (share > FONT_ID_SHARE) + return getDynFontWithID(dx, dy, text, style, share); + else + return getDynFontShare(dx, dy, text, style); +} + +Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int style, unsigned int f_id) +{ + if ((dx <= 0) && (dy <= 0)) + return NULL; + if ((fontDescr.name == NULL) || (fontDescr.filename == NULL) || (g_fontRenderer == NULL)) + SetupNeutrinoFonts(); + + int dynSize = getDynFontSize(dx, dy, text, style); + Font *dynFont = NULL; + Font **ret = NULL; + + if (f_id < v_dyn_fonts.size()) { + if ((v_dyn_fonts[f_id].size == dynSize) && (v_dyn_fonts[f_id].font != NULL)) { + dy = v_dyn_fonts[f_id].font->getHeight(); + if (text != "") + dx = v_dyn_fonts[f_id].font->getRenderWidth(text.c_str()); + return &(v_dyn_fonts[f_id].font); + } + + dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + if (v_dyn_fonts[f_id].font != NULL) + delete v_dyn_fonts[f_id].font; + v_dyn_fonts[f_id].dx = dx; + v_dyn_fonts[f_id].dy = dy; + v_dyn_fonts[f_id].size = dynSize; + v_dyn_fonts[f_id].style = style; + v_dyn_fonts[f_id].text = text; + v_dyn_fonts[f_id].font = dynFont; + v_dyn_fonts[f_id].useDigitOffset = useDigitOffset; + ret = &(v_dyn_fonts[f_id].font); + } + else + return NULL; + + dy = (*ret)->getHeight(); + if (text != "") + dx = (*ret)->getRenderWidth(text.c_str()); + printf("##### [%s] dx: %d, dy: %d, dynSize: %d, dynFont: %p, ret: %p, FontID: %d\n", __FUNCTION__, dx, dy, dynSize, *ret, ret, f_id); + return ret; +} + +Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int style) +{ + if ((dx <= 0) && (dy <= 0)) + return NULL; + if ((fontDescr.name == NULL) || (fontDescr.filename == NULL) || (g_fontRenderer == NULL)) + SetupNeutrinoFonts(); + + int dynSize = getDynFontSize(dx, dy, text, style); + Font *dynFont = NULL; + + bool fontAvailable = false; + unsigned int i; + Font **ret = NULL; + if (!v_share_fonts.empty()) { + for (i = 0; i < v_share_fonts.size(); i++) { + if ((v_share_fonts[i].size == dynSize) && + (v_share_fonts[i].style == style) && + (v_share_fonts[i].useDigitOffset == useDigitOffset)) { + fontAvailable = true; + break; + } + } + } + if (fontAvailable) { + if (text.length() > v_share_fonts[i].text.length()) { + v_share_fonts[i].dx = dx; + v_share_fonts[i].dy = dy; + v_share_fonts[i].text = text; + } + ret = &(v_share_fonts[i].font); + } + else { + dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + dyn_font_t dyn_font; + dyn_font.dx = dx; + dyn_font.dy = dy; + dyn_font.size = dynSize; + dyn_font.style = style; + dyn_font.text = text; + dyn_font.font = dynFont; + dyn_font.useDigitOffset = useDigitOffset; + v_share_fonts.push_back(dyn_font); + ret = &(v_share_fonts[v_share_fonts.size()-1].font); + } + + dy = (*ret)->getHeight(); + if (text != "") + dx = (*ret)->getRenderWidth(text.c_str()); + printf("##### [%s] dx: %d, dy: %d, dynSize: %d, dynFont: %p, ret: %p, fontAvailable: %d\n", __FUNCTION__, dx, dy, dynSize, *ret, ret, fontAvailable); + return ret; +} diff --git a/src/driver/neutrinofonts.h b/src/driver/neutrinofonts.h index 4e0dce68f..53b6952df 100644 --- a/src/driver/neutrinofonts.h +++ b/src/driver/neutrinofonts.h @@ -3,6 +3,9 @@ Copyright (C) 2001 Steffen Hehn 'McClean' + CNeutrinoFonts class for gui. + Copyright (C) 2013, M. Liebmann (micha-bbg) + License: GPL This program is free software; you can redistribute it and/or @@ -50,6 +53,29 @@ class CNeutrinoFonts private: const char * fontStyle[3]; + typedef struct dyn_font_t + { + int dx; + int dy; + int size; + int style; + std::string text; + Font* font; + bool useDigitOffset; + } dyn_font_struct_t; + + typedef std::vector v_dyn_fonts_t; + v_dyn_fonts_t v_share_fonts; + v_dyn_fonts_t v_dyn_fonts; + bool useDigitOffset; + + void InitDynFonts(); + void refreshDynFont(int dx, int dy, std::string text, int style, int index, bool isShare); + int getFontHeight(Font* fnt); + int getDynFontSize(int dx, int dy, std::string text, int style); + Font **getDynFontShare(int &dx, int &dy, std::string text, int style); + Font **getDynFontWithID(int &dx, int &dy, std::string text, int style, unsigned int f_id); + public: enum { FONT_STYLE_REGULAR = 0, @@ -57,6 +83,15 @@ class CNeutrinoFonts FONT_STYLE_ITALIC = 2 }; + enum { + FONT_ID_SHARE = -1 + }; + enum { + FONT_ID_xxx, + + FONT_ID_MAX + }; + CNeutrinoFonts(); ~CNeutrinoFonts(); static CNeutrinoFonts* getInstance(); @@ -64,6 +99,9 @@ class CNeutrinoFonts neutrino_font_descr_struct fontDescr; void SetupNeutrinoFonts(); + void refreshDynFonts(); + Font **getDynFont(int &dx, int &dy, std::string text="", int style=FONT_STYLE_REGULAR, int share=FONT_ID_SHARE); + void setFontUseDigitHeight(bool set=true) {useDigitOffset = set;} }; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index efa262bd8..c14d8f6a3 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1525,6 +1525,7 @@ void CNeutrinoApp::SetupFonts() if (neutrinoFonts == NULL) neutrinoFonts = CNeutrinoFonts::getInstance(); neutrinoFonts->SetupNeutrinoFonts(); + neutrinoFonts->refreshDynFonts(); /* recalculate infobar position */ if (g_InfoViewer) From 5267667cfb46a44810311dc1990631c03c24ab6b Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Fri, 28 Jun 2013 05:51:51 +0200 Subject: [PATCH 049/142] Use dynamic font in CVolumeBar --- src/driver/neutrinofonts.h | 2 +- src/gui/volumebar.cpp | 15 ++++++++++----- src/gui/volumebar.h | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/driver/neutrinofonts.h b/src/driver/neutrinofonts.h index 53b6952df..1aefa4fcd 100644 --- a/src/driver/neutrinofonts.h +++ b/src/driver/neutrinofonts.h @@ -87,7 +87,7 @@ class CNeutrinoFonts FONT_ID_SHARE = -1 }; enum { - FONT_ID_xxx, + FONT_ID_VOLBAR, FONT_ID_MAX }; diff --git a/src/gui/volumebar.cpp b/src/gui/volumebar.cpp index b2287efb2..e8aa2384e 100644 --- a/src/gui/volumebar.cpp +++ b/src/gui/volumebar.cpp @@ -32,6 +32,7 @@ #include #include +#include using namespace std; @@ -68,7 +69,6 @@ void CVolumeBar::initVarVolumeBar() vb_digit = NULL; vb_digit_mode = CTextBox::CENTER ; VolumeFont = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO; - vb_font = g_Font[VolumeFont]; initVolumeBarSize(); initVolumeBarPosition(); @@ -200,7 +200,7 @@ void CVolumeBar::initVolumeBarScale() //set digit text with current volume value void CVolumeBar::initVolumeBarDigitValue() { - vb_digit->setText(*vb_vol ,vb_digit_mode, vb_font); + vb_digit->setText(*vb_vol ,vb_digit_mode, *(CVolumeHelper::getInstance()->vb_font)); } //create digit @@ -277,6 +277,7 @@ void CVolumeHelper::Init() y = frameBuffer->getScreenY() + v_spacer; sw = g_settings.screen_EndX - h_spacer; sh = frameBuffer->getScreenHeight(); + vb_font = NULL; initVolBarSize(); initMuteIcon(); @@ -319,7 +320,7 @@ void CVolumeHelper::initMuteIcon() void CVolumeHelper::initVolBarSize() { - vol_height = 18; + vol_height = 26; icon_width = 0; digit_width = 0; int tmp_h = 0; @@ -329,9 +330,13 @@ void CVolumeHelper::initVolBarSize() vol_height = max(vol_height, tmp_h); if (g_settings.volume_digits) { - tmp_h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getDigitHeight() + (g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getDigitOffset() * 18) / 10; + CNeutrinoFonts *cnf = CNeutrinoFonts::getInstance(); + cnf->setFontUseDigitHeight(true); + tmp_h = vol_height; + digit_width = 200; + vb_font = cnf->getDynFont(digit_width, tmp_h, "100", CNeutrinoFonts::FONT_STYLE_REGULAR); + digit_width += 6; vol_height = max(vol_height, tmp_h); - digit_width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth("100"); } } diff --git a/src/gui/volumebar.h b/src/gui/volumebar.h index af44efef0..aa10b8e2f 100644 --- a/src/gui/volumebar.h +++ b/src/gui/volumebar.h @@ -40,7 +40,6 @@ class CVolumeBar : public CComponentsForm CComponentsPicture *vb_icon; CComponentsLabel *vb_digit; int vb_digit_mode; - Font* vb_font; int VolumeFont; int sy, sw, sh; int mute_ax, mute_ay, mute_dx, mute_dy, mute_ay_old; @@ -120,6 +119,8 @@ class CVolumeHelper CVolumeHelper(); static CVolumeHelper* getInstance(); + Font** vb_font; + void getSpacer(int *h, int *v) { *h = h_spacer; *v = v_spacer; } void getDimensions(int *_x, int *_y, int *_sw, int *_sh, int *_iw, int *_dw) { *_x = x; *_y = y; *_sw = sw; *_sh = sh; *_iw = icon_width; *_dw = digit_width; } void getMuteIconDimensions(int *_x, int *_y, int *w, int *h) { *_x = mute_ax; *_y = mute_ay+mute_corrY; *w = mute_dx; *h = mute_dy; } From 0a0035c2ae80cdb601813687787ecc6eedb93a79 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 29 Jun 2013 11:44:53 +0200 Subject: [PATCH 050/142] Add option to resize the VolumeBar - Minimum height: Height of NEUTRINO_ICON_VOLUME + 2 pixels - Maximum height: 50 pixels - Setting can be changed with: Menu -> Settings -> OSD -> Volume -> Height of display --- data/locale/deutsch.locale | 2 ++ data/locale/english.locale | 2 ++ src/gui/osd_setup.cpp | 12 ++++++++++++ src/gui/volumebar.cpp | 25 +++++++++++++------------ src/gui/volumebar.h | 3 ++- src/neutrino.cpp | 2 ++ src/system/locals.h | 2 ++ src/system/locals_intern.h | 2 ++ src/system/settings.h | 1 + 9 files changed, 38 insertions(+), 13 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 44b194b00..b435fc01c 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -420,6 +420,7 @@ extra.update_dir Lokales Update-Verzeichnis extra.use_gotoxx Benutze gotoXX extra.volume_digits Lautstärkeanzeige Ziffern extra.volume_pos Lautstärkeanzeige +extra.volume_size Höhe der Anzeige extra.west Westen extra.zap_cycle Zap nur in Bouquet extra.zapit_fe_timeout Tuning Timeout (1=10ms) @@ -1132,6 +1133,7 @@ menu.hint_video_scart_mode Wählen Sie den Modus des Ausgangssignals für den SC menu.hint_volume Wählen Sie die Anzeigeoptionen für die Lautstärke menu.hint_volume_digits Zifferndarstellung der Lautstärkeanzeige ein- oder ausschalten menu.hint_volume_pos Wählen Sie die Position der Lautstärkeanzeige aus +menu.hint_volume_size Wählen Sie die Höhe der Lautstärkeanzeige menu.hint_ytplay Wiedergabe von ausgewählten Youtube Feeds menu.hint_zap_cycle Wählen Sie, ob nur innerhalb des aktiven Bouquets umgeschaltet werden kann menu.next Weiter (Menü zum Beenden) diff --git a/data/locale/english.locale b/data/locale/english.locale index 543e34983..13e3856c7 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -420,6 +420,7 @@ extra.update_dir Local update directory extra.use_gotoxx Use gotoXX extra.volume_digits Volumebar digits extra.volume_pos Volumebar +extra.volume_size Height of display extra.west West extra.zap_cycle Zap cycle extra.zapit_fe_timeout Tune timeout (1 = 10 msec) @@ -1135,6 +1136,7 @@ menu.hint_video_scart_mode Select analog output mode for SCART connectors menu.hint_volume Configure Volume GUI options menu.hint_volume_digits Numeric display of the volumebar on/off menu.hint_volume_pos Select volume indicator position +menu.hint_volume_size Select volume indicator height menu.hint_ytplay Play selected youtube feeds menu.hint_zap_cycle When swithing channels, stay in current bouquet menu.next Next (press Menu to quit) diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index 511e53ea3..dcfd32b9d 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -521,8 +521,13 @@ int COsdSetup::showOsdSetup() mc->setHint("", LOCALE_MENU_HINT_SUBCHANNEL_POS); osd_menu->addItem(mc); + int oldVolumeSize = g_settings.volume_size; + int res = osd_menu->exec(NULL, ""); + if (oldVolumeSize != g_settings.volume_size) + CVolumeHelper::getInstance()->refresh(); + delete osd_menu; return res; } @@ -891,6 +896,13 @@ void COsdSetup::showOsdVolumeSetup(CMenuWidget *menu_volume) mc->setHint("", LOCALE_MENU_HINT_VOLUME_POS); menu_volume->addItem(mc); + // volume size + int vMin = CVolumeHelper::getInstance()->getVolIconHeight(); + g_settings.volume_size = max(g_settings.volume_size, vMin); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_VOLUME_SIZE, &g_settings.volume_size, true, vMin, 50); + nc->setHint("", LOCALE_MENU_HINT_VOLUME_SIZE); + menu_volume->addItem(nc); + // volume digits mc = new CMenuOptionChooser(LOCALE_EXTRA_VOLUME_DIGITS, &g_settings.volume_digits, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); mc->setHint("", LOCALE_MENU_HINT_VOLUME_DIGITS); diff --git a/src/gui/volumebar.cpp b/src/gui/volumebar.cpp index e8aa2384e..b28e1b3cb 100644 --- a/src/gui/volumebar.cpp +++ b/src/gui/volumebar.cpp @@ -320,23 +320,24 @@ void CVolumeHelper::initMuteIcon() void CVolumeHelper::initVolBarSize() { - vol_height = 26; - icon_width = 0; - digit_width = 0; - int tmp_h = 0; - frameBuffer->getIconSize(NEUTRINO_ICON_VOLUME, &icon_width, &tmp_h); - tmp_h += 2; - icon_width += 8; - vol_height = max(vol_height, tmp_h); + icon_width = 0; + icon_height = 0; + digit_width = 0; + frameBuffer->getIconSize(NEUTRINO_ICON_VOLUME, &icon_width, &icon_height); + icon_height = max(icon_height, 16); // if no icon available + icon_height += 2; + icon_width += 8; + g_settings.volume_size = max(g_settings.volume_size, icon_height); + vol_height = g_settings.volume_size; if (g_settings.volume_digits) { CNeutrinoFonts *cnf = CNeutrinoFonts::getInstance(); cnf->setFontUseDigitHeight(true); - tmp_h = vol_height; - digit_width = 200; - vb_font = cnf->getDynFont(digit_width, tmp_h, "100", CNeutrinoFonts::FONT_STYLE_REGULAR); + int tmp_h = vol_height; + digit_width = 0; + vb_font = cnf->getDynFont(digit_width, tmp_h, "100", CNeutrinoFonts::FONT_STYLE_REGULAR, CNeutrinoFonts::FONT_ID_VOLBAR); digit_width += 6; - vol_height = max(vol_height, tmp_h); + vol_height = max(vol_height, tmp_h); } } diff --git a/src/gui/volumebar.h b/src/gui/volumebar.h index aa10b8e2f..3903d4ac8 100644 --- a/src/gui/volumebar.h +++ b/src/gui/volumebar.h @@ -104,7 +104,7 @@ class CVolumeHelper int x, y, sw, sh; int mute_ax, mute_ay, mute_dx, mute_dy, mute_corrY; int clock_ax, clock_ay, clock_dx, clock_dy, digit_h, digit_offset; - int icon_width, digit_width; + int icon_width, icon_height, digit_width; int h_spacer, v_spacer; int vol_ay, vol_height; CFrameBuffer *frameBuffer; @@ -122,6 +122,7 @@ class CVolumeHelper Font** vb_font; void getSpacer(int *h, int *v) { *h = h_spacer; *v = v_spacer; } + int getVolIconHeight() {return icon_height;} void getDimensions(int *_x, int *_y, int *_sw, int *_sh, int *_iw, int *_dw) { *_x = x; *_y = y; *_sw = sw; *_sh = sh; *_iw = icon_width; *_dw = digit_width; } void getMuteIconDimensions(int *_x, int *_y, int *w, int *h) { *_x = mute_ax; *_y = mute_ay+mute_corrY; *w = mute_dx; *h = mute_dy; } void getInfoClockDimensions(int *_x, int *_y, int *w, int *h, int *d_h, int *d_o) { *_x = clock_ax; *_y = clock_ay; *w = clock_dx; *h = clock_dy, *d_h = digit_h, *d_o = digit_offset; } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index c14d8f6a3..a37f5d23e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -396,6 +396,7 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.scrambled_message = configfile.getBool("scrambled_message", true ); g_settings.volume_pos = configfile.getInt32("volume_pos", CVolumeBar::VOLUMEBAR_POS_TOP_RIGHT ); g_settings.volume_digits = configfile.getBool("volume_digits", true); + g_settings.volume_size = configfile.getInt32("volume_size", 26 ); g_settings.menu_pos = configfile.getInt32("menu_pos", CMenuWidget::MENU_POS_CENTER); g_settings.show_menu_hints = configfile.getBool("show_menu_hints", true); g_settings.infobar_show_sysfs_hdd = configfile.getBool("infobar_show_sysfs_hdd" , true ); @@ -877,6 +878,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setBool("scrambled_message" , g_settings.scrambled_message ); configfile.setInt32("volume_pos" , g_settings.volume_pos ); configfile.setBool("volume_digits", g_settings.volume_digits); + configfile.setInt32("volume_size" , g_settings.volume_size); configfile.setInt32("menu_pos" , g_settings.menu_pos); configfile.setBool("show_menu_hints" , g_settings.show_menu_hints); configfile.setInt32("infobar_show_sysfs_hdd" , g_settings.infobar_show_sysfs_hdd ); diff --git a/src/system/locals.h b/src/system/locals.h index cbb7a3396..8aa0adbfb 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -447,6 +447,7 @@ typedef enum LOCALE_EXTRA_USE_GOTOXX, LOCALE_EXTRA_VOLUME_DIGITS, LOCALE_EXTRA_VOLUME_POS, + LOCALE_EXTRA_VOLUME_SIZE, LOCALE_EXTRA_WEST, LOCALE_EXTRA_ZAP_CYCLE, LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, @@ -1162,6 +1163,7 @@ typedef enum LOCALE_MENU_HINT_VOLUME, LOCALE_MENU_HINT_VOLUME_DIGITS, LOCALE_MENU_HINT_VOLUME_POS, + LOCALE_MENU_HINT_VOLUME_SIZE, LOCALE_MENU_HINT_YTPLAY, LOCALE_MENU_HINT_ZAP_CYCLE, LOCALE_MENU_NEXT, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 472cddbf9..1c2c2d49b 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -447,6 +447,7 @@ const char * locale_real_names[] = "extra.use_gotoxx", "extra.volume_digits", "extra.volume_pos", + "extra.volume_size", "extra.west", "extra.zap_cycle", "extra.zapit_fe_timeout", @@ -1162,6 +1163,7 @@ const char * locale_real_names[] = "menu.hint_volume", "menu.hint_volume_digits", "menu.hint_volume_pos", + "menu.hint_volume_size", "menu.hint_ytplay", "menu.hint_zap_cycle", "menu.next", diff --git a/src/system/settings.h b/src/system/settings.h index 1ce6f1566..0da0bda86 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -84,6 +84,7 @@ struct SNeutrinoSettings int scrambled_message; int volume_pos; int volume_digits; + int volume_size; int show_mute_icon; int menu_pos; int show_menu_hints; From aca97e210e4ebde189d9f048363bd31dba661cb3 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Wed, 3 Jul 2013 01:15:28 +0200 Subject: [PATCH 051/142] CNeutrinoFonts: Fix segfault, when fontfile changed - use std::string for font and style names --- src/driver/neutrinofonts.cpp | 54 ++++++++++++++++++++++-------------- src/driver/neutrinofonts.h | 7 +++-- src/neutrino.cpp | 2 +- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp index 93e34f32d..a20d03024 100644 --- a/src/driver/neutrinofonts.cpp +++ b/src/driver/neutrinofonts.cpp @@ -52,7 +52,14 @@ const font_sizes_struct signal_font = {LOCALE_FONTSIZE_INFOBAR_SMALL, 14, CNeutr CNeutrinoFonts::CNeutrinoFonts() { useDigitOffset = false; - memset(&fontDescr, 0, sizeof(neutrino_font_descr_struct)); + + fontDescr.name = ""; + fontDescr.filename = ""; + fontDescr.size_offset = 0; + old_fontDescr.name = ""; + old_fontDescr.filename = ""; + old_fontDescr.size_offset = 0; + InitDynFonts(); } @@ -100,36 +107,37 @@ void CNeutrinoFonts::SetupNeutrinoFonts() delete g_fontRenderer; g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100); - if (fontDescr.filename != NULL) - free((void *)fontDescr.filename); + old_fontDescr.size_offset = fontDescr.size_offset; + old_fontDescr.filename = fontDescr.filename; + fontDescr.filename = ""; printf("[neutrino] settings font file %s\n", g_settings.font_file); if (access(g_settings.font_file, F_OK)) { if (!access(FONTDIR"/neutrino.ttf", F_OK)) { - fontDescr.filename = strdup(FONTDIR"/neutrino.ttf"); - strcpy(g_settings.font_file, fontDescr.filename); + fontDescr.filename = FONTDIR"/neutrino.ttf"; + strcpy(g_settings.font_file, fontDescr.filename.c_str()); } else { fprintf( stderr,"[neutrino] font file [%s] not found\n neutrino exit\n",FONTDIR"/neutrino.ttf"); _exit(0); } } else - fontDescr.filename = strdup(g_settings.font_file); - fontStyle[0] = g_fontRenderer->AddFont(fontDescr.filename); + fontDescr.filename = g_settings.font_file; + fontStyle[0] = g_fontRenderer->AddFont(fontDescr.filename.c_str()); - if (fontDescr.name != NULL) - free((void *)fontDescr.name); - fontDescr.name = strdup(g_fontRenderer->getFamily(fontDescr.filename).c_str()); - printf("[neutrino] font family %s\n", fontDescr.name); + old_fontDescr.name = fontDescr.name; + fontDescr.name = ""; + fontDescr.name = g_fontRenderer->getFamily(fontDescr.filename.c_str()); + printf("[neutrino] font family %s\n", fontDescr.name.c_str()); fontStyle[1] = "Bold Regular"; - g_fontRenderer->AddFont(fontDescr.filename, true); // make italics + g_fontRenderer->AddFont(fontDescr.filename.c_str(), true); // make italics fontStyle[2] = "Italic"; for (int i = 0; i < SNeutrinoSettings::FONT_TYPE_COUNT; i++) { if (g_Font[i]) delete g_Font[i]; - g_Font[i] = g_fontRenderer->getFont(fontDescr.name, fontStyle[neutrino_font[i].style], CNeutrinoApp::getInstance()->getConfigFile()->getInt32(locale_real_names[neutrino_font[i].name], neutrino_font[i].defaultsize) + neutrino_font[i].size_offset * fontDescr.size_offset); + g_Font[i] = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[neutrino_font[i].style].c_str(), CNeutrinoApp::getInstance()->getConfigFile()->getInt32(locale_real_names[neutrino_font[i].name], neutrino_font[i].defaultsize) + neutrino_font[i].size_offset * fontDescr.size_offset); } - g_SignalFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[signal_font.style], signal_font.defaultsize + signal_font.size_offset * fontDescr.size_offset); + g_SignalFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[signal_font.style].c_str(), signal_font.defaultsize + signal_font.size_offset * fontDescr.size_offset); } void CNeutrinoFonts::refreshDynFonts() @@ -160,12 +168,16 @@ void CNeutrinoFonts::refreshDynFont(int dx, int dy, std::string text, int style, useDigitOffset = dyn_font->useDigitOffset; int dynSize = getDynFontSize(dx, dy, text, style); useDigitOffset = tmp; - if (dyn_font->size == dynSize) + if ((dyn_font->size == dynSize) && (old_fontDescr.name == fontDescr.name) && (old_fontDescr.filename == fontDescr.filename)) return; + old_fontDescr.filename = fontDescr.filename; + old_fontDescr.name = fontDescr.name; + old_fontDescr.size_offset = fontDescr.size_offset; + if (dyn_font->font != NULL) delete dyn_font->font; - Font *dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + Font *dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); dyn_font->font = dynFont; dyn_font->size = dynSize; printf("##### [%s] change %s_font size old %d to new %d, index: %u\n", __FUNCTION__, (isShare)?"share":"dyn", oldSize, dyn_font->size, index); @@ -191,7 +203,7 @@ int CNeutrinoFonts::getDynFontSize(int dx, int dy, std::string text, int style) while (1) { if (dynFont != NULL) delete dynFont; - dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); // calculate height & width _height = getFontHeight(dynFont); std::string tmpText = text; @@ -258,7 +270,7 @@ Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int { if ((dx <= 0) && (dy <= 0)) return NULL; - if ((fontDescr.name == NULL) || (fontDescr.filename == NULL) || (g_fontRenderer == NULL)) + if ((fontDescr.name == "") || (fontDescr.filename == "") || (g_fontRenderer == NULL)) SetupNeutrinoFonts(); int dynSize = getDynFontSize(dx, dy, text, style); @@ -273,7 +285,7 @@ Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int return &(v_dyn_fonts[f_id].font); } - dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); if (v_dyn_fonts[f_id].font != NULL) delete v_dyn_fonts[f_id].font; v_dyn_fonts[f_id].dx = dx; @@ -299,7 +311,7 @@ Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int s { if ((dx <= 0) && (dy <= 0)) return NULL; - if ((fontDescr.name == NULL) || (fontDescr.filename == NULL) || (g_fontRenderer == NULL)) + if ((fontDescr.name == "") || (fontDescr.filename == "") || (g_fontRenderer == NULL)) SetupNeutrinoFonts(); int dynSize = getDynFontSize(dx, dy, text, style); @@ -327,7 +339,7 @@ Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int s ret = &(v_share_fonts[i].font); } else { - dynFont = g_fontRenderer->getFont(fontDescr.name, fontStyle[style], dynSize); + dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); dyn_font_t dyn_font; dyn_font.dx = dx; dyn_font.dy = dy; diff --git a/src/driver/neutrinofonts.h b/src/driver/neutrinofonts.h index 1aefa4fcd..959e7b9e5 100644 --- a/src/driver/neutrinofonts.h +++ b/src/driver/neutrinofonts.h @@ -28,8 +28,8 @@ #define __neutrinofonts__ typedef struct neutrino_font_descr { - const char *name; - const char *filename; + std::string name; + std::string filename; int size_offset; } neutrino_font_descr_struct; @@ -51,7 +51,7 @@ typedef struct font_sizes_groups { class CNeutrinoFonts { private: - const char * fontStyle[3]; + std::string fontStyle[3]; typedef struct dyn_font_t { @@ -97,6 +97,7 @@ class CNeutrinoFonts static CNeutrinoFonts* getInstance(); neutrino_font_descr_struct fontDescr; + neutrino_font_descr_struct old_fontDescr; void SetupNeutrinoFonts(); void refreshDynFonts(); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index a37f5d23e..cdcdfed51 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1742,7 +1742,7 @@ TIMER_START(); CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_NEUTRINO_STARTING)); hintBox->paint(); - CVFD::getInstance()->init(neutrinoFonts->fontDescr.filename, neutrinoFonts->fontDescr.name); + CVFD::getInstance()->init(neutrinoFonts->fontDescr.filename.c_str(), neutrinoFonts->fontDescr.name.c_str()); CVFD::getInstance()->Clear(); CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_NEUTRINO_STARTING)); CVFD::getInstance()->setBacklight(g_settings.backlight_tv); From a1fe4298c372bb916c3003957f1197c77d6ab85d Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 4 Jul 2013 16:12:16 +0200 Subject: [PATCH 052/142] CNeutrinoFonts: Fix segfault, when font size changed --- src/driver/neutrinofonts.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp index a20d03024..0b429bb17 100644 --- a/src/driver/neutrinofonts.cpp +++ b/src/driver/neutrinofonts.cpp @@ -155,6 +155,10 @@ void CNeutrinoFonts::refreshDynFonts() refreshDynFont(v_dyn_fonts[i].dx, v_dyn_fonts[i].dy, v_dyn_fonts[i].text, v_dyn_fonts[i].style, i, false); } } + + old_fontDescr.filename = fontDescr.filename; + old_fontDescr.name = fontDescr.name; + old_fontDescr.size_offset = fontDescr.size_offset; } void CNeutrinoFonts::refreshDynFont(int dx, int dy, std::string text, int style, int index, bool isShare) @@ -168,19 +172,18 @@ void CNeutrinoFonts::refreshDynFont(int dx, int dy, std::string text, int style, useDigitOffset = dyn_font->useDigitOffset; int dynSize = getDynFontSize(dx, dy, text, style); useDigitOffset = tmp; - if ((dyn_font->size == dynSize) && (old_fontDescr.name == fontDescr.name) && (old_fontDescr.filename == fontDescr.filename)) - return; - - old_fontDescr.filename = fontDescr.filename; - old_fontDescr.name = fontDescr.name; - old_fontDescr.size_offset = fontDescr.size_offset; +// if ((dyn_font->size == dynSize) && (old_fontDescr.name == fontDescr.name) && (old_fontDescr.filename == fontDescr.filename)) +// return; if (dyn_font->font != NULL) delete dyn_font->font; Font *dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); dyn_font->font = dynFont; dyn_font->size = dynSize; - printf("##### [%s] change %s_font size old %d to new %d, index: %u\n", __FUNCTION__, (isShare)?"share":"dyn", oldSize, dyn_font->size, index); + if (dyn_font->size != dynSize) + printf("##### [%s] change %s_font size old %d to new %d, index: %u\n", __FUNCTION__, (isShare)?"share":"dyn", oldSize, dyn_font->size, index); + else + printf("##### [%s] refresh %s_font size %d, index: %u\n", __FUNCTION__, (isShare)?"share":"dyn", dyn_font->size, index); } int CNeutrinoFonts::getFontHeight(Font* fnt) From 2c3b86baa23009f2ffdc9a9bc4843c4524564ca0 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 21 Jul 2013 22:31:10 +0200 Subject: [PATCH 053/142] CComponentsText: add missing init in constructor --- src/gui/components/cc_item_text.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index 34cd31277..c0dbd024a 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -42,6 +42,8 @@ CComponentsText::CComponentsText() { //CComponentsText initVarText(); + + initCCText(); } CComponentsText::CComponentsText( const int x_pos, const int y_pos, const int w, const int h, From 42bee0ae0b98585ee3cdc4f011aca81e7672e0dd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 22 Jul 2013 13:59:42 +0200 Subject: [PATCH 054/142] Signalbars: add new classes to show signal bars, based up CComponents --- src/gui/widget/Makefile.am | 3 +- src/gui/widget/signalbars.cpp | 321 ++++++++++++++++++++++++++++++++++ src/gui/widget/signalbars.h | 267 ++++++++++++++++++++++++++++ 3 files changed, 590 insertions(+), 1 deletion(-) create mode 100644 src/gui/widget/signalbars.cpp create mode 100644 src/gui/widget/signalbars.h diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 608af6216..24ef50127 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -22,7 +22,7 @@ if BOXTYPE_TRIPLE INCLUDES += -I$(top_srcdir)/lib/libtriple endif -noinst_LIBRARIES = libneutrino_gui_widget.a libneutrino_gui_widget2.a +noinst_LIBRARIES = libneutrino_gui_widget.a libneutrino_gui_widget2.a libneutrino_gui_widget_a_SOURCES = \ buttons.cpp \ @@ -38,6 +38,7 @@ libneutrino_gui_widget_a_SOURCES = \ messagebox.cpp \ mountchooser.cpp \ msgbox.cpp \ + signalbars.cpp \ stringinput.cpp \ stringinput_ext.cpp \ textbox.cpp diff --git a/src/gui/widget/signalbars.cpp b/src/gui/widget/signalbars.cpp new file mode 100644 index 000000000..1a0dc3564 --- /dev/null +++ b/src/gui/widget/signalbars.cpp @@ -0,0 +1,321 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Class for signalbar based up CComponent classes. + Copyright (C) 2013, Thilo Graf 'dbt' + + License: GPL + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include "signalbars.h" +#include + +#define SB_MIN_HEIGHT 10 + +using namespace std; + +CSignalBar::CSignalBar() +{ + initVarSigBar(); +} + +CSignalBar::CSignalBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref) +{ + initVarSigBar(); + sb_frontend = frontend_ref; + x = xpos; + y = ypos; + width = w; + height = max(h, height); + + initSBItems(); +} + +void CSignalBar::initVarSigBar() +{ + initVarForm(); + corner_rad = 0; + corner_type = 0; + append_h_offset = 4; + append_v_offset = 0; + + sb_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]; + sb_item_height = sb_font->getHeight(); + height = sb_item_height; + sb_scale_height = SB_MIN_HEIGHT; + sb_caption_color= COL_MENUCONTENT_TEXT; + + initDimensions(); + + sb_lastsig = 0; + sb_signal = 0; + + sb_frontend = NULL; + sb_scale = NULL; + sb_vlbl = NULL; + sb_lbl = NULL; + sb_name = "SIG"; +} + +void CSignalBar::initDimensions() +{ + //set current required dimensions + sb_vlbl_width = sb_font->getRenderWidth ("100%", true); + sb_lbl_width = sb_font->getRenderWidth ("XXXXX", true); + sb_scale_width = width-sb_vlbl_width-sb_lbl_width-corner_rad; + sb_item_height = max(sb_scale_height, sb_font->getHeight()); + height = max(height, sb_item_height); +} + +void CSignalBar::initSBItems() +{ + if (cc_parent){ + //use backround color of parent form if signalbar is embedded + col_body = cc_parent->getColorBody(); + + //and set required color for text to name label + CSignalBox *sbx = static_cast(cc_parent); + sb_caption_color = sbx->getTextColor(); + } + + //reinit dimensions + initDimensions(); + + //init items scale, value and name + initSBarScale(); + initSBarValue(); + initSBarName(); +} + +void CSignalBar::Refresh() +{ + //get current value from frontend + sb_signal = sb_frontend->getSignalStrength(); + + //reinit items with current values + initSBItems(); +} + +void CSignalBar::initSBarScale() +{ + //create scale object if required + if (sb_scale == NULL){ + sb_scale = new CProgressBar(); + //we want colored scale! + sb_scale->setBlink(); + } + + //move and set dimensions + int sb_y = height/2 - sb_scale_height/2 ; + sb_scale->setDimensionsAll(append_v_offset, sb_y, sb_scale_width, sb_scale_height); + + //add scale object to container + if(!isAdded(sb_scale)) + addCCItem(sb_scale); + +} + +void CSignalBar::initSBarValue() +{ + //create value label object with basic properties + if (sb_vlbl == NULL){ + sb_vlbl = new CComponentsLabel(); + sb_vlbl->doPaintBg(false); + sb_vlbl->setText("0%", CTextBox::NO_AUTO_LINEBREAK, sb_font); + } + + //move and set dimensions + int sb_y = height/2 - sb_item_height/2 ; + sb_vlbl->setDimensionsAll(CC_APPEND, sb_y, sb_vlbl_width, sb_item_height); + + //set current text color + sb_vlbl->setTextColor(sb_caption_color); + + //add value label object to container + if (!isAdded(sb_vlbl)) + addCCItem(sb_vlbl); + +} + +void CSignalBar::initSBarName() +{ + //create name label object with basic properties + if (sb_lbl == NULL){ + sb_lbl = new CComponentsLabel(); + //paint no backround + sb_lbl->doPaintBg(false); + } + + //move and set dimensions + int sb_y = sb_vlbl->getYPos() ; + sb_lbl->setDimensionsAll(CC_APPEND, sb_y, sb_lbl_width, sb_item_height); + sb_lbl->setText(sb_name, CTextBox::NO_AUTO_LINEBREAK, sb_font); + + //set current text color + sb_lbl->setTextColor(sb_caption_color); + + //add name label object to container + if (!isAdded(sb_lbl)) + addCCItem(sb_lbl); +} + + +void CSignalBar::Repaint() +{ + //format signal values + int sig; + sig = (sb_signal & 0xFFFF) * 100 / 65535; + + //exit if value too small + if(sig < 5) + return; + + //assign current value to scale object and paint new value + if (sb_lastsig != sig) { + sb_lastsig = sig; + sb_scale->setValues(sig, 100); + + //string is required + ostringstream i_str; + i_str << sig; + string percent(i_str.str()); + percent += "%"; + sb_vlbl->setText(percent, CTextBox::NO_AUTO_LINEBREAK | CTextBox::CENTER, sb_font); + + //we must force paint backround, because of changing values + sb_vlbl->doPaintBg(true); + sb_vlbl->forceTextPaint(); + sb_vlbl->doPaintTextBoxBg(true); + sb_vlbl->setColorBody(col_body); + + //repaint labels + for(size_t i=0; iv_cc_items.size(); i++) + v_cc_items[i]->paint(false); + } +} + +//******************************************************************************************************************************* +CSignalNoiseRatioBar::CSignalNoiseRatioBar() +{ + initVarSnrBar(); +} + +CSignalNoiseRatioBar::CSignalNoiseRatioBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref) +{ + initVarSnrBar(); + sb_frontend = frontend_ref; + x = xpos; + y = ypos; + width = w; + height = max(h, height); + + initSBItems(); +} + +void CSignalNoiseRatioBar::initVarSnrBar() +{ + initVarSigBar(); + sb_name = "SNR"; +} + +void CSignalNoiseRatioBar::Refresh() +{ + //get current value from frontend + sb_signal = sb_frontend->getSignalNoiseRatio(); + + //reinit items with current values + initSBItems(); +} + + +//********************************************************************************************************************** +CSignalBox::CSignalBox(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref) +{ + initVarSigBox(); + + sbx_frontend = frontend_ref; + x = xpos; + y = ypos; + width = w; + height = max(h, height); + + sbx_bar_height = height/2; + sbx_bar_width = width-2*corner_rad; + + sbar = new CSignalBar(sbx_bar_x, 0, sbx_bar_width, sbx_bar_height, sbx_frontend); + sbar->doPaintBg(false); + addCCItem(sbar); + + snrbar = new CSignalNoiseRatioBar(sbx_bar_x, CC_APPEND, sbx_bar_width, sbx_bar_height, sbx_frontend); + snrbar->doPaintBg(false); + addCCItem(snrbar); + + initSignalItems(); +} + +void CSignalBox::initVarSigBox() +{ + initVarForm(); + corner_rad = 0; + + sbx_frontend = NULL; + sbar = NULL; + snrbar = NULL; + height = 5* SB_MIN_HEIGHT; + sbx_bar_height = height/2; + sbx_bar_x = corner_rad; + sbx_caption_color = COL_MENUCONTENT_TEXT; +} + +void CSignalBox::initSignalItems() +{ + //set current properties for items + int cor_rad = corner_rad/2-fr_thickness; + + sbar->setDimensionsAll(sbx_bar_x, 0, sbx_bar_width, sbx_bar_height); + sbar->setCornerRadius(cor_rad); + sbar->setFrontEnd(sbx_frontend); + + snrbar->setDimensionsAll(sbx_bar_x, CC_APPEND, sbx_bar_width, sbx_bar_height); + snrbar->setCornerRadius(cor_rad); + snrbar->setFrontEnd(sbx_frontend); +} + +void CSignalBox::Refresh() +{ + //reinit properties of items + initSignalItems(); + + //refresh properties of items + sbar->Refresh(); + snrbar->Refresh(); +} + +void CSignalBox::Repaint() +{ + //repaint items + sbar->Repaint(); + snrbar->Repaint(); +} diff --git a/src/gui/widget/signalbars.h b/src/gui/widget/signalbars.h new file mode 100644 index 000000000..85501f2cd --- /dev/null +++ b/src/gui/widget/signalbars.h @@ -0,0 +1,267 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Class for signalbar based up CComponent classes. + Copyright (C) 2013, Thilo Graf 'dbt' + + License: GPL + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __SIGNALBARS_H__ +#define __SIGNALBARS_H__ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + + +/// Basic class for signalbars +/*! +Basic attributes and member functions for items. +These class provides basic attributes and members to show frontend values in signalbars. +CSignalBar() and their sub classes based up CComponentsForm() and are usable like other CComponentsItems() + +CSignalBar() is intended to show signal rate. +*/ + +class CSignalBar : public CComponentsForm +{ + protected: + ///object: current frontend + CFrontend *sb_frontend; + ///object: scale bar + CProgressBar *sb_scale; + ///object: value caption + CComponentsLabel *sb_vlbl; + ///object: caption for signal name + CComponentsLabel *sb_lbl; + ///object: current font + Font *sb_font; + ///property: text color, see also setTextColor() + fb_pixel_t sb_caption_color; + + ///property: height of items + int sb_item_height; + ///property: width of progressbar + int sb_scale_width; + ///property: height of progressbar + int sb_scale_height; + ///property: width of value caption + int sb_vlbl_width; + ///property: width of caption + int sb_lbl_width; + + ///cache last assingned signal value + int sb_lastsig; + ///current signal value + uint16_t sb_signal; + + ///initialize all needed basich attributes and objects + void initVarSigBar(); + ///initianlize position and dimensions of signalbar container + void initDimensions(); + ///initialize scale object + void initSBarScale(); + ///initialize value caption object, this contains the value of current frontend data, signal or noise rate + void initSBarValue(); + ///initialize caption object, this contains the unit (e.g %) or name of value (e.g. SIG) + void initSBarName(); + + ///initialize all required objects at once, see also Refresh() + void initSBItems(); + + ///property: contains the name of signal type in the caption object, see also setName() + std::string sb_name; + + public: + CSignalBar(); + ///basic component class constructor for signal. + CSignalBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref); + + ///assigns the current used frontend, simplified a tuner object, see frontend_c.h + virtual void setFrontEnd(CFrontend *frontend_ref){sb_frontend = frontend_ref;}; + ///assigns font for caption + virtual void setTextFont(Font* font_text){sb_font = font_text;}; + ///sets the caption color, see also property 'sb_caption_color' + virtual void setTextColor(const fb_pixel_t& caption_color){ sb_caption_color = caption_color;}; + ///assigns the height of scale + virtual void setScaleHeight(const int& scale_height){sb_scale_height = scale_height;}; + ///assigns the name of signal value in the caption object, see also sb_name + virtual void setName(const std::string& name){sb_name = name;}; + + ///returns the scale object, type = CProgressBar* + virtual CProgressBar* getScaleObject(){return sb_scale;}; + ///returns the caption object, type = CComponentsLabel* + virtual CComponentsLabel* getLabelObject(){return sb_lbl;}; + + ///refresh current item properties, use this before Repaint(). + void Refresh(); + ///reinitialize current signal values and paint new values, required after Refresh() + virtual void Repaint(); + +}; + +/// Sub class of CSignalBar() +/*! +This class use basic attributes and members from CSignalBar() to show frontend values. + +CSignalNoiseRatioBar() is intended to show signal noise ratio value. +*/ + +class CSignalNoiseRatioBar : public CSignalBar +{ + protected: + ///initialize all needed basic attributes and objects + void initVarSnrBar(); + + public: + CSignalNoiseRatioBar(); + ///basic component class constructor for signal noise ratio. + CSignalNoiseRatioBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref); + + ///refresh current item properties, use this before repaintSignalBar(). + void Refresh(); +}; + +/// Class CSignalBox() provides CSignalBar(), CSignalNoiseRatioBar() scales at once. +/*! +Provides basic attributes and member functions for CComponentItems in +additional of CSignalBar()- and CSignalNoiseRatioBar()-objects. + + +To add a signalbox object to your code add this to a header file: +#include + +class CSampleClass +{ + private: + //other stuff; + CSignalBox * signalbox; + + public: + CSampleClass(); + ~CSampleClass(); + void showSNR(); + + //other stuff; + +}; + + +//add this to your costructor into the code file: +CSampleClass::CSampleClass() +{ + //other stuff; + signalbox = NULL; +} + +CStreamInfo2::~CStreamInfo2 () +{ + //other stuff to clean; + delete signalbox; + //other stuff to clean; +} + +void CSampleClass::showSNR() +{ + if (signalbox == NULL){ + signalbox = new CSignalBox(10, 100, 500, 38, frontend); + signalbox->setCornerRadius(0); +// signalbox->setColorBody(COL_BLACK); + signalbox->setColorBody(COL_MENUHEAD_PLUS_0); + signalbox->doPaintBg(false); +//if you want to add the object to a CC-Container (e.g. CComponentsWindow()), remove this line: + signalbox->paint(false); +//and add this lines: +// if (!isAdded(signalbox)) +// addCCItem(signalbox); +//Note: signal box object deallocate together with the CC-Container! + } + else{ + signalbox->Refresh(); + signalbox->Repaint(); + } + } + +void CSampleClass::hide () +{ + //other code; + +//Note: not required if signalbox is added to a CC-Container! + signalbox->hide(true); + delete signalbox; + signalbox = NULL; + + //other code; +} + +*/ + +class CSignalBox : public CComponentsForm +{ + protected: + ///object: current frontend + CFrontend *sbx_frontend; + ///object: current signalbar + CSignalBar *sbar; + ///object: current signal noise ratio bar + CSignalNoiseRatioBar *snrbar; + ///property: height of signalbars + int sbx_bar_height; + ///property: width of signalbars + int sbx_bar_width; + ///property: x position of signalbars + int sbx_bar_x; + ///property: text color, see also setTextColor() + fb_pixel_t sbx_caption_color; + ///initialize all needed basic attributes and objects + void initVarSigBox(); + + void initSignalItems(); + + public: + ///class constructor for signal noise ratio. + CSignalBox(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref); + + ///returns the signal object, type = CSignalBar* + virtual CSignalBar* getScaleObject(){return sbar;}; + ///returns the signal noise ratio object, type = CSignalNoiseRatioBar* + virtual CSignalNoiseRatioBar* getLabelObject(){return snrbar;}; + + ///sets the caption color of signalbars, see also property 'sbx_caption_color' + void setTextColor(const fb_pixel_t& caption_color){ sbx_caption_color = caption_color;}; + ///sets the caption color of signalbars, see also property 'sbx_caption_color' + fb_pixel_t getTextColor(){return sbx_caption_color;}; + + ///refresh all current snr value, use this before paint(). + void Refresh(); + + ///paint items with new values, required after Refresh() + void Repaint(); +}; + +#endif From b7b74ec718220bac212ca420ee1d081b3e453d2b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 22 Jul 2013 14:14:36 +0200 Subject: [PATCH 055/142] CTextBox: set the correct H/V border Signed-off-by: Thilo Graf --- src/gui/widget/textbox.cpp | 53 ++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index 342cc64bb..d45ac125c 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -102,7 +102,7 @@ CTextBox::CTextBox(const char * text, Font* font_text, const int pmode, //TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__); //TRACE(" CTextBox::m_nFontTextHeight: %d\t\r\n",m_nFontTextHeight); - + //Initialise the window frames first and than refresh text line array initFramesAndTextArray(); } @@ -114,7 +114,7 @@ CTextBox::CTextBox(const char * text) if(text != NULL) m_cText = *text; - + //TRACE_1("[CTextBox] %s Line %d text: %s\r\n", __FUNCTION__, __LINE__, text); //Initialise the window frames first and than refresh text line array @@ -125,7 +125,7 @@ CTextBox::CTextBox() { //TRACE("[CTextBox] new\r\n"); initVar(); - + //Initialise the window frames first and than refresh text line array initFramesAndTextArray(); } @@ -142,7 +142,7 @@ void CTextBox::initVar(void) { //TRACE("[CTextBox]->InitVar\r\n"); frameBuffer = NULL; - + m_showTextFrame = 0; m_nNrOfNewLine = 0; m_nMaxLineWidth = 0; @@ -178,7 +178,7 @@ void CTextBox::initVar(void) m_nPaintBackground = true; m_nBgRadius = 0; m_nBgRadiusType = CORNER_ALL; - + m_cLineArray.clear(); // max_width = 0; @@ -246,11 +246,10 @@ void CTextBox::reSizeMainFrameWidth(int textWidth) int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*text_Hborder_width; if( iNewWindowWidth > m_nMaxWidth) - iNewWindowWidth = m_nMaxWidth; - + iNewWindowWidth = m_nMaxWidth; + if( iNewWindowWidth < m_nMinWidth) iNewWindowWidth = m_nMinWidth; - m_cFrame.iWidth = iNewWindowWidth; @@ -266,7 +265,7 @@ void CTextBox::reSizeMainFrameHeight(int textHeight) if( iNewWindowHeight > m_nMaxHeight) iNewWindowHeight = m_nMaxHeight; - + if( iNewWindowHeight < m_nMinHeight) iNewWindowHeight = m_nMinHeight; @@ -351,7 +350,7 @@ void CTextBox::refreshTextLineArray(void) /* If not autowidth, we just take the actuall textframe width */ lineBreakWidth = std::max(m_nMaxWidth, m_cFrameTextRel.iWidth - 2*text_Hborder_width); } - + if(m_nMaxTextWidth) lineBreakWidth = m_nMaxTextWidth - 2*text_Hborder_width; @@ -416,11 +415,11 @@ void CTextBox::refreshTextLineArray(void) aktLine += aktWord; //set current line width aktWidth += aktWordWidth; - + //set max text width, if required if (aktWidth > m_nMaxTextWidth) m_nMaxTextWidth = aktWidth; - + //TRACE_1(" aktLine : %s\r\n",aktLine.c_str()); //TRACE_1(" aktWidth: %d aktWordWidth:%d\r\n",aktWidth,aktWordWidth); @@ -445,7 +444,7 @@ void CTextBox::refreshTextLineArray(void) /* check if we have to recalculate the window frame size, due to auto width and auto height */ if( m_nMode & AUTO_WIDTH) { - reSizeMainFrameWidth(m_nMaxTextWidth); + reSizeMainFrameWidth(m_nMaxTextWidth); } if(m_nMode & AUTO_HIGH) @@ -479,7 +478,7 @@ void CTextBox::refreshScroll(void) { if(!(m_nMode & SCROLL)) return; - + if( frameBuffer == NULL) return; @@ -515,40 +514,38 @@ void CTextBox::refreshText(void) if (m_nPaintBackground) frameBuffer->paintBoxRel(m_cFrameTextRel.iX+m_cFrame.iX, /*m_cFrameTextRel.iY+*/m_cFrame.iY, m_cFrameTextRel.iWidth, m_cFrameTextRel.iHeight, m_textBackgroundColor, m_nBgRadius, m_nBgRadiusType); - + if( m_nNrOfLines <= 0) return; - - int y = m_cFrameTextRel.iY + text_Vborder_width; + int y = m_cFrameTextRel.iY; int i; int x_center = 0; // set text y position if (m_nMode & TOP) // move to top of frame - y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * m_nLinesPerPage) >> 1) - text_Vborder_width; + y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * m_nLinesPerPage) >> 1); else if (m_nMode & BOTTOM) // move to bottom of frame - y += m_cFrameTextRel.iHeight - text_Vborder_width - (m_nNrOfLines > 1 ? (m_nNrOfLines-1)*m_nFontTextHeight : 0) ; + y += m_cFrameTextRel.iHeight - (m_nNrOfLines > 1 ? (m_nNrOfLines-1)*m_nFontTextHeight : 0) - text_Vborder_width; //m_nFontTextHeight + text_Vborder_width /*- ((m_cFrameTextRel.iHeight + m_nFontTextHeight*/ * m_nLinesPerPage/*) >> 1)*/; else // fit into mid of frame space - y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * std::min(m_nLinesPerPage, m_nNrOfLines)) >> 1) - text_Vborder_width; + y += m_nFontTextHeight + ((m_cFrameTextRel.iHeight - m_nFontTextHeight * std::min(m_nLinesPerPage, m_nNrOfLines)) >> 1); for(i = m_nCurrentLine; i < m_nNrOfLines && i < m_nCurrentLine + m_nLinesPerPage; i++) { - //calculate centered xpos if( m_nMode & CENTER ){ - x_center = (m_cFrameTextRel.iWidth - m_pcFontText->getRenderWidth(m_cLineArray[i], true))>>1; + x_center = ((m_cFrameTextRel.iWidth - m_pcFontText->getRenderWidth(m_cLineArray[i], true))>>1) - text_Hborder_width; } else if ( m_nMode & RIGHT ){ - x_center = (m_cFrameTextRel.iWidth - m_pcFontText->getRenderWidth(m_cLineArray[i], true)); + x_center = ((m_cFrameTextRel.iWidth - m_pcFontText->getRenderWidth(m_cLineArray[i], true)) - text_Hborder_width*2); if ( m_nMode & SCROLL ) x_center -= SCROLL_FRAME_WIDTH; } - + //TRACE("[CTextBox] %s Line %d m_cFrame.iX %d m_cFrameTextRel.iX %d\r\n", __FUNCTION__, __LINE__, m_cFrame.iX, m_cFrameTextRel.iX); m_pcFontText->RenderString(m_cFrame.iX + m_cFrameTextRel.iX + text_Hborder_width + x_center, y+m_cFrame.iY, m_cFrameTextRel.iWidth, m_cLineArray[i].c_str(), @@ -562,7 +559,7 @@ void CTextBox::scrollPageDown(const int pages) //TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__); if( !(m_nMode & SCROLL)) return; - + if( m_nNrOfLines <= 0) return; @@ -585,7 +582,7 @@ void CTextBox::scrollPageUp(const int pages) //TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__); if( !(m_nMode & SCROLL)) return; - + if( m_nNrOfLines <= 0) return; @@ -663,9 +660,9 @@ void CTextBox::hide (void) //TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__); if(frameBuffer == NULL) return; - + if (m_nPaintBackground) frameBuffer->paintBackgroundBoxRel(m_cFrame.iX, m_cFrame.iY, m_cFrame.iWidth, m_cFrame.iHeight); - + frameBuffer = NULL; } From 7d1fd50cfb198c1bf22f13a8498c27b9b32a9dfc Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Mon, 22 Jul 2013 18:25:02 +0200 Subject: [PATCH 056/142] streaminfo2: Fix text color of the signal bars - supplement to c60c5c5ce39c2555c233f699adddf61a5e5b2511 --- src/gui/streaminfo2.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 7def6b751..983684298 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -920,8 +920,8 @@ void CStreamInfo2::showSNR () posx = posx + barwidth + 3; frameBuffer->paintBoxRel(posx, posy -1, sw, mheight-8, COL_MENUHEAD_PLUS_0); - g_Font[font_info]->RenderString (posx + 2, posy + mheight-5, sw, percent, COL_INFOBAR); - g_Font[font_info]->RenderString (posx + 2 + sw, posy + mheight-5, pw, "SIG", COL_INFOBAR); + g_Font[font_info]->RenderString (posx + 2, posy + mheight-5, sw, percent, COL_INFOBAR_TEXT); + g_Font[font_info]->RenderString (posx + 2 + sw, posy + mheight-5, pw, "SIG", COL_INFOBAR_TEXT); } if (lastsnr != snr) { lastsnr = snr; @@ -934,7 +934,7 @@ void CStreamInfo2::showSNR () posx = posx + barwidth + 3; frameBuffer->paintBoxRel(posx, posy - 1, sw, mheight-8, COL_MENUHEAD_PLUS_0, 0, true); - g_Font[font_info]->RenderString (posx + 2, posy + mheight-5, sw, percent, COL_INFOBAR, 0, true); - g_Font[font_info]->RenderString (posx + 2 + sw, posy + mheight-5, pw, "SNR", COL_INFOBAR, 0, true); + g_Font[font_info]->RenderString (posx + 2, posy + mheight-5, sw, percent, COL_INFOBAR_TEXT, 0, true); + g_Font[font_info]->RenderString (posx + 2 + sw, posy + mheight-5, pw, "SNR", COL_INFOBAR_TEXT, 0, true); } } From ce91ca7f13becb0eeae20584f51f900c6ddde60d Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Tue, 23 Jul 2013 06:17:45 +0200 Subject: [PATCH 057/142] Fontrenderer: Fixed error when rendering the font - Add comment for parameter 'useFullBg' --- src/driver/fontrenderer.cpp | 42 ++++++++++++++++++++++--------------- src/driver/fontrenderer.h | 2 +- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/driver/fontrenderer.cpp b/src/driver/fontrenderer.cpp index 3c03f14c6..61cd4c2a3 100644 --- a/src/driver/fontrenderer.cpp +++ b/src/driver/fontrenderer.cpp @@ -365,13 +365,14 @@ int UTF8ToUnicode(const char * &text, const bool utf8_encoded) // returns -1 on #define F_MUL 0x7FFF -void Font::paintFontPixel(fb_pixel_t *td, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, fb_pixel_t fg_trans) +void Font::paintFontPixel(fb_pixel_t *td, uint8_t fg_trans, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, uint8_t index) { + int korr_t = ((bg_col & 0xFF000000) >> 24) - fg_trans; int korr_r = ((bg_col & 0x00FF0000) >> 16) - fg_red; int korr_g = ((bg_col & 0x0000FF00) >> 8) - fg_green; int korr_b = (bg_col & 0x000000FF) - fg_blue; - *td = fg_trans | + *td = ((g_settings.contrast_fonts && (index > 128)) ? 0xFF000000 : (((fg_trans + ((korr_t*faktor)/F_MUL)) << 24) & 0xFF000000)) | (((fg_red + ((korr_r*faktor)/F_MUL)) << 16) & 0x00FF0000) | (((fg_green + ((korr_g*faktor)/F_MUL)) << 8) & 0x0000FF00) | ((fg_blue + ((korr_b*faktor)/F_MUL)) & 0x000000FF); @@ -379,6 +380,18 @@ void Font::paintFontPixel(fb_pixel_t *td, uint8_t fg_red, uint8_t fg_green, uint void Font::RenderString(int x, int y, const int width, const char *text, const fb_pixel_t color, const int boxheight, const bool utf8_encoded, const bool useFullBg) { +/* + useFullBg (default = false) + + useFullBg = false + fetch bgcolor from framebuffer, using lower left edge of the font + + useFullBg = true + fetch bgcolor from framebuffer, using the respective real font position + - font rendering slower + - e.g. required for font rendering on images +*/ + if (!frameBuffer->getActive()) return; @@ -441,10 +454,9 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f FT_Vector kerning; int pen1=-1; // "pen" positions for kerning, pen2 is "x" static fb_pixel_t old_bgcolor = 0, old_fgcolor = 0; - static uint8_t fg_red = 0, fg_green = 0, fg_blue = 0; + static uint8_t fg_trans = 0, fg_red = 0, fg_green = 0, fg_blue = 0; static bool olduseFullBg = false; static fb_pixel_t colors[256] = {0}; - static fb_pixel_t fg_trans[256] = {0}; static int faktor[256] = {0}; static bool fontRecsInit = false; fb_pixel_t bg_color = 1; @@ -468,14 +480,14 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f olduseFullBg = useFullBg; fontRecsInit = true; - uint8_t fgt; - fgt = (fg_color & 0xFF000000) >> 24; + fg_trans = (fg_color & 0xFF000000) >> 24; fg_red = (fg_color & 0x00FF0000) >> 16; fg_green = (fg_color & 0x0000FF00) >> 8; fg_blue = fg_color & 0x000000FF; - int korr_r=0, korr_g=0, korr_b=0; + int korr_t=0, korr_r=0, korr_g=0, korr_b=0; if (!useFullBg) { + korr_t = ((bg_color & 0xFF000000) >> 24) - fg_trans; korr_r = ((bg_color & 0x00FF0000) >> 16) - fg_red; korr_g = ((bg_color & 0x0000FF00) >> 8) - fg_green; korr_b = (bg_color & 0x000000FF) - fg_blue; @@ -483,18 +495,14 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f for (int i = 0; i <= 0xFF; i++) { int _faktor = ((0xFF - i) * F_MUL) / 0xFF; - fb_pixel_t _fg_trans = (g_settings.contrast_fonts && (i > 128)) ? 0xFF000000 : (fgt << 24) & 0xFF000000; - if (useFullBg) { + if (useFullBg) faktor[i] = _faktor; - fg_trans[i] = _fg_trans; - } - else { - colors[i] = (_fg_trans | + else + colors[i] = ((g_settings.contrast_fonts && (i > 128)) ? 0xFF000000 : (((fg_trans + ((korr_t*_faktor)/F_MUL)) << 24) & 0xFF000000)) | (((fg_red + ((korr_r*_faktor)/F_MUL)) << 16) & 0x00FF0000) | (((fg_green + ((korr_g*_faktor)/F_MUL)) << 8) & 0x0000FF00) | - ((fg_blue + ((korr_b*_faktor)/F_MUL)) & 0x000000FF)); - } + ((fg_blue + ((korr_b*_faktor)/F_MUL)) & 0x000000FF); } } @@ -584,7 +592,7 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f /* do not paint the backgroundcolor (*s = 0) */ if(*s != 0) { if (useFullBg) - paintFontPixel(td, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[*s], fg_trans[*s]); + paintFontPixel(td, fg_trans, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[*s], *s); else *td = colors[*s]; } @@ -599,7 +607,7 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f /* do not paint the backgroundcolor (lcolor = 0) */ if(lcolor != 0) { if (useFullBg) - paintFontPixel(td, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[lcolor], fg_trans[lcolor]); + paintFontPixel(td, fg_trans, fg_red, fg_green, fg_blue, bg_buf[ax*ay], faktor[lcolor], (uint8_t)lcolor); else *td = colors[lcolor]; } diff --git a/src/driver/fontrenderer.h b/src/driver/fontrenderer.h index 954875add..124de9632 100644 --- a/src/driver/fontrenderer.h +++ b/src/driver/fontrenderer.h @@ -54,7 +54,7 @@ class Font int height,DigitHeight,DigitOffset,ascender,descender,upper,lower; int fontwidth; - inline void paintFontPixel(fb_pixel_t *td, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, fb_pixel_t fg_trans); + inline void paintFontPixel(fb_pixel_t *td, uint8_t fg_trans, uint8_t fg_red, uint8_t fg_green, uint8_t fg_blue, fb_pixel_t bg_col, int faktor, uint8_t index); public: enum fontmodifier From 0913a47e1ce80edf7eea6a8cafaf059784e5466f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 14:11:57 +0400 Subject: [PATCH 058/142] zapit/src/scannit.cpp: remember first seen position from satellite descriptor --- src/zapit/include/zapit/scannit.h | 2 ++ src/zapit/src/scannit.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/zapit/include/zapit/scannit.h b/src/zapit/include/zapit/scannit.h index 39e70ee37..ad0c6f182 100644 --- a/src/zapit/include/zapit/scannit.h +++ b/src/zapit/include/zapit/scannit.h @@ -42,6 +42,7 @@ class CNit : public OpenThreads::Thread bool cable; t_satellite_position satellitePosition; + t_satellite_position orbitalPosition; freq_id_t freq_id; unsigned short nid; channel_number_map_t logical_map; @@ -66,6 +67,7 @@ class CNit : public OpenThreads::Thread channel_number_map_t & getLogicalMap() { return logical_map; }; channel_number_map_t & getHDLogicalMap() { return hd_logical_map; }; std::string GetNetworkName() { return networkName; } + t_satellite_position getOrbitalPosition() { return orbitalPosition; } }; #endif diff --git a/src/zapit/src/scannit.cpp b/src/zapit/src/scannit.cpp index 756750c84..698e8ae34 100644 --- a/src/zapit/src/scannit.cpp +++ b/src/zapit/src/scannit.cpp @@ -41,6 +41,7 @@ CNit::CNit(t_satellite_position spos, freq_id_t frq, unsigned short pnid, int dn nid = pnid; dmxnum = dnum; cable = (CServiceScan::getInstance()->GetFrontend()->getInfo()->type == FE_QAM); + orbitalPosition = 0; } CNit::~CNit() @@ -108,12 +109,18 @@ bool CNit::Read() if (dmx->sectionFilter(0x10, filter, mask, flen) < 0) { delete dmx; +#ifdef DEBUG_NIT + printf("[NIT] filter failed\n"); +#endif return false; } do { if (dmx->Read(buffer, NIT_SECTION_SIZE) < 0) { delete dmx; +#ifdef DEBUG_NIT + printf("[NIT] read failed\n"); +#endif return false; } @@ -301,6 +308,9 @@ bool CNit::ParseSatelliteDescriptor(SatelliteDeliverySystemDescriptor * sd, Tran if (abs(newSat - satellitePosition) < 5) newSat = satellitePosition; + if (!orbitalPosition) + orbitalPosition = newSat; + if(satellitePosition != newSat) { printf("NIT: different satellite position: our %d nit %d (%X)\n", satellitePosition, newSat, sd->getOrbitalPosition()); From b9464f15e5cf7f4e391b7908aec38c46d9f61815 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 14:12:29 +0400 Subject: [PATCH 059/142] zapit/src/scan.cpp: clear abort flag in Cleanup() --- src/zapit/src/scan.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zapit/src/scan.cpp b/src/zapit/src/scan.cpp index 17ac9596b..c6ba501b1 100644 --- a/src/zapit/src/scan.cpp +++ b/src/zapit/src/scan.cpp @@ -466,6 +466,7 @@ void CServiceScan::Cleanup(const bool success) scanBouquetManager = NULL; } CleanAllMaps(); + abort_scan = false; } bool CServiceScan::SetFrontend(t_satellite_position satellitePosition) From 5c3708e87143b2e206e403a374fd7d0c406c7c00 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 15:35:27 +0400 Subject: [PATCH 060/142] locals: add locale for motor control network info; change motor options hints --- data/locale/english.locale | 7 ++++--- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index 13e3856c7..c6b792dba 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1046,7 +1046,7 @@ menu.hint_scan_manual Manual transponder scan using\nselected parameters menu.hint_scan_mod Select transponder modulation menu.hint_scan_motor_18v Use 18V when moving rotor menu.hint_scan_motor_speed Rotor moving speed in 1/10 degree\nper second -menu.hint_scan_motorpos Select stored position number for\nthis satellite +menu.hint_scan_motorpos Select stored position number for this satellite,\nignored, if USALS enabled menu.hint_scan_nid Enter decimal network ID menu.hint_scan_nit Add transpoders from network information menu.hint_scan_pids Scan and save audio/video/PMT PIDs @@ -1069,8 +1069,8 @@ menu.hint_scan_test Test signal for this transponder menu.hint_scan_tpselect Select transponder to scan menu.hint_scan_uncommited Select uncommited input for\nthis satellite menu.hint_scan_usals_repeat Repeat usals move rotor commands\nif you expirience unstable rotor move -menu.hint_scan_usalsall Set/unset usals flag for all satellites -menu.hint_scan_useusals Use USALS for\nthis satellite +menu.hint_scan_usalsall Use USALS for all satellites on this frontend +menu.hint_scan_useusals Use USALS for this satellite,\nif ON, rotor position ignored menu.hint_scrambled_message Show scrambled message, when channel cannot be decoded menu.hint_screen_setup Configure screen margins menu.hint_screenshot_count When no GUI on screen, you can save 1-5\nscreenshot serie @@ -1229,6 +1229,7 @@ motorcontrol.install_menu Install menu motorcontrol.motor_pos (a) Motor Position: motorcontrol.movement (b) Movement: motorcontrol.msec milliseconds +motorcontrol.network Network info motorcontrol.no_mode don't care motorcontrol.notdef Not used motorcontrol.override Override position used for diff --git a/src/system/locals.h b/src/system/locals.h index 8aa0adbfb..05f532da9 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1256,6 +1256,7 @@ typedef enum LOCALE_MOTORCONTROL_MOTOR_POS, LOCALE_MOTORCONTROL_MOVEMENT, LOCALE_MOTORCONTROL_MSEC, + LOCALE_MOTORCONTROL_NETWORK, LOCALE_MOTORCONTROL_NO_MODE, LOCALE_MOTORCONTROL_NOTDEF, LOCALE_MOTORCONTROL_OVERRIDE, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 1c2c2d49b..3507d612c 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1256,6 +1256,7 @@ const char * locale_real_names[] = "motorcontrol.motor_pos", "motorcontrol.movement", "motorcontrol.msec", + "motorcontrol.network", "motorcontrol.no_mode", "motorcontrol.notdef", "motorcontrol.override", From 3c074a95821081044feda1733a66f991291f014c Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 15:36:33 +0400 Subject: [PATCH 061/142] gui/motorcontrol.cpp: cleanup/rework, add simple network info --- src/gui/motorcontrol.cpp | 663 ++++++++++++++++----------------------- src/gui/motorcontrol.h | 7 +- 2 files changed, 281 insertions(+), 389 deletions(-) diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index 8a6750c94..245a04382 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -46,15 +46,7 @@ #include #include - -static int g_sig; -static int g_snr; -static int last_snr = 0; -static int moving = 0; - -#define RED_BAR 40 -#define YELLOW_BAR 70 -#define GREEN_BAR 100 +#include #define BAR_BORDER 2 #define BAR_WIDTH 100 @@ -88,7 +80,7 @@ void CMotorControl::Init(void) width = w_max(470, 0); mheight = mheight - 2; - height = hheight + (20 * mheight) - 5; + height = hheight + (22 * mheight) - 5; height = h_max(height, 0); x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; @@ -114,55 +106,35 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) int wasgrow = 0; uint8_t origPosition; - last_snr = 0; - moving = 0; + last_snr = moving = g_sig = g_snr = 0; + network = "unknown"; - CZapitClient::ScanSatelliteList satList; - CZapitClient::commandSetScanSatelliteList sat; - sat_iterator_t sit; - - sigscale->reset(); - snrscale->reset(); - lastsnr = lastsig = -1; - - bool istheend = false; int lim_cmd; - if (!frameBuffer->getActive()) - return menu_return::RETURN_EXIT_ALL; + int retval = menu_return::RETURN_REPAINT; if (parent) parent->hide(); - x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; - y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; + x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; + y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; + + /* send satellite list to zapit */ + CZapitClient::ScanSatelliteList satList; + CZapitClient::commandSetScanSatelliteList sat; -#if 0 - /* send satellite list to zapit */ - for(sit = satellitePositions.begin(); sit != satellitePositions.end(); sit++) { - if(!strcmp(sit->second.name.c_str(),scansettings.satName)) { - sat.position = sit->first; - strncpy(sat.satName, scansettings.satName, 49); - satList.push_back(sat); - if(sit->second.motor_position) - motorPosition = sit->second.motor_position; - break; - } - } -#endif - /* send satellite list to zapit */ sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satName); strncpy(sat.satName, scansettings.satName, 49); satList.push_back(sat); satellite_map_t & satmap = frontend->getSatellites(); - sit = satmap.find(sat.position); + sat_iterator_t sit = satmap.find(sat.position); if(sit != satmap.end() && sit->second.motor_position) motorPosition = sit->second.motor_position; origPosition = motorPosition; //FIXME change cZapit live fe g_Zapit->stopPlayBack(); - g_Zapit->setScanSatelliteList( satList); + g_Zapit->setScanSatelliteList(satList); CZapit::getInstance()->SetLiveFrontend(frontend); TP.feparams.dvb_feparams.frequency = atoi(scansettings.sat_TP_freq); @@ -176,289 +148,200 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) paintMenu(); paintStatus(); - while (!istheend) + msg = CRCInput::RC_nokey; + while (!(msg == CRCInput::RC_setup) && (!(msg == CRCInput::RC_home))) { - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd_MS(100 /*250*/); - msg = CRCInput::RC_nokey; - - while (!(msg == CRCInput::RC_timeout) && (!(msg == CRCInput::RC_home))) - { - g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); - showSNR(); -//printf("SIG: %d SNR %d last %d\n", g_sig, g_snr, last_snr); - if(moving && (stepMode == STEP_MODE_AUTO)) { - if(last_snr < g_snr) { - wasgrow = 1; - } - //if((last_snr > g_snr) && last_snr > 37000) - if(wasgrow && (last_snr > g_snr) /* && last_snr > 50*/) { -//printf("Must stop rotor!!!\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); - moving = 0; - paintStatus(); - last_snr = 0; - //g_Zapit->tune_TP(TP); - } else - last_snr = g_snr; - } else - wasgrow = 0; - - if (installerMenue) - { - switch(msg) - { - case CRCInput::RC_ok: - case CRCInput::RC_0: - printf("[motorcontrol] 0 key received... goto userMenue\n"); - installerMenue = false; - paintMenu(); - paintStatus(); - break; - - case CRCInput::RC_1: - case CRCInput::RC_right: - printf("[motorcontrol] left/1 key received... drive/Step motor west, stepMode: %d\n", stepMode); - motorStepWest(); - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_red: - case CRCInput::RC_2: - printf("[motorcontrol] 2 key received... halt motor\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); - moving = 0; - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_3: - case CRCInput::RC_left: - printf("[motorcontrol] right/3 key received... drive/Step motor east, stepMode: %d\n", stepMode); - motorStepEast(); - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_4: - printf("[motorcontrol] 4 key received... set west (soft) limit\n"); - if(g_settings.rotor_swap) lim_cmd = 0x66; - else lim_cmd = 0x67; - g_Zapit->sendMotorCommand(0xE1, 0x31, lim_cmd, 0, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_5: - printf("[motorcontrol] 5 key received... disable (soft) limits\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x63, 0, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_6: - printf("[motorcontrol] 6 key received... set east (soft) limit\n"); - if(g_settings.rotor_swap) lim_cmd = 0x67; - else lim_cmd = 0x66; - g_Zapit->sendMotorCommand(0xE1, 0x31, lim_cmd, 0, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_7: - printf("[motorcontrol] 7 key received... goto reference position\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6B, 1, 0, 0); - satellitePosition = 0; - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_8: - printf("[motorcontrol] 8 key received... enable (soft) limits\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6A, 1, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_9: - printf("[motorcontrol] 9 key received... (re)-calculate positions\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6F, 1, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_plus: - case CRCInput::RC_up: - printf("[motorcontrol] up key received... increase satellite position: %d\n", ++motorPosition); - satellitePosition = 0; - paintStatus(); - break; - - case CRCInput::RC_minus: - case CRCInput::RC_down: - if (motorPosition > 1) motorPosition--; - printf("[motorcontrol] down key received... decrease satellite position: %d\n", motorPosition); - satellitePosition = 0; - paintStatus(); - break; - - case CRCInput::RC_blue: - if (++stepMode > 3) - stepMode = 0; - if (stepMode == STEP_MODE_OFF) - satellitePosition = 0; - last_snr = 0; - printf("[motorcontrol] red key received... toggle stepmode on/off: %d\n", stepMode); - paintStatus(); - break; - - default: - //printf("[motorcontrol] message received...\n"); - if ((msg >= CRCInput::RC_WithData) && (msg < CRCInput::RC_WithData + 0x10000000)) - delete[] (unsigned char*) data; - break; - } + g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); + showSNR(); + //printf("SIG: %d SNR %d last %d\n", g_sig, g_snr, last_snr); + if(moving && (stepMode == STEP_MODE_AUTO)) { + if(last_snr < g_snr) { + wasgrow = 1; } + //if((last_snr > g_snr) && last_snr > 37000) + if(wasgrow && (last_snr > g_snr) /* && last_snr > 50*/) { + //printf("Must stop rotor!!!\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); + moving = 0; + paintStatus(); + last_snr = 0; + //g_Zapit->tune_TP(TP); + } else + last_snr = g_snr; + } else + wasgrow = 0; + + if (msg == CRCInput::RC_ok || msg == CRCInput::RC_0) { + printf("[motorcontrol] 0 key received... goto %s\n", installerMenue ? "userMenue" : "installerMenue"); + if (installerMenue) + installerMenue = false; else - { - switch(msg) - { - case CRCInput::RC_ok: - case CRCInput::RC_0: - printf("[motorcontrol] 0 key received... goto installerMenue\n"); - installerMenue = true; - paintMenu(); - paintStatus(); - break; - - case CRCInput::RC_1: - case CRCInput::RC_right: - printf("[motorcontrol] left/1 key received... drive/Step motor west, stepMode: %d\n", stepMode); - motorStepWest(); - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_red: - case CRCInput::RC_2: - printf("[motorcontrol] 2 key received... halt motor\n"); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_3: - case CRCInput::RC_left: - printf("[motorcontrol] right/3 key received... drive/Step motor east, stepMode: %d\n", stepMode); - motorStepEast(); - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_green: - case CRCInput::RC_5: - { - bool store = true; - printf("[motorcontrol] 5 key received... store present satellite number: %d\n", motorPosition); - if(motorPosition != origPosition) { - printf("[motorcontrol] position changed %d -> %d\n", origPosition, motorPosition); - for(sit = satmap.begin(); sit != satmap.end(); sit++) { - if(sit->second.motor_position == motorPosition) - break; - } - if(sit != satmap.end()) { - std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); - printf("[motorcontrol] new positions configured for %s\n", satname.c_str()); - std::string buf = g_Locale->getText(LOCALE_MOTORCONTROL_OVERRIDE); - buf += " "; - buf += satname; - buf += " ?"; - store = (ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, buf,CMessageBox::mbrNo,CMessageBox::mbNo|CMessageBox::mbYes) == CMessageBox::mbrYes); - } - } - if(store) - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6A, 1, motorPosition, 0); - //g_Zapit->tune_TP(TP); - } - break; - - case CRCInput::RC_6: - if (stepSize < 0x7F) stepSize++; - printf("[motorcontrol] 6 key received... increase Step size: %d\n", stepSize); - paintStatus(); - break; - - case CRCInput::RC_yellow: - case CRCInput::RC_7: - printf("[motorcontrol] 7 key received... goto satellite number: %d\n", motorPosition); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6B, 1, motorPosition, 0); - satellitePosition = 0; - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_9: - if (stepSize > 1) stepSize--; - printf("[motorcontrol] 9 key received... decrease Step size: %d\n", stepSize); - paintStatus(); - break; - - case CRCInput::RC_plus: - case CRCInput::RC_up: - printf("[motorcontrol] up key received... increase satellite position: %d\n", ++motorPosition); - satellitePosition = 0; - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_minus: - case CRCInput::RC_down: - if (motorPosition > 1) motorPosition--; - printf("[motorcontrol] down key received... decrease satellite position: %d\n", motorPosition); - satellitePosition = 0; - paintStatus(); - //g_Zapit->tune_TP(TP); - break; - - case CRCInput::RC_blue: - if (++stepMode > 2) - stepMode = 0; - if (stepMode == STEP_MODE_OFF) - satellitePosition = 0; - printf("[motorcontrol] red key received... toggle stepmode on/off: %d\n", stepMode); - paintStatus(); - break; - - default: - //printf("[motorcontrol] message received...\n"); - if ((msg >= CRCInput::RC_WithData) && (msg < CRCInput::RC_WithData + 0x10000000)) - delete[] (unsigned char*) data; - break; - } + installerMenue = true; + paintMenu(); + paintStatus(); + } + else if (msg == CRCInput::RC_1 || msg == CRCInput::RC_left) { + printf("[motorcontrol] left/1 key received... drive/Step motor west, stepMode: %d\n", stepMode); + motorStep(true); + paintStatus(); + //g_Zapit->tune_TP(TP); + } + else if (msg == CRCInput::RC_red || msg == CRCInput::RC_2) { + printf("[motorcontrol] 2 key received... halt motor\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); + moving = 0; + paintStatus(); + //g_Zapit->tune_TP(TP); + } + else if (msg == CRCInput::RC_3 || msg == CRCInput::RC_right) { + printf("[motorcontrol] right/3 key received... drive/Step motor east, stepMode: %d\n", stepMode); + motorStep(false); + paintStatus(); + //g_Zapit->tune_TP(TP); + } + else if (msg == CRCInput::RC_4) { + if (installerMenue) { + printf("[motorcontrol] 4 key received... set west (soft) limit\n"); + if(g_settings.rotor_swap) lim_cmd = 0x66; + else lim_cmd = 0x67; + g_Zapit->sendMotorCommand(0xE1, 0x31, lim_cmd, 0, 0, 0); + //g_Zapit->tune_TP(TP); } } - - istheend = (msg == CRCInput::RC_home); + else if (msg == CRCInput::RC_5 || msg == CRCInput::RC_green) { + if (installerMenue) { + printf("[motorcontrol] 5 key received... disable (soft) limits\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x63, 0, 0, 0); + } else { + bool store = true; + printf("[motorcontrol] 5 key received... store present satellite number: %d\n", motorPosition); + if(motorPosition != origPosition) { + printf("[motorcontrol] position changed %d -> %d\n", origPosition, motorPosition); + for(sit = satmap.begin(); sit != satmap.end(); sit++) { + if(sit->second.motor_position == motorPosition) + break; + } + if(sit != satmap.end()) { + std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); + printf("[motorcontrol] new positions configured for %s\n", satname.c_str()); + std::string buf = g_Locale->getText(LOCALE_MOTORCONTROL_OVERRIDE); + buf += " "; + buf += satname; + buf += " ?"; + store = (ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, buf,CMessageBox::mbrNo,CMessageBox::mbNo|CMessageBox::mbYes) == CMessageBox::mbrYes); + } + } + if(store) + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6A, 1, motorPosition, 0); + } + } + else if (msg == CRCInput::RC_6) { + if (installerMenue) { + printf("[motorcontrol] 6 key received... set east (soft) limit\n"); + if(g_settings.rotor_swap) lim_cmd = 0x67; + else lim_cmd = 0x66; + g_Zapit->sendMotorCommand(0xE1, 0x31, lim_cmd, 0, 0, 0); + //g_Zapit->tune_TP(TP); + } else { + if (stepSize < 0x7F) stepSize++; + printf("[motorcontrol] 6 key received... increase Step size: %d\n", stepSize); + paintStatus(); + } + } + else if (msg == CRCInput::RC_7) { + if (installerMenue) { + printf("[motorcontrol] 7 key received... goto reference position\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6B, 1, 0, 0); + satellitePosition = 0; + paintStatus(); + } else { + printf("[motorcontrol] 7 key received... goto satellite number: %d\n", motorPosition); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6B, 1, motorPosition, 0); + satellitePosition = 0; + paintStatus(); + } + //g_Zapit->tune_TP(TP); + } + else if (msg == CRCInput::RC_8) { + if (installerMenue) { + printf("[motorcontrol] 8 key received... enable (soft) limits\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6A, 1, 0, 0); + } + } + else if (msg == CRCInput::RC_9) { + if (installerMenue) { + printf("[motorcontrol] 9 key received... (re)-calculate positions\n"); + g_Zapit->sendMotorCommand(0xE0, 0x31, 0x6F, 1, 0, 0); + } else { + if (stepSize > 1) stepSize--; + printf("[motorcontrol] 9 key received... decrease Step size: %d\n", stepSize); + paintStatus(); + } + } + else if (msg == CRCInput::RC_plus || msg == CRCInput::RC_up) { + printf("[motorcontrol] up key received... increase satellite position: %d\n", ++motorPosition); + satellitePosition = 0; + paintStatus(); + } + else if (msg == CRCInput::RC_minus || msg == CRCInput::RC_down) { + if (motorPosition > 1) motorPosition--; + printf("[motorcontrol] down key received... decrease satellite position: %d\n", motorPosition); + satellitePosition = 0; + paintStatus(); + } + else if (msg == CRCInput::RC_blue) { + if (++stepMode > 3) + stepMode = 0; + if (stepMode == STEP_MODE_OFF) + satellitePosition = 0; + last_snr = 0; + printf("[motorcontrol] blue key received... toggle stepmode on/off: %d\n", stepMode); + paintStatus(); + } + else if (msg == CRCInput::RC_info) { + network = "waiting for NIT..."; + paintStatus(); + readNetwork(); + paintStatus(); + } + else if (msg == CRCInput::RC_setup) { + retval = menu_return::RETURN_EXIT_ALL; + } + else { + if ((msg >= CRCInput::RC_WithData) && (msg < CRCInput::RC_WithData + 0x10000000)) + delete[] (unsigned char*) data; + } } hide(); frontend->setTsidOnid(0); - return menu_return::RETURN_REPAINT; + return retval; } -void CMotorControl::motorStepWest(void) +void CMotorControl::motorStep(bool west) { int cmd; - printf("[motorcontrol] motorStepWest\n"); - if(g_settings.rotor_swap) cmd = 0x68; - else cmd = 0x69; + if (west) { + if(g_settings.rotor_swap) cmd = 0x68; + else cmd = 0x69; + } else { + if(g_settings.rotor_swap) cmd = 0x69; + else cmd = 0x68; + } + printf("[motorcontrol] motorStep: %s\n", west ? "West" : "East"); switch(stepMode) { case STEP_MODE_ON: g_Zapit->sendMotorCommand(0xE0, 0x31, cmd, 1, (-1 * stepSize), 0); - satellitePosition += stepSize; + satellitePosition += west ? stepSize : -stepSize; break; case STEP_MODE_TIMED: g_Zapit->sendMotorCommand(0xE0, 0x31, cmd, 1, 40, 0); usleep(stepSize * stepDelay * 1000); g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); //halt motor - satellitePosition += stepSize; + satellitePosition += west ? stepSize : -stepSize; break; case STEP_MODE_AUTO: moving = 1; @@ -468,31 +351,6 @@ void CMotorControl::motorStepWest(void) } } -void CMotorControl::motorStepEast(void) -{ - int cmd; - if(g_settings.rotor_swap) cmd = 0x69; - else cmd = 0x68; - printf("[motorcontrol] motorStepEast\n"); - switch(stepMode) - { - case STEP_MODE_ON: - g_Zapit->sendMotorCommand(0xE0, 0x31, cmd, 1, (-1 * stepSize), 0); - satellitePosition -= stepSize; - break; - case STEP_MODE_TIMED: - g_Zapit->sendMotorCommand(0xE0, 0x31, cmd, 1, 40, 0); - usleep(stepSize * stepDelay * 1000); - g_Zapit->sendMotorCommand(0xE0, 0x31, 0x60, 0, 0, 0); //halt motor - satellitePosition -= stepSize; - break; - case STEP_MODE_AUTO: - moving = 1; - default: - g_Zapit->sendMotorCommand(0xE0, 0x31, cmd, 1, 40, 0); - } -} - void CMotorControl::hide() { frameBuffer->paintBackgroundBoxRel(x, y, width, height + 20); @@ -501,21 +359,25 @@ void CMotorControl::hide() void CMotorControl::paintLine(int px, int *py, int pwidth, const char *txt) { + frameBuffer->paintBoxRel(px, *py, pwidth, mheight, COL_MENUCONTENT_PLUS_0); *py += mheight; - frameBuffer->paintBoxRel(px, *py - mheight, pwidth, mheight, COL_MENUCONTENT_PLUS_0); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py, pwidth, txt, COL_MENUCONTENT_TEXT, 0, true); } void CMotorControl::paintLine(int px, int py, int pwidth, const char *txt) { - //frameBuffer->paintBoxRel(px, py - mheight, pwidth, mheight, COL_MENUCONTENT_PLUS_0); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py, pwidth, txt, COL_MENUCONTENT_TEXT, 0, true); } +void CMotorControl::paintLine(int ix, int tx, int *py, int pwidth, const char *icon, const char *txt) +{ + frameBuffer->paintIcon(icon, ix, *py, mheight); + *py += mheight; + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(tx, *py, pwidth, txt, COL_MENUCONTENT_TEXT, 0, true); +} + void CMotorControl::paintSeparator(int xpos, int *pypos, int pwidth, const char * /*txt*/) { - //int stringwidth = 0; - //int stringstartposX = 0; int th = 10; //*ypos += mheight; *pypos += th; @@ -523,8 +385,8 @@ void CMotorControl::paintSeparator(int xpos, int *pypos, int pwidth, const char frameBuffer->paintHLineRel(xpos, pwidth - 20, *pypos - (th >> 1) + 1, COL_MENUCONTENT_PLUS_1); #if 0 - stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(txt); - stringstartposX = 0; + int stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(txt); + int stringstartposX = 0; stringstartposX = (xpos + (pwidth >> 1)) - (stringwidth >> 1); frameBuffer->paintBoxRel(stringstartposX - 5, *pypos - mheight, stringwidth + 10, mheight, COL_MENUCONTENT_PLUS_0); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(stringstartposX, *pypos, stringwidth, txt, COL_MENUCONTENT_TEXT); @@ -533,7 +395,7 @@ void CMotorControl::paintSeparator(int xpos, int *pypos, int pwidth, const char void CMotorControl::paintStatus() { - char buf[256]; + char buf1[256]; char buf2[256]; int xpos1 = x + 10; @@ -545,54 +407,45 @@ void CMotorControl::paintStatus() paintSeparator(xpos1, &ypos, width, g_Locale->getText(LOCALE_MOTORCONTROL_SETTINGS)); paintLine(xpos1, &ypos, width1, g_Locale->getText(LOCALE_MOTORCONTROL_MOTOR_POS)); - sprintf(buf, "%d", motorPosition); - paintLine(xpos2, ypos, width2 , buf); + sprintf(buf1, "%d", motorPosition); + paintLine(xpos2, ypos, width2 , buf1); paintLine(xpos1, &ypos, width1, g_Locale->getText(LOCALE_MOTORCONTROL_MOVEMENT)); switch(stepMode) { case STEP_MODE_ON: - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_MODE)); - break; - case STEP_MODE_OFF: - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_DRIVE_MODE)); + strcpy(buf1, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_MODE)); + sprintf(buf2, "%d", stepSize); break; case STEP_MODE_AUTO: - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_DRIVE_MODE_AUTO)); + strcpy(buf1, g_Locale->getText(LOCALE_MOTORCONTROL_DRIVE_MODE_AUTO)); + if(moving) + strcpy(buf2, g_Locale->getText(LOCALE_MOTORCONTROL_STOP_MOVING)); + else + strcpy(buf2, g_Locale->getText(LOCALE_MOTORCONTROL_STOP_STOPPED)); + break; + case STEP_MODE_OFF: + strcpy(buf1, g_Locale->getText(LOCALE_MOTORCONTROL_DRIVE_MODE)); + strcpy(buf2, g_Locale->getText(LOCALE_MOTORCONTROL_NO_MODE)); break; case STEP_MODE_TIMED: - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_TIMED_MODE)); + strcpy(buf1, g_Locale->getText(LOCALE_MOTORCONTROL_TIMED_MODE)); + sprintf(buf2, "%d %s", stepSize * stepDelay, g_Locale->getText(LOCALE_MOTORCONTROL_MSEC)); break; } - paintLine(xpos2, ypos, width2, buf); + paintLine(xpos2, ypos, width2, buf1); paintLine(xpos1, &ypos, width1, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_SIZE)); - switch(stepMode) - { - case STEP_MODE_ON: - sprintf(buf, "%d", stepSize); - break; - case STEP_MODE_AUTO: - if(moving) - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_STOP_MOVING)); - else - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_STOP_STOPPED)); - break; - case STEP_MODE_OFF: - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_NO_MODE)); - break; - case STEP_MODE_TIMED: - sprintf(buf, "%d ", stepSize * stepDelay); - strcat(buf, g_Locale->getText(LOCALE_MOTORCONTROL_MSEC)); - break; - } - paintLine(xpos2, ypos, width2, buf); + paintLine(xpos2, ypos, width2, buf2); + + paintLine(xpos1, &ypos, width1, g_Locale->getText(LOCALE_MOTORCONTROL_NETWORK)); + paintLine(xpos2, ypos, width2, network.c_str()); paintSeparator(xpos1, &ypos, width, g_Locale->getText(LOCALE_MOTORCONTROL_STATUS)); - strcpy(buf, g_Locale->getText(LOCALE_MOTORCONTROL_SAT_POS)); - sprintf(buf2, "%d", satellitePosition); - strcat(buf, buf2); - paintLine(xpos1, &ypos, width1, buf); + + sprintf(buf1, "%s %d", g_Locale->getText(LOCALE_MOTORCONTROL_SAT_POS), satellitePosition); + paintLine(xpos1, &ypos, width1, buf1); + paintSeparator(xpos1, &ypos, width, g_Locale->getText(LOCALE_MOTORCONTROL_SETTINGS)); } @@ -604,6 +457,10 @@ void CMotorControl::paintHead() void CMotorControl::paintMenu() { + sigscale->reset(); + snrscale->reset(); + lastsnr = lastsig = -1; + frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); ypos = y + hheight + (mheight >> 1) - 10; @@ -611,8 +468,9 @@ void CMotorControl::paintMenu() int xpos1 = x + 10; int xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("(7/yellow)"); int width2 = width - (xpos2 - xpos1) - 10; - int width1 = width - 10; +#if 1 + int width1 = width - 10; paintLine(xpos1, &ypos, width1, "(0/OK)"); if(installerMenue) paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_USER_MENU)); @@ -630,22 +488,16 @@ void CMotorControl::paintMenu() { paintLine(xpos1, &ypos, width1, "(4)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_WEST_LIMIT)); - paintLine(xpos1, &ypos, width1, "(5)"); + paintLine(xpos1, &ypos, width1, "(5/green)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_DISABLE_LIMIT)); paintLine(xpos1, &ypos, width1, "(6)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_EAST_LIMIT)); - paintLine(xpos1, &ypos, width1, "(7)"); + paintLine(xpos1, &ypos, width1, "(7/yellow)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_REF_POSITION)); paintLine(xpos1, &ypos, width1, "(8)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_ENABLE_LIMIT)); paintLine(xpos1, &ypos, width1, "(9)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_CALC_POSITIONS)); - paintLine(xpos1, &ypos, width1, "(+/up)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_INCREASE)); - paintLine(xpos1, &ypos, width1, "(-/down)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_DECREASE)); - paintLine(xpos1, &ypos, width1, "(blue)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DRIVE)); } else { @@ -661,14 +513,41 @@ void CMotorControl::paintMenu() paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_NOTDEF)); paintLine(xpos1, &ypos, width1, "(9)"); paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DECREASE)); - paintLine(xpos1, &ypos, width1, "(+/up)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_INCREASE)); - paintLine(xpos1, &ypos, width1, "(-/down)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_DECREASE)); - paintLine(xpos1, &ypos, width1, "(blue)"); - paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DRIVE)); } + paintLine(xpos1, &ypos, width1, "(+/up)"); + paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_INCREASE)); + paintLine(xpos1, &ypos, width1, "(-/down)"); + paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_POS_DECREASE)); + paintLine(xpos1, &ypos, width1, "(blue)"); + paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DRIVE)); + paintLine(xpos1, &ypos, width1, "(info)"); + paintLine(xpos2, ypos, width2, g_Locale->getText(LOCALE_MOTORCONTROL_NETWORK)); +#else + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_0, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_USER_MENU) : g_Locale->getText(LOCALE_MOTORCONTROL_INSTALL_MENU)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_1, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_WEST)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_2, g_Locale->getText(LOCALE_MOTORCONTROL_HALT)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_3, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_EAST)); + + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_4, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_WEST_LIMIT) : g_Locale->getText(LOCALE_MOTORCONTROL_NOTDEF)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_5, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_DISABLE_LIMIT) : g_Locale->getText(LOCALE_MOTORCONTROL_STORE)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_6, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_EAST_LIMIT) : g_Locale->getText(LOCALE_MOTORCONTROL_STEP_INCREASE)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_7, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_REF_POSITION) : g_Locale->getText(LOCALE_MOTORCONTROL_GOTO)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_8, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_ENABLE_LIMIT) : g_Locale->getText(LOCALE_MOTORCONTROL_NOTDEF)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_9, + installerMenue ? g_Locale->getText(LOCALE_MOTORCONTROL_CALC_POSITIONS) : g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DECREASE)); + + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_TOP, g_Locale->getText(LOCALE_MOTORCONTROL_POS_INCREASE)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_DOWN, g_Locale->getText(LOCALE_MOTORCONTROL_POS_DECREASE)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_BLUE, g_Locale->getText(LOCALE_MOTORCONTROL_STEP_DRIVE)); + paintLine(xpos1, xpos2, &ypos, width2, NEUTRINO_ICON_BUTTON_INFO_SMALL, g_Locale->getText(LOCALE_MOTORCONTROL_NETWORK)); +#endif ypos_status = ypos; } @@ -696,24 +575,19 @@ void CMotorControl::startSatFind(void) void CMotorControl::stopSatFind(void) { - +#if 0 if (satfindpid != -1) { printf("[motorcontrol] killing satfind...\n"); kill(satfindpid, SIGKILL); waitpid(satfindpid, 0, 0); satfindpid = -1; } +#endif } -#define BARWT 10 -#define BAR_BL 2 -#define BARW (BARWT - BAR_BL) -#define BARWW (BARWT - BARW) - void CMotorControl::showSNR() { char percent[10]; - //char ber[20]; int barwidth = 100; uint16_t ssig, ssnr; int sig, snr; @@ -761,3 +635,18 @@ void CMotorControl::showSNR() g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString (posx_snr+2, posy + mheight, sw, percent, COL_MENUCONTENT_TEXT); } } + +void CMotorControl::readNetwork() +{ + CNit nit(0, 0, 0); + nit.Start(); + nit.Stop(); + network = nit.GetNetworkName(); + t_satellite_position pos = nit.getOrbitalPosition(); + if (network.empty()) + network = "unknown"; + + char net[100]; + snprintf(net, sizeof(net), "%03d.%d, %s", abs(pos)/10, abs(pos)%10, network.c_str()); + network = net; +} diff --git a/src/gui/motorcontrol.h b/src/gui/motorcontrol.h index 84ffae7ba..fb4b74dc4 100644 --- a/src/gui/motorcontrol.h +++ b/src/gui/motorcontrol.h @@ -67,18 +67,21 @@ class CMotorControl : public CMenuTarget int32_t satellitePosition; int satfindpid; int lastsnr, lastsig; + int g_sig, g_snr, last_snr, moving; + std::string network; CProgressBar *snrscale, *sigscale; void paintHead(void); void paintMenu(void); void paintStatus(void); void paintLine(int x, int *y, int width, const char *txt); void paintLine(int x, int y, int width, const char *txt); + void paintLine(int ix, int tx, int *y, int pwidth, const char *icon, const char *txt); void paintSeparator(int xpos, int * ypos, int width, const char *txt); - void motorStepEast(void); - void motorStepWest(void); + void motorStep(bool west); void startSatFind(void); void stopSatFind(void); void showSNR(void); + void readNetwork(void); public: From 5b57fc6150f0af15296ea59a7af2e15fad4bff38 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 15:37:22 +0400 Subject: [PATCH 062/142] gui/scan_setup.cpp: disable frontend motor options, if more not master or independent --- src/gui/scan_setup.cpp | 20 +++++++++++++++----- src/gui/scan_setup.h | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index ef8865313..dfef5ad64 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -745,6 +745,7 @@ int CScanSetup::showFrontendSetup(int number) mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); setupMenu->addItem(mc); + msettings.Clear(); if (fe->getInfo()->type == FE_QPSK) { /* disable all but mode option for linked frontends */ bool allow_moptions = !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED; @@ -797,25 +798,30 @@ int CScanSetup::showFrontendSetup(int number) setupMenu->addItem(uniSetup); setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, allow_moptions, 0, 64, NULL); nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); setupMenu->addItem(nc); + msettings.Add(nc); - mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, allow_moptions); mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); setupMenu->addItem(mc); + msettings.Add(mc); - mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &fe_config.use_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &fe_config.use_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, allow_moptions, this); mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); setupMenu->addItem(mc); + msettings.Add(mc); - CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, allow_moptions, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); setupMenu->addItem(mf); + msettings.Add(mf); } int res = setupMenu->exec(NULL, ""); feselected = setupMenu->getSelected(); + msettings.Clear(); /* add configured satellites to satSelect in case they changed */ if (fe->isSat()) @@ -996,13 +1002,14 @@ int CScanSetup::showScanMenuSatFind() int count = 0; CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); char name[255]; + static int selected = 0; r_system = DVB_S; snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_MOTORCONTROL_HEAD), fenumber+1, fe->getInfo()->name); CMenuWidget* sat_findMenu = new CMenuWidget(name /*LOCALE_MOTORCONTROL_HEAD*/, NEUTRINO_ICON_SETTINGS, width); - + sat_findMenu->setSelected(selected); sat_findMenu->addIntroItems(); CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(LOCALE_SATSETUP_SATELLITE, scansettings.satName, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); @@ -1042,6 +1049,7 @@ int CScanSetup::showScanMenuSatFind() sat_findMenu->addItem(mf); int res = sat_findMenu->exec(NULL, ""); + selected = sat_findMenu->getSelected(); delete sat_findMenu; return res; } @@ -1486,6 +1494,8 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && enable); + msettings.Activate(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + /* if mode changed, set current master too */ if (femaster >= 0) fe->setMaster(femaster); diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index 428a32a43..c8314ee03 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -65,6 +65,8 @@ class CScanSetup : public CMenuTarget, public CChangeObserver CMenuOptionNumberChooser * ojDiseqcRepeats; CIntInput * nid; CMenuOptionChooser * lcnhd; + /* items active for master/independent fe mode */ + CGenericMenuActivate msettings; CMenuOptionChooser * linkfe; std::string modestr[4]; From c71de7fea2b245e25954626507a27da7d7625cbf Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 23 Jul 2013 15:43:19 +0400 Subject: [PATCH 063/142] src/zapit/src/frontend.cpp: disable driveToSatellitePosition() code for linked frontends --- src/zapit/src/frontend.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index bc1fa6684..66afddd72 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -1318,6 +1318,10 @@ int CFrontend::driveToSatellitePosition(t_satellite_position satellitePosition, int new_position = 0, old_position = 0; bool use_usals = 0; + if (CFrontend::linked(femode) || femode == CFrontend::FE_MODE_UNUSED) { + rotorSatellitePosition = satellitePosition; + return 0; + } //if(config.diseqcType == DISEQC_ADVANCED) //FIXME testing { bool moved = false; From d5876963e768c1d83f07ccb8abd6362817d8421a Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Tue, 23 Jul 2013 19:24:42 +0200 Subject: [PATCH 064/142] CChannelList::paint(): reduce background paint in miniTV mode --- src/gui/channellist.cpp | 39 ++++++++++++++++++++------------------- src/gui/channellist.h | 6 +++--- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index c982d3eba..5d51750b8 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2107,6 +2107,25 @@ void CChannelList::paint() liststart = (selected/listmaxshow)*listmaxshow; updateEvents(this->historyMode ? 0:liststart, this->historyMode ? 0:(liststart + listmaxshow)); + if (g_settings.channellist_additional == 2) // with miniTV + { + // paint box for miniTV again - important! + frameBuffer->paintBoxFrame(x+width, y+theight , pig_width, pig_height, 10, COL_MENUCONTENT_PLUS_0, 0); + // 5px offset - same value as in list below +#if 0 + /* focus: its possible now to scale video with still image, but on nevis + artifacts possible on SD osd */ + paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); +#else + if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { + paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); + } + else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { + g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); + } +#endif + } + // paint background for main box frameBuffer->paintBoxRel(x, y+theight, width, height-footerHeight-theight, COL_MENUCONTENT_PLUS_0); if (g_settings.channellist_additional) @@ -2114,7 +2133,7 @@ void CChannelList::paint() // disable displayNext displayNext = false; // paint background for right box - frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,pig_height+infozone_height,COL_MENUCONTENT_PLUS_0); + frameBuffer->paintBoxRel(x+width,y+theight+pig_height,infozone_width,infozone_height,COL_MENUCONTENT_PLUS_0); } for(unsigned int count = 0; count < listmaxshow; count++) { @@ -2132,24 +2151,6 @@ void CChannelList::paint() frameBuffer->paintBoxRel(x+ width- 13, ypos+ 2+ sbs*(sb-4)/sbc, 11, (sb-4)/sbc, COL_MENUCONTENT_PLUS_3); showChannelLogo(); - if (g_settings.channellist_additional == 2) // with miniTV - { - // paint box for miniTV again - important! - frameBuffer->paintBoxRel(x+width, y+theight , pig_width, pig_height, COL_MENUCONTENT_PLUS_0); - // 5px offset - same value as in list below -#if 0 - /* focus: its possible now to scale video with still image, but on nevis - artifacts possible on SD osd */ - paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); -#else - if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { - paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); - } - else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { - g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); - } -#endif - } } bool CChannelList::isEmpty() const diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 2f8d309f4..8457334c8 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -114,9 +114,9 @@ private: void calcSize(); std::string MaxChanNr(); void paint_pig(int x, int y, int w, int h); - void paint_events(int index); - CChannelEventList evtlist; - void readEvents(const t_channel_id channel_id); + void paint_events(int index); + CChannelEventList evtlist; + void readEvents(const t_channel_id channel_id); void showdescription(int index); typedef std::pair epg_pair; std::vector epgText; From 7e58a0bcae21d550817257c460274766764b6640 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Wed, 24 Jul 2013 11:35:06 +0200 Subject: [PATCH 065/142] Update deutsch.locale --- data/locale/deutsch.locale | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index b435fc01c..00b6c9ca2 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -686,6 +686,8 @@ lcdmenu.statusline Statuszeile lcdmenu.statusline.both Lautstärke/Fortschritt lcdmenu.statusline.playtime Sendungsfortschritt lcdmenu.statusline.volume Lautstärke +ledcontroler.backlight Hintergrundbeleuchtung Buttons +ledcontroler.backlight.tv TV Modus ledcontroler.blink Blinke im Deep-Standby, wenn Timer aktiv ledcontroler.menu Power Button LEDs ledcontroler.mode.deepstandby Deep-Standby @@ -757,6 +759,7 @@ menu.hint_audioplayer_title Aktivieren Sie die Titelsuche (SMS-Stil) in der Play menu.hint_auto_lang Wählen Sie, ob automatisch ihre bevorzugte Tonspur ausgewählt wird, wenn sie vorhanden ist menu.hint_auto_subs Automatische Anzeige der Untertitel in Ihrer bevorzugten Sprache menu.hint_back Zurück zum vorherigen Menü.\nDie Taste 'Menü' schließt alle Menüs +menu.hint_backlight Konfigurieren Sie die Hintergrundbeleuchtung der Buttons menu.hint_backup Sichern von Konfigurationen und Kanallisten menu.hint_bedit Bearbeiten ihrer Favoriten und der Bouquets menu.hint_bigwindows Kanalliste, EPG-Infos, Audioplayer und einige andere Fenster werden bildschirmfüllend angezeigt @@ -1043,7 +1046,7 @@ menu.hint_scan_manual Manueller Transponder-Suchlauf mit ausgewählten Parameter menu.hint_scan_mod Wählen Sie eine Transponder-Modulation menu.hint_scan_motor_18v Benutze 18V für Motorbewegungen menu.hint_scan_motor_speed Rotor-Bewegungsgeschwindigkeit in 1/10 Grad pro Sekunde -menu.hint_scan_motorpos Wählen Sie eine gespeicherten Positions-Nummer für diesen Satelliten +menu.hint_scan_motorpos Wählen Sie eine gespeicherten Positions-Nummer für diesen Satelliten,\nwird ignoriert, wenn USALS aktiv menu.hint_scan_nid Geben Sie ihre Kabelnetzwerk-ID in dezimal ein menu.hint_scan_nit Lassen Sie Transponder über gesendete NIT-Daten (Network Information Table) hinzufügen menu.hint_scan_pids Duchsucht und speichert auch die Audio-, Video- und PMT-PIDs @@ -1066,8 +1069,8 @@ menu.hint_scan_test Testen Sie das Signal für diesen Transponder menu.hint_scan_tpselect Wählen Sie einen einzelnen Transponder für den Suchlauf menu.hint_scan_uncommited Wählen Sie nicht festgeschriebene Angaben für diesen Satelliten menu.hint_scan_usals_repeat Geben Sie die USALS-Wiederholungen für den Rotor ein -menu.hint_scan_usalsall Setzen oder entfernen Sie USALS-Merker für alle Satelliten -menu.hint_scan_useusals Verwenden Sie USALS für diesen Satelitten +menu.hint_scan_usalsall Verwenden Sie USALS für alle Satelliten an diesem Tuner +menu.hint_scan_useusals Verwenden Sie USALS für diesen Satelliten,\nwenn aktiv, wird Rotorposition ignoriert menu.hint_scrambled_message Bei aktivierter Option erscheint eine Meldung, wenn ein verschlüsselter Sender nicht entschlüsselt werden kann menu.hint_screen_setup Konfigurieren Sie den Bildschirmbereich für die Menüanzeige menu.hint_screenshot_count Wählen Sie, wie viele Screenshots erstellt werden sollen @@ -1226,6 +1229,7 @@ motorcontrol.install_menu Motor Installation motorcontrol.motor_pos (a) Motorposition: motorcontrol.movement (b) Bewegung: motorcontrol.msec Millisekunden +motorcontrol.network Netzwerk Info motorcontrol.no_mode keine Sorge (wasn das?) motorcontrol.notdef nicht benutzt motorcontrol.override übersteuern From 3b3156d55ddbdfacd59aa7b092853452f4c1ad0f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 22 Jul 2013 23:12:26 +0200 Subject: [PATCH 066/142] CSignalBar/CSignalNoiseRatioBar: add missing initSBItems() --- src/gui/widget/signalbars.cpp | 2 ++ src/gui/widget/signalbars.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/widget/signalbars.cpp b/src/gui/widget/signalbars.cpp index 1a0dc3564..b6f44bd81 100644 --- a/src/gui/widget/signalbars.cpp +++ b/src/gui/widget/signalbars.cpp @@ -39,6 +39,7 @@ using namespace std; CSignalBar::CSignalBar() { initVarSigBar(); + initSBItems(); } CSignalBar::CSignalBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref) @@ -220,6 +221,7 @@ void CSignalBar::Repaint() CSignalNoiseRatioBar::CSignalNoiseRatioBar() { initVarSnrBar(); + initSBItems(); } CSignalNoiseRatioBar::CSignalNoiseRatioBar(const int& xpos, const int& ypos, const int& w, const int& h, CFrontend *frontend_ref) diff --git a/src/gui/widget/signalbars.h b/src/gui/widget/signalbars.h index 85501f2cd..1d5eb64b3 100644 --- a/src/gui/widget/signalbars.h +++ b/src/gui/widget/signalbars.h @@ -254,7 +254,7 @@ class CSignalBox : public CComponentsForm ///sets the caption color of signalbars, see also property 'sbx_caption_color' void setTextColor(const fb_pixel_t& caption_color){ sbx_caption_color = caption_color;}; - ///sets the caption color of signalbars, see also property 'sbx_caption_color' + ///get caption color of signalbars, see also property 'sbx_caption_color' fb_pixel_t getTextColor(){return sbx_caption_color;}; ///refresh all current snr value, use this before paint(). From 94b2ebda44fe78ba8cf392891854d99ab791ff8d Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 22 Jul 2013 23:23:12 +0200 Subject: [PATCH 067/142] CSignalBar/CSignalBox: use better base color for caption COL_INFOBAR_TEXT --- src/gui/widget/signalbars.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/widget/signalbars.cpp b/src/gui/widget/signalbars.cpp index b6f44bd81..b65fb7078 100644 --- a/src/gui/widget/signalbars.cpp +++ b/src/gui/widget/signalbars.cpp @@ -66,7 +66,7 @@ void CSignalBar::initVarSigBar() sb_item_height = sb_font->getHeight(); height = sb_item_height; sb_scale_height = SB_MIN_HEIGHT; - sb_caption_color= COL_MENUCONTENT_TEXT; + sb_caption_color= COL_INFOBAR_TEXT; initDimensions(); @@ -288,7 +288,7 @@ void CSignalBox::initVarSigBox() height = 5* SB_MIN_HEIGHT; sbx_bar_height = height/2; sbx_bar_x = corner_rad; - sbx_caption_color = COL_MENUCONTENT_TEXT; + sbx_caption_color = COL_INFOBAR_TEXT; } void CSignalBox::initSignalItems() From e473df6a43fbc161d31f78e90cfcab34659bbe1f Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Fri, 26 Jul 2013 12:52:27 +0200 Subject: [PATCH 068/142] CNeutrinoFonts: Use separate font renderer for dynamic fonts - delete / initialize font renderer only if necessary (e.g. start program, change the font file, change the scaling) --- src/driver/neutrinofonts.cpp | 96 ++++++++++++++++++++++------------ src/driver/neutrinofonts.h | 12 ++++- src/global.h | 1 + src/gui/osd_setup.cpp | 6 +-- src/neutrino.cpp | 14 +++-- src/neutrino.h | 3 +- src/system/setting_helpers.cpp | 2 +- 7 files changed, 92 insertions(+), 42 deletions(-) diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp index 0b429bb17..8773a96a9 100644 --- a/src/driver/neutrinofonts.cpp +++ b/src/driver/neutrinofonts.cpp @@ -60,6 +60,11 @@ CNeutrinoFonts::CNeutrinoFonts() old_fontDescr.filename = ""; old_fontDescr.size_offset = 0; + for (int i = 0; i < SNeutrinoSettings::FONT_TYPE_COUNT; i++) + g_Font[i] = NULL; + + g_SignalFont = NULL; + InitDynFonts(); } @@ -101,42 +106,65 @@ CNeutrinoFonts* CNeutrinoFonts::getInstance() return nf; } -void CNeutrinoFonts::SetupNeutrinoFonts() +void CNeutrinoFonts::SetupDynamicFonts(bool initRenderClass/*=true*/) { - if (g_fontRenderer != NULL) - delete g_fontRenderer; - g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100); + if (initRenderClass) { + if (g_dynFontRenderer != NULL) + delete g_dynFontRenderer; + g_dynFontRenderer = new FBFontRenderClass(); - old_fontDescr.size_offset = fontDescr.size_offset; - old_fontDescr.filename = fontDescr.filename; - fontDescr.filename = ""; - printf("[neutrino] settings font file %s\n", g_settings.font_file); - if (access(g_settings.font_file, F_OK)) { - if (!access(FONTDIR"/neutrino.ttf", F_OK)) { - fontDescr.filename = FONTDIR"/neutrino.ttf"; - strcpy(g_settings.font_file, fontDescr.filename.c_str()); - } else { - fprintf( stderr,"[neutrino] font file [%s] not found\n neutrino exit\n",FONTDIR"/neutrino.ttf"); - _exit(0); + dynFontStyle[0] = g_dynFontRenderer->AddFont(fontDescr.filename.c_str()); + + fontDescr.name = g_dynFontRenderer->getFamily(fontDescr.filename.c_str()); + printf("[neutrino] font family %s\n", fontDescr.name.c_str()); + dynFontStyle[1] = "Bold Regular"; + + g_dynFontRenderer->AddFont(fontDescr.filename.c_str(), true); // make italics + dynFontStyle[2] = "Italic"; + } +} + +void CNeutrinoFonts::SetupNeutrinoFonts(bool initRenderClass/*=true*/) +{ + if (initRenderClass) { + if (g_fontRenderer != NULL) + delete g_fontRenderer; + g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100); + + old_fontDescr.size_offset = fontDescr.size_offset; + old_fontDescr.filename = fontDescr.filename; + fontDescr.filename = ""; + printf("[neutrino] settings font file %s\n", g_settings.font_file); + if (access(g_settings.font_file, F_OK)) { + if (!access(FONTDIR"/neutrino.ttf", F_OK)) { + fontDescr.filename = FONTDIR"/neutrino.ttf"; + strcpy(g_settings.font_file, fontDescr.filename.c_str()); + } + else { + fprintf( stderr,"[neutrino] font file [%s] not found\n neutrino exit\n",FONTDIR"/neutrino.ttf"); + _exit(0); + } } + else + fontDescr.filename = g_settings.font_file; - } else - fontDescr.filename = g_settings.font_file; - fontStyle[0] = g_fontRenderer->AddFont(fontDescr.filename.c_str()); + fontStyle[0] = g_fontRenderer->AddFont(fontDescr.filename.c_str()); - old_fontDescr.name = fontDescr.name; - fontDescr.name = ""; - fontDescr.name = g_fontRenderer->getFamily(fontDescr.filename.c_str()); - printf("[neutrino] font family %s\n", fontDescr.name.c_str()); - fontStyle[1] = "Bold Regular"; + old_fontDescr.name = fontDescr.name; + fontDescr.name = ""; + fontDescr.name = g_fontRenderer->getFamily(fontDescr.filename.c_str()); + printf("[neutrino] font family %s\n", fontDescr.name.c_str()); + fontStyle[1] = "Bold Regular"; - g_fontRenderer->AddFont(fontDescr.filename.c_str(), true); // make italics - fontStyle[2] = "Italic"; + g_fontRenderer->AddFont(fontDescr.filename.c_str(), true); // make italics + fontStyle[2] = "Italic"; + } for (int i = 0; i < SNeutrinoSettings::FONT_TYPE_COUNT; i++) { if (g_Font[i]) delete g_Font[i]; g_Font[i] = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[neutrino_font[i].style].c_str(), CNeutrinoApp::getInstance()->getConfigFile()->getInt32(locale_real_names[neutrino_font[i].name], neutrino_font[i].defaultsize) + neutrino_font[i].size_offset * fontDescr.size_offset); } + if (g_SignalFont) delete g_SignalFont; g_SignalFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[signal_font.style].c_str(), signal_font.defaultsize + signal_font.size_offset * fontDescr.size_offset); } @@ -177,7 +205,7 @@ void CNeutrinoFonts::refreshDynFont(int dx, int dy, std::string text, int style, if (dyn_font->font != NULL) delete dyn_font->font; - Font *dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); + Font *dynFont = g_dynFontRenderer->getFont(fontDescr.name.c_str(), dynFontStyle[style].c_str(), dynSize); dyn_font->font = dynFont; dyn_font->size = dynSize; if (dyn_font->size != dynSize) @@ -197,8 +225,6 @@ int CNeutrinoFonts::getFontHeight(Font* fnt) int CNeutrinoFonts::getDynFontSize(int dx, int dy, std::string text, int style) { Font *dynFont = NULL; - int _width = 0; - int _height = 0; int dynSize = 8; bool dynFlag = false; @@ -206,7 +232,9 @@ int CNeutrinoFonts::getDynFontSize(int dx, int dy, std::string text, int style) while (1) { if (dynFont != NULL) delete dynFont; - dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); + dynFont = g_dynFontRenderer->getFont(fontDescr.name.c_str(), dynFontStyle[style].c_str(), dynSize); + int _width = 0; + int _height = 0; // calculate height & width _height = getFontHeight(dynFont); std::string tmpText = text; @@ -273,8 +301,10 @@ Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int { if ((dx <= 0) && (dy <= 0)) return NULL; - if ((fontDescr.name == "") || (fontDescr.filename == "") || (g_fontRenderer == NULL)) + if ((fontDescr.name == "") || (fontDescr.filename == "")) SetupNeutrinoFonts(); + if (g_dynFontRenderer == NULL) + SetupDynamicFonts(); int dynSize = getDynFontSize(dx, dy, text, style); Font *dynFont = NULL; @@ -288,7 +318,7 @@ Font **CNeutrinoFonts::getDynFontWithID(int &dx, int &dy, std::string text, int return &(v_dyn_fonts[f_id].font); } - dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); + dynFont = g_dynFontRenderer->getFont(fontDescr.name.c_str(), dynFontStyle[style].c_str(), dynSize); if (v_dyn_fonts[f_id].font != NULL) delete v_dyn_fonts[f_id].font; v_dyn_fonts[f_id].dx = dx; @@ -314,7 +344,7 @@ Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int s { if ((dx <= 0) && (dy <= 0)) return NULL; - if ((fontDescr.name == "") || (fontDescr.filename == "") || (g_fontRenderer == NULL)) + if ((fontDescr.name == "") || (fontDescr.filename == "") || (g_dynFontRenderer == NULL)) SetupNeutrinoFonts(); int dynSize = getDynFontSize(dx, dy, text, style); @@ -342,7 +372,7 @@ Font **CNeutrinoFonts::getDynFontShare(int &dx, int &dy, std::string text, int s ret = &(v_share_fonts[i].font); } else { - dynFont = g_fontRenderer->getFont(fontDescr.name.c_str(), fontStyle[style].c_str(), dynSize); + dynFont = g_dynFontRenderer->getFont(fontDescr.name.c_str(), dynFontStyle[style].c_str(), dynSize); dyn_font_t dyn_font; dyn_font.dx = dx; dyn_font.dy = dy; diff --git a/src/driver/neutrinofonts.h b/src/driver/neutrinofonts.h index 959e7b9e5..d03edf779 100644 --- a/src/driver/neutrinofonts.h +++ b/src/driver/neutrinofonts.h @@ -52,6 +52,7 @@ class CNeutrinoFonts { private: std::string fontStyle[3]; + std::string dynFontStyle[3]; typedef struct dyn_font_t { @@ -91,6 +92,14 @@ class CNeutrinoFonts FONT_ID_MAX }; + enum { + FONTSETUP_NEUTRINO_FONT = 1, /* refresh neutrino fonts */ + FONTSETUP_NEUTRINO_FONT_INST = 2, /* delete & initialize font renderer class */ + FONTSETUP_DYN_FONT = 4, /* refresh dynamic fonts */ + FONTSETUP_DYN_FONT_INST = 8, /* delete & initialize font renderer class */ + + FONTSETUP_ALL = FONTSETUP_NEUTRINO_FONT | FONTSETUP_NEUTRINO_FONT_INST | FONTSETUP_DYN_FONT | FONTSETUP_DYN_FONT_INST + }; CNeutrinoFonts(); ~CNeutrinoFonts(); @@ -99,7 +108,8 @@ class CNeutrinoFonts neutrino_font_descr_struct fontDescr; neutrino_font_descr_struct old_fontDescr; - void SetupNeutrinoFonts(); + void SetupNeutrinoFonts(bool initRenderClass = true); + void SetupDynamicFonts(bool initRenderClass = true); void refreshDynFonts(); Font **getDynFont(int &dx, int &dy, std::string text="", int style=FONT_STYLE_REGULAR, int share=FONT_ID_SHARE); void setFontUseDigitHeight(bool set=true) {useDigitOffset = set;} diff --git a/src/global.h b/src/global.h index 2870b54b2..73322e913 100644 --- a/src/global.h +++ b/src/global.h @@ -87,6 +87,7 @@ NEUTRINO_CPP CSectionsdClient *g_Sectionsd; NEUTRINO_CPP CTimerdClient *g_Timerd; NEUTRINO_CPP FBFontRenderClass *g_fontRenderer; +NEUTRINO_CPP FBFontRenderClass *g_dynFontRenderer; NEUTRINO_CPP Font * g_Font[SNeutrinoSettings::FONT_TYPE_COUNT]; NEUTRINO_CPP Font * g_SignalFont; diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index dcfd32b9d..6deb82a34 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -194,7 +194,7 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) { strcpy(g_settings.font_file, fileBrowser.getSelectedFile()->Name.c_str()); printf("[neutrino] new font file %s\n", fileBrowser.getSelectedFile()->Name.c_str()); - CNeutrinoApp::getInstance()->SetupFonts(); + CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_ALL); osdFontFile = "(" + getBaseName(fileBrowser.getSelectedFile()->Name) + ")"; mfFontFile->setOption(osdFontFile.c_str()); } @@ -211,7 +211,7 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) strcpy(g_settings.ttx_font_file, fileBrowser.getSelectedFile()->Name.c_str()); ttx_font_file = fileBrowser.getSelectedFile()->Name; printf("[neutrino] ttx font file %s\n", fileBrowser.getSelectedFile()->Name.c_str()); - CNeutrinoApp::getInstance()->SetupFonts(); + CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT | CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT_INST); osdTtxFontFile = "(" + getBaseName(fileBrowser.getSelectedFile()->Name) + ")"; mfTtxFontFile->setOption(osdTtxFontFile.c_str()); } @@ -253,7 +253,7 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey) printf("[neutrino] new font scale settings x: %d%% y: %d%%\n", xre, yre); g_settings.screen_xres = xre; g_settings.screen_yres = yre; - CNeutrinoApp::getInstance()->SetupFonts(); + CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT | CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT_INST); } //return menu_return::RETURN_REPAINT; return res; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index cdcdfed51..2250b2dd0 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1522,12 +1522,18 @@ void CNeutrinoApp::SetupFrameBuffer() * CNeutrinoApp - setup fonts * **************************************************************************************/ -void CNeutrinoApp::SetupFonts() +void CNeutrinoApp::SetupFonts(int fmode) { if (neutrinoFonts == NULL) neutrinoFonts = CNeutrinoFonts::getInstance(); - neutrinoFonts->SetupNeutrinoFonts(); - neutrinoFonts->refreshDynFonts(); + + if ((fmode & CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT) == CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT) + neutrinoFonts->SetupNeutrinoFonts(((fmode & CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT_INST) == CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT_INST)); + + if ((fmode & CNeutrinoFonts::FONTSETUP_DYN_FONT) == CNeutrinoFonts::FONTSETUP_DYN_FONT) { + neutrinoFonts->SetupDynamicFonts(((fmode & CNeutrinoFonts::FONTSETUP_DYN_FONT_INST) == CNeutrinoFonts::FONTSETUP_DYN_FONT_INST)); + neutrinoFonts->refreshDynFonts(); + } /* recalculate infobar position */ if (g_InfoViewer) @@ -3462,6 +3468,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) delete g_Sectionsd; delete g_RemoteControl; delete g_fontRenderer; + delete g_dynFontRenderer; delete hintBox; @@ -3947,6 +3954,7 @@ void CNeutrinoApp::Cleanup() printf("cleanup 11\n");fflush(stdout); delete g_fontRenderer; g_fontRenderer = NULL; + delete g_dynFontRenderer; g_dynFontRenderer = NULL; printf("cleanup 12\n");fflush(stdout); delete g_PicViewer; g_PicViewer = NULL; printf("cleanup 13\n");fflush(stdout); diff --git a/src/neutrino.h b/src/neutrino.h index 133a29310..d93fd5d3e 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -37,6 +37,7 @@ #include #include "driver/framebuffer.h" +#include "driver/neutrinofonts.h" #include "system/setting_helpers.h" #include "system/configure_network.h" #include "daemonc/remotecontrol.h" /* st_rmsg */ @@ -153,7 +154,7 @@ public: void loadKeys(const char * fname = NULL); void saveKeys(const char * fname = NULL); void SetupTiming(); - void SetupFonts(); + void SetupFonts(int fmode = CNeutrinoFonts::FONTSETUP_ALL); void setupRecordingDevice(void); ~CNeutrinoApp(); diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index 99717e25f..b2ca12c00 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -316,7 +316,7 @@ bool CFontSizeNotifier::changeNotify(const neutrino_locale_t, void *) CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FONTSIZE_HINT)); // UTF-8 hintBox.paint(); - CNeutrinoApp::getInstance()->SetupFonts(); + CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT); hintBox.hide(); /* recalculate infoclock/muteicon/volumebar */ From f75d6d1ea1035a240bfb095888cbdce71192bbae Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 24 Jul 2013 14:49:29 +0400 Subject: [PATCH 069/142] nederlands.locale update --- data/locale/nederlands.locale | 154 +++++++++++++++++++++------------- 1 file changed, 96 insertions(+), 58 deletions(-) diff --git a/data/locale/nederlands.locale b/data/locale/nederlands.locale index d0690fe41..63095d533 100644 --- a/data/locale/nederlands.locale +++ b/data/locale/nederlands.locale @@ -9,13 +9,13 @@ EPGPlus.bybouquet_mode Per favorietenlijst EPGPlus.bypage_mode Per pagina EPGPlus.head Programmagids overzicht (EPG Plus) EPGPlus.next_bouquet Volgende favorietenlijst -EPGPlus.options opties +EPGPlus.options Opties EPGPlus.page_down Pagina omlaag EPGPlus.page_up Pagina omhoog EPGPlus.prev_bouquet Vorige favorietenlijst EPGPlus.record Opnemen EPGPlus.refresh_epg Herlaad EPG -EPGPlus.remind Plannen +EPGPlus.remind Zap reservering EPGPlus.scroll_mode Scroll modus EPGPlus.select_font_name Lettertype naam EPGPlus.stretch_mode Uitgestrekte modus @@ -116,7 +116,7 @@ audiomenu.avs avs audiomenu.avsync A/V synchronisatie audiomenu.avsync_am Audio master audiomenu.clockrec -audiomenu.dolbydigital Dolby Digital +audiomenu.dolbydigital Automatisch Dolby Digital gebruiken indien aanwezig audiomenu.hdmi_dd Encoded Dolby Digital via HDMI audiomenu.hdmi_dd_auto Automatisch audiomenu.hdmi_dd_force Forceer @@ -240,6 +240,7 @@ channellist.sats Satellieten channellist.since sinds channellist.start start tijd ci.clock CI kloksnelheid (Mhz) +ci.ignore_msg Negeer CA berichten ci.empty Geen CAM geplaatst ci.init_failed Initialisatie CAM mislukt ci.init_ok Initialisatie CAM compleet @@ -327,7 +328,7 @@ eventfinder.search_within_epg Zoeken in eventfinder.search_within_list Zoeken in eventfinder.searching Zoek naar trefwoord in EPG... eventfinder.start_search Zoeken starten -eventlistbar.channelswitch Omschakelen +eventlistbar.channelswitch Zap reservering eventlistbar.eventsort Sorteren eventlistbar.recordevent Opnemen extra.add_to_bouquet Toevoegen aan favorietenlijst @@ -670,9 +671,10 @@ keychoosermenu.setnone Geen toets languagesetup.head Taal / Tijdzone languagesetup.osd OSD taal languagesetup.select OSD taal -lcd_info_line show in infoline +lcd_info_line Weergave in display lcd_info_line_channel kanaalnaam lcd_info_line_clock klok +reset_removed Gewiste kanalen definitief verwijderen lcdcontroler.brightness Normale helderheid lcdcontroler.brightnessdeepstandby Deep Standby helderheid lcdcontroler.brightnessstandby Standby Helderheid @@ -685,7 +687,7 @@ lcdmenu.statusline.both volume / afspeelduur lcdmenu.statusline.playtime afspeelduur lcdmenu.statusline.volume volume ledcontroler.blink Knipper in deepstandby indien een timer actief is. -ledcontroler.menu Aan/uit knop LEDs +ledcontroler.menu LED eigenschappen ledcontroler.mode.deepstandby Deep Standby ledcontroler.mode.record Knipper tijdens het opnemen ledcontroler.mode.standby Stand-by @@ -699,20 +701,20 @@ mainmenu.clearsectionsd EPG geheugen opschonen mainmenu.games Spelletjes mainmenu.head Hoofdmenu mainmenu.media Media -mainmenu.movieplayer Movie-player +mainmenu.movieplayer Videospeler mainmenu.pausesectionsd Lees EPG mainmenu.pictureviewer Afbeeldingen -mainmenu.radiomode Radio-Mode +mainmenu.radiomode Radio mode mainmenu.reboot Herstart systeem mainmenu.recording Opnemen mainmenu.recording_start Start -mainmenu.recording_stop Stop +mainmenu.recording_stop Stopt mainmenu.scripts Scripts -mainmenu.service Onderhoud -mainmenu.settings Instellingen +mainmenu.service Installatie +mainmenu.settings Systeem Instellingen mainmenu.shutdown Uitschakelen mainmenu.sleeptimer Slaaptimer -mainmenu.tvmode TV-Mode +mainmenu.tvmode TV mode mainmenu.tvradio_switch TV-Radio Schakelaar mainsettings.audio Audio mainsettings.colors Kleur / thema / font @@ -730,7 +732,8 @@ mainsettings.savesettingsnow_hint Instellingen opslaan,\nmoment geduld... mainsettings.timezone Tijdzone mainsettings.video Video menu.back Terug -menu.cancel Annuleer +menu.cancel Annuleer +menu.hint_ytplay Video's afspelen van de populaire video website Youtube menu.hint_a_pic Configureer audiospeler en afbeeldingen menu.hint_aplay Audiospeler menu.hint_audio Audio output, DD\nSRS True volume opties @@ -853,7 +856,7 @@ menu.hint_key_load Laad sneltoetsen backup menu.hint_key_modechange Wijzig TV/Radio mode en standby toetsen menu.hint_key_movieplayer Configureer sneltoetsen voor de Movie-Player menu.hint_key_mpaudio Knop toewijzen voor de weergave van audio selectie\ntijdens het afspelen van een opname. -menu.hint_key_mpbookmark Knop toewijzen om een bladwijzer te plaatsen in een opname tijdens het afspelen hiervan. +menu.hint_key_mpbookmark Knop toewijzen om een markeerpunt te plaatsen in een opname tijdens het afspelen hiervan. menu.hint_key_mppause Knop toewijzen om het afspelen van een opname te pauzeren menu.hint_key_mpplay Knop toewijzen om het afspelen van een opname te hervatten menu.hint_key_mpplugin Knop toewijzen om tijdens het afspelen van een opname \neen geselecteerde plugin te starten. @@ -1207,14 +1210,14 @@ motorcontrol.timed_mode Timed Stap Modus motorcontrol.user_menu Gebruikersmenu motorcontrol.west_limit West limiet instellen moviebrowser.ask_rec_to_delete Het verwijderen van deze film stopt de huidige opname!\n[%s]\nWilt u toch verder gaan? -moviebrowser.book_add Bladwijzer toevoegen -moviebrowser.book_clear_all Alle bladwijzers verwijderen -moviebrowser.book_head Bladwijzers -moviebrowser.book_lastmoviestop Last play stop: +moviebrowser.book_add Markeerpunt toevoegen +moviebrowser.book_clear_all Alle markeerpunten verwijderen +moviebrowser.book_head Markeerpunten +moviebrowser.book_lastmoviestop Hervatten vanaf laatste afspeelstop moviebrowser.book_movieend Einde film: moviebrowser.book_moviestart Start film: -moviebrowser.book_name Naam bladwijzer: -moviebrowser.book_new Nieuwe bladwijzer +moviebrowser.book_name Naam markeerpunt: +moviebrowser.book_new Nieuw markeerpunt moviebrowser.book_position Positie: moviebrowser.book_type Spring (<0 terug , >0 voor): moviebrowser.book_type_backward Herhaal @@ -1227,8 +1230,8 @@ moviebrowser.browser_row_width Kolom breedte [%] moviebrowser.delete_info Bestanden verwijderen, een moment geduld... moviebrowser.dir Pad moviebrowser.dir_head extra paden -moviebrowser.edit_book Bookmark Wijzig -moviebrowser.edit_book_name_info1 Geef nieuwe bookmark naam +moviebrowser.edit_book Markeerpunt wijzigen +moviebrowser.edit_book_name_info1 Geef markeerpunt een nieuwe naam moviebrowser.edit_book_name_info2 moviebrowser.edit_book_pos_info1 Geef nieuwe eindpositie (s) moviebrowser.edit_book_pos_info2 @@ -1239,7 +1242,7 @@ moviebrowser.error_no_movies geen films gevonden moviebrowser.foot_filter Filter: moviebrowser.foot_play Start film moviebrowser.foot_sort Sorteer: -moviebrowser.head TS Film browser +moviebrowser.head Opnames afspelen moviebrowser.head_filter Filter flims per categorie: moviebrowser.head_playlist Laatst afgespeeld: moviebrowser.head_recordlist Laatst opgenomen: @@ -1254,7 +1257,7 @@ moviebrowser.info_channel Kanaal moviebrowser.info_filename Naam moviebrowser.info_genre_major Genre moviebrowser.info_genre_minor Genre -moviebrowser.info_head Film informatie +moviebrowser.info_head Movie Editor moviebrowser.info_head_update Wijzigingen opslaan in alle video informatie bestanden moviebrowser.info_info1 Info 1 moviebrowser.info_info2 Info 2 @@ -1266,11 +1269,11 @@ moviebrowser.info_parental_lockage_16year 16 jaar moviebrowser.info_parental_lockage_18year 18 jaar moviebrowser.info_parental_lockage_6year 6 jaar moviebrowser.info_parental_lockage_always nooit -moviebrowser.info_path Path +moviebrowser.info_path Opslag directory moviebrowser.info_prevplaydate Laatst afgespleeld op -moviebrowser.info_prodcountry LAnd +moviebrowser.info_prodcountry Land moviebrowser.info_prodyear Jaar -moviebrowser.info_quality Qualiteit +moviebrowser.info_quality Kwaliteit moviebrowser.info_recorddate Datum van opname moviebrowser.info_serie Serie moviebrowser.info_size Bestandsgrootte in (MB) @@ -1281,7 +1284,7 @@ moviebrowser.last_record_max_items Aantal lijnen laatste opname moviebrowser.load_default Laad standaard instellingen moviebrowser.menu_directories_head Directory's moviebrowser.menu_help_head Help -moviebrowser.menu_main_bookmarks Bladwijzers +moviebrowser.menu_main_bookmarks Markeerpunten moviebrowser.menu_main_head Instellingen moviebrowser.menu_main_movieinfo Film info moviebrowser.menu_main_saveandback Opslaan en terug @@ -1322,34 +1325,54 @@ moviebrowser.short_serie Serie moviebrowser.short_size MB moviebrowser.short_title Titel moviebrowser.start_head Start film vanaf: -moviebrowser.start_record_start Film start +moviebrowser.start_record_start Afspelen vanaf het begin moviebrowser.update_if_dest_empty_only Kopieer indien doelbestemming leeg is moviebrowser.use_dir Gebruik directory moviebrowser.use_movie_dir Gebruik film directory moviebrowser.use_rec_dir Gebruik opname directory -movieplayer.bookmark Bladwijzers -movieplayer.bookmarkname Bladwijzer naam -movieplayer.bookmarkname_hint1 Naam invoeren voor uw bladwijzer +moviebrowser.foot_focus Schakel venster +moviebrowser.foot_refresh Lijst herladen +moviebrowser.yt_error Laden van youtube video mislukt +moviebrowser.yt_max_results Maximaal aantal resultaten +moviebrowser.yt_most_discussed Meest besproken +moviebrowser.yt_most_popular Meest populair +moviebrowser.yt_most_resent Meest recent +moviebrowser.yt_most_responded Meeste reacties +moviebrowser.yt_most_shared Meest gedeeld +moviebrowser.yt_next_results Volgende zoekresultaten +moviebrowser.yt_on_the_web Trending video's +moviebrowser.yt_prev_results Vorige zoekresultaten +moviebrowser.yt_recently_featured Recent aanbevolen +moviebrowser.yt_region Regio +moviebrowser.yt_related Gerelateerde video's +moviebrowser.yt_search Trefwoord +moviebrowser.yt_top_favorites Top favorieten +moviebrowser.yt_top_rated Meest gewaardeerd +moviebrowser.foot_options Opties +movieplayer.bookmark Markeerpunten +movieplayer.bookmarkname Naam markeerpunt +movieplayer.bookmarkname_hint1 Naam invoeren voor uw markeerpunt movieplayer.bookmarkname_hint2 movieplayer.defplugin Start-Plugin -movieplayer.fileplayback Bestand afspelen -movieplayer.head Movieplayer -movieplayer.toomanybookmarks Er zijn te veel bladwijzers.\n Verwijder eerst een bladwijzer. +movieplayer.fileplayback Video afspelen +movieplayer.head Videospeler +movieplayer.toomanybookmarks Er zijn te veel markeerpunten.\n Verwijder eerst een markeerpunt. movieplayer.tshelp1 Stop movieplayer.tshelp10 Ongeveer 10 minuten terug movieplayer.tshelp11 Ongeveer 10 minuten overslaan movieplayer.tshelp12 Help: http://www.giggo.de/dbox2/movieplayer.html\n movieplayer.tshelp2 Selecteer audio track movieplayer.tshelp3 Pause/Voortzetten -movieplayer.tshelp4 Creëer bladwijzer +movieplayer.tshelp4 Creëer markeerpunt movieplayer.tshelp5 Voortgang weergeven movieplayer.tshelp6 Ongeveer 1 minuut terug movieplayer.tshelp7 Ongeveer 1 minuut overslaan movieplayer.tshelp8 Ongeveer 5 minuten terug movieplayer.tshelp9 Ongeveer 5 minuten overslaan -movieplayer.tsplayback TS Afspelen +movieplayer.tsplayback Opname afspelen +movieplayer.ytplayback Youtube video's mpkey.audio Audio track -mpkey.bookmark Bladwijzer opslaan +mpkey.bookmark Markeerpunt opslaan mpkey.forward Vooruit mpkey.pause Pause mpkey.play Afspelen @@ -1426,6 +1449,9 @@ options.on Aan options.on.without_messages Zonder bericht options.serial serial parentallock.changepin verander PIN code +parentallock.bouquetmode Favorieten lijsten zijn standaard: +parentallock.defaultlocked Beveiligd met een PIN code +parentallock.defaultunlocked Onbeveiligd parentallock.changepin_hint1 Geef de nieuwe jeugd-bescherm pin code hier in! parentallock.changetolocked bij vergrendelde zenderlijsten parentallock.head Geef Lock PIN code in @@ -1448,7 +1474,7 @@ personalize.button_red rood personalize.button_yellow geel personalize.disabled Uitgeschakeld personalize.enabled Ingeschakeld -personalize.head Persoonlijke voorkeuren +personalize.head Menu configuratie personalize.help Help personalize.help_line1 In het persoonlijke voorkeuren menu is het mogelijk personalize.help_line2 om de meest belangrijke menu's naar uw wens in te stellen. @@ -1463,14 +1489,14 @@ personalize.menudisabledhint Het opgevraagde menu is momenteel uitgeschakeld!\nO personalize.notprotected Nee personalize.notvisible Onzichtbaar personalize.pin PIN -personalize.pin_in_use PIN access for personalize setup -personalize.pincode Personalization PIN -personalize.pinhint Enter the Personalization PIN Code +personalize.pin_in_use Geselecteerde menu's beveiligen met een PIN code +personalize.pincode Vereiste pincode voor beveiligde menu's +personalize.pinhint Voer de gewenste pincode in voor menu configuratie personalize.pinprotect Ja personalize.pinstatus PIN vereist personalize.plugins Plugins -personalize.usermenu_preferred_buttons Assigning of preferred keys -personalize.usermenu_show_cancel Show "Cancel"-Button +personalize.usermenu_preferred_buttons Gewenste toetsen toewijzen. +personalize.usermenu_show_cancel Annuleer toets weergeven personalize.visible Zichtbaar pictureviewer.defdir start dir. pictureviewer.head Afbeeldingen @@ -1585,10 +1611,22 @@ satsetup.fastscan_sd Enkel SD satsetup.fastscan_type Scantype satsetup.fe_mode Tuner modus satsetup.fe_mode_alone Onafhankelijk -satsetup.fe_mode_loop Doorlussen + + +satsetup.fe_mode Tuner mode +satsetup.fe_mode_independent Onafhankelijk +satsetup.fe_mode_link_loop Doorgelust +satsetup.fe_mode_link_twin Twin +satsetup.fe_mode_master Master +satsetup.fe_mode_unused Ongebruikt + + +satsetup.fe_mode_loop Doorgelust satsetup.fe_mode_single Single satsetup.fe_mode_twin Twin satsetup.fe_setup Tuner instellen + + satsetup.lofh LNB High Offset satsetup.lofl LNB Low Offset satsetup.lofs LNB switch Offset @@ -1623,12 +1661,12 @@ scants.abort_body Wilt u het scannen onderbreken? scants.abort_header Scan wordt afgebroken scants.actcable Kabel: scants.actsatellite Satelliet: -scants.bouquet Bouquet +scants.bouquet Favorietenlijsten scants.bouquet_create creëer nieuw scants.bouquet_erase wis alles -scants.bouquet_leave niet veranderen +scants.bouquet_leave Ongewijzigd laten scants.bouquet_satellite Satelliet zenderlijst -scants.bouquet_update update +scants.bouquet_update updaten scants.channel kanaal: scants.failed Transponderscan mislukt! scants.finished Transponderscan succesvol beëindigd! @@ -1661,7 +1699,7 @@ screenshot.tv TV resolutie screenshot.video Video in de achtergrond servicemenu.getplugins Herlaad plugins servicemenu.getplugins_hint Plugins worden geladen,\nmoment geduld alstublieft. -servicemenu.head Onderhoud +servicemenu.head Installatie servicemenu.imageinfo Firmware info servicemenu.reload Herlaad kanalenlijst servicemenu.reload_hint Kanalenlijst wordt geladen,\nmoment geduld alstublieft. @@ -1718,7 +1756,7 @@ timer.eventtimed.msg Het programma is gereserveerd. Uw ontvanger \nzal automatis timer.eventtimed.title Reserveer programma timerbar.channelswitch Reservering timerbar.recordevent Opname -timerlist.alarmtime Alarm tijd +timerlist.alarmtime Start tijd timerlist.apids Audio PIDs timerlist.apids_dflt Standaard audio streams opnemen timerlist.ask_to_delete Uw huidige opname wordt stop gezet. Wilt u verder gaan? @@ -1811,7 +1849,7 @@ usermenu.head Gebruikersmenu usermenu.item_bar ---- Boarder ---- usermenu.item_epg_misc EPG functions usermenu.item_none (empty) -usermenu.item_vtxt Videotext +usermenu.item_vtxt Teletekst usermenu.msg_info_is_empty U heeft geen naam voor dit menu gedefinieerd.\nDe standaard naam wordt gebruikt:\n usermenu.msg_warning_name U heeft meerdere items gemaakt voor dit menu,\ngeen van de items heeft een naam.\nhet wordt aanbevolen om een naam in te voeren. usermenu.msg_warning_no_items Geen items gedefinieerd.\n De menu naam is gereset! @@ -1835,7 +1873,7 @@ videomenu.dbdr MPEG2 de-block/de-ring videomenu.dbdr_both de-block+de-ring videomenu.dbdr_deblock de-block videomenu.dbdr_none Geen -videomenu.enabled_modes VF toets ingeschakelde modus +videomenu.enabled_modes Ingeschakelde video modi videomenu.fullscreen Volledig scherm videomenu.hdmi_cec CSTLink (HDMI-CEC) videomenu.hdmi_cec_mode Gebruik ontvanger @@ -1850,7 +1888,7 @@ videomenu.panscan Pan&Scan videomenu.panscan2 14:9 Pan&Scan videomenu.saturation Verzadiging videomenu.scart Scart -videomenu.screensetup Scherm instellingen +videomenu.screensetup Scherm instellicingen videomenu.sharpness Scherpheid videomenu.tv-scart Video videomenu.vcrsignal VCR Output Signaal Type @@ -1867,11 +1905,11 @@ wizard.install_settings Wilt u de kanalen van Astra 1 (19.2º oost) inscannen? wizard.welcome_head Welkom in de installatie wizard wizard.welcome_text In de volgende stappen zullen we u begeleiden bij de eerste installatie van uw ontvanger.\n word.from Van -zapit.scantype scan naar services -zapit.scantype.all alle services -zapit.scantype.radio alleen radio -zapit.scantype.tv alleen tv -zapit.scantype.tvradio tv & radio +zapit.scantype Wat voor kanalen wilt u zoeken? +zapit.scantype.all Alle services +zapit.scantype.radio Alleen radio +zapit.scantype.tv Alleen TV +zapit.scantype.tvradio TV & Radio zapitsetup.head Start kanaal instellingen zapitsetup.info Start kanaal zapitsetup.last_radio Radio kanaal From dd29b0ae86d2bf73e29a820ecdf532255afc59c7 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 24 Jul 2013 14:52:41 +0400 Subject: [PATCH 070/142] english.locale: little changes/corrections --- data/locale/english.locale | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/locale/english.locale b/data/locale/english.locale index c6b792dba..e709825c8 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1412,7 +1412,7 @@ movieplayer.tshelp7 skip approx. 1 minute movieplayer.tshelp8 approx. 5 minutes back movieplayer.tshelp9 skip approx. 5 minutes movieplayer.tsplayback Play TS -movieplayer.ytplayback Youtube feeds playback +movieplayer.ytplayback Youtube videoplayer mpkey.audio Audio track mpkey.bookmark save bookmark mpkey.forward Forward @@ -1493,7 +1493,7 @@ options.on.without_messages Without msg options.serial serial parentallock.bouquetmode Bouquets are default parentallock.changepin change PIN code -parentallock.changepin_hint1 Enter your new youth protection pin code here! +parentallock.changepin_hint1 Enter your new parental lock pin code here! parentallock.changetolocked on locked bouquets parentallock.defaultlocked locked parentallock.defaultunlocked unlocked @@ -1506,7 +1506,7 @@ parentallock.lockedchannel Locked sender... parentallock.lockedprogram Locked program (from %d years up) parentallock.never never parentallock.onsignal on broadcasted lock -parentallock.parentallock Youth protection +parentallock.parentallock Parental lock parentallock.prompt prompt for PIN personalize.access Access options personalize.apply_settings Apply changes? @@ -1525,7 +1525,7 @@ personalize.help_line3 can be set to visible, not visible, activate, deactivate personalize.help_line4 or PIN-protected. personalize.help_line5 The access to personalization can be protected personalize.help_line6 with PIN. The PIN is identical for all protected menus -personalize.help_line7 (not for youth protection). +personalize.help_line7 (not for parental lock). personalize.help_line8 Default PIN is: 0000 personalize.menuconfiguration Menu Configuration personalize.menudisabledhint The requested menu is currently disabled!\nFor activation please open menu 'Personalize'\nto find in menu 'Settings'! @@ -1618,7 +1618,7 @@ recordingmenu.record_is_running Record is running! recordingmenu.save_in_channeldir Save in channel dir recordingmenu.server server recordingmenu.server_mac MAC address -recordingmenu.setupnow activate changes +recordingmenu.setupnow Activate changes recordingmenu.slow_warn Enable slow record warning recordingmenu.timeshift Timeshift recordingmenu.tsdir Timeshift directory From c7e5bc6e20e727b4482302fb736d57502e919955 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 26 Jul 2013 14:01:32 +0400 Subject: [PATCH 071/142] gui/moviebrowser.cpp: fix bug with always re-loaded ts/xml files --- src/gui/moviebrowser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index c00b79c94..13c1249cf 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -2868,7 +2868,6 @@ void CMovieBrowser::loadMovies(bool doRefresh) loadBox.paint(); //clock_act = clock()/10000;TRACE("[mb] *1: time %9ld clock %6ld dclock %6ld*\n",(long)time(NULL),clock_act,clock_act - clock_prev);clock_prev = clock_act; - m_file_info_stale = false; if (show_mode == MB_SHOW_YT) { loadYTitles(m_settings.ytmode, m_settings.ytsearch, m_settings.ytvid); } else { @@ -2884,6 +2883,7 @@ void CMovieBrowser::loadMovies(bool doRefresh) autoFindSerie(); } } + m_file_info_stale = false; loadBox.hide(); From 291a990be3805167afca4c64799783579f043bad Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 29 Jul 2013 16:50:30 +0400 Subject: [PATCH 072/142] gui/channellist.cpp: fix selected after direct record --- src/gui/channellist.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 5d51750b8..17165f2ee 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -667,9 +667,10 @@ int CChannelList::show() if (!CRecordManager::getInstance()->Record(chanlist[selected]->channel_id)) { paintHead(); paint(); - } else + } else { + selected = oldselected; loop=false; - + } } } else if( msg == CRCInput::RC_stop ) { //stopp recording From bbe63318b83b4e9f114abb938b42e3b17a33fc61 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 10:16:18 +0400 Subject: [PATCH 073/142] gui/infoviewer.cpp: disable EVT_NOEPG_YET in virtual zap mode --- src/gui/infoviewer.cpp | 21 ++++++++++++--------- src/gui/infoviewer.h | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 27db7e516..c75885d16 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1367,6 +1367,15 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) return messages_return::unhandled; } +void CInfoViewer::sendNoEpg(const t_channel_id channel_id) +{ + if (!virtual_zap_mode) { + char *p = new char[sizeof(t_channel_id)]; + memcpy(p, &channel_id, sizeof(t_channel_id)); + g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); + } +} + CSectionsdClient::CurrentNextInfo CInfoViewer::getEPG (const t_channel_id for_channel_id, CSectionsdClient::CurrentNextInfo &info) { CEitManager::getInstance()->getCurrentNextServiceKey(for_channel_id, info); @@ -1375,10 +1384,8 @@ CSectionsdClient::CurrentNextInfo CInfoViewer::getEPG (const t_channel_id for_ch /* of there is no EPG, send an event so that parental lock can work */ if (info.current_uniqueKey == 0 && info.next_uniqueKey == 0) { + sendNoEpg(for_channel_id); oldinfo = info; - char *p = new char[sizeof(t_channel_id)]; - memcpy(p, &for_channel_id, sizeof(t_channel_id)); - g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); return info; } @@ -1393,9 +1400,7 @@ CSectionsdClient::CurrentNextInfo CInfoViewer::getEPG (const t_channel_id for_ch msg = NeutrinoMessages::EVT_NEXTEPG; g_RCInput->postMsg(msg, (unsigned) _info, false ); } else { - char *p = new char[sizeof(t_channel_id)]; - memcpy(p, &for_channel_id, sizeof(t_channel_id)); - g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); // data is pointer to allocated memory + sendNoEpg(for_channel_id); } oldinfo = info; } @@ -1699,12 +1704,10 @@ void CInfoViewer::show_Data (bool calledFromEvent) // no EPG available display_Info(g_Locale->getText(gotTime ? LOCALE_INFOVIEWER_NOEPG : LOCALE_INFOVIEWER_WAITTIME), NULL); /* send message. Parental pin check gets triggered on EPG events... */ - char *p = new char[sizeof(t_channel_id)]; - memmove(p, &channel_id, sizeof(t_channel_id)); /* clear old info in getEPG */ CSectionsdClient::CurrentNextInfo dummy; getEPG(0, dummy); - g_RCInput->postMsg(NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory + sendNoEpg(channel_id); return; } diff --git a/src/gui/infoviewer.h b/src/gui/infoviewer.h index d14bbc11c..340298f30 100644 --- a/src/gui/infoviewer.h +++ b/src/gui/infoviewer.h @@ -140,6 +140,7 @@ class CInfoViewer void show_current_next(bool new_chan, int epgpos); void reset_allScala(); void check_channellogo_ca_SettingsChange(); + void sendNoEpg(const t_channel_id channel_id); public: bool chanready; bool is_visible; From 05460d1a4dad66f274eae8c2a901f3a00aeab2be Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 10:25:24 +0400 Subject: [PATCH 074/142] zapit/src/frontend.cpp: comment voltage switching for rotor commands --- src/zapit/src/frontend.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 66afddd72..20dbce74b 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -919,7 +919,6 @@ void CFrontend::sendMotorCommand(uint8_t cmdtype, uint8_t address, uint8_t comma struct dvb_diseqc_master_cmd cmd; int i; fe_sec_tone_mode_t oldTone = currentToneMode; - fe_sec_voltage_t oldVoltage = currentVoltage; printf("[fe%d] sendMotorCommand: cmdtype = %x, address = %x, cmd = %x\n", fenumber, cmdtype, address, command); printf("[fe%d] sendMotorCommand: num_parms = %d, parm1 = %x, parm2 = %x\n", fenumber, num_parameters, parameter1, parameter2); @@ -931,14 +930,17 @@ void CFrontend::sendMotorCommand(uint8_t cmdtype, uint8_t address, uint8_t comma cmd.msg[4] = parameter2; cmd.msg_len = 3 + num_parameters; - //secSetVoltage(config.highVoltage ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13, 15); secSetTone(SEC_TONE_OFF, 15); - secSetVoltage(SEC_VOLTAGE_13, 100); +#if 0 + fe_sec_voltage_t oldVoltage = currentVoltage; + //secSetVoltage(config.highVoltage ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13, 15); + //secSetVoltage(SEC_VOLTAGE_13, 100); +#endif for(i = 0; i <= repeat; i++) sendDiseqcCommand(&cmd, 50); - secSetVoltage(oldVoltage, 15); + //secSetVoltage(oldVoltage, 15); secSetTone(oldTone, 15); printf("[fe%d] motor command sent.\n", fenumber); @@ -1614,7 +1616,9 @@ void CFrontend::gotoXX(t_satellite_position pos) } printf("RotorCmd = %04x\n", RotorCmd); + if (config.highVoltage) + secSetVoltage(SEC_VOLTAGE_18, 100); sendMotorCommand(0xE0, 0x31, 0x6E, 2, ((RotorCmd & 0xFF00) / 0x100), RotorCmd & 0xFF, repeatUsals); - secSetVoltage(config.highVoltage ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13, 15); //FIXME ? + //secSetVoltage(config.highVoltage ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13, 15); //FIXME ? } From 853baa6f29f34a7a26551467f3da44d36b9b4246 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 10:26:01 +0400 Subject: [PATCH 075/142] gui/channellist.cpp: fix quick zap and virtual zap, when empty bouquets present and zap cycle in current bouquet is disabled --- src/gui/channellist.cpp | 62 ++++++++++++++++++++++++----------------- src/gui/channellist.h | 1 + 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 17165f2ee..13b71dbb3 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -576,6 +576,30 @@ bool CChannelList::updateSelection(int newpos) return actzap; } +int CChannelList::getPrevNextBouquet(bool next) +{ + bool found = true; + int dir = next ? 1 : -1; + int b_size = bouquetList->Bouquets.size(); /* bigger than 0 */ + int nNext = (bouquetList->getActiveBouquetNumber() + b_size + dir) % b_size; + if(bouquetList->Bouquets[nNext]->channelList->isEmpty() ) { + found = false; + int n_old = nNext; + nNext = (nNext + b_size + dir) % b_size; + for (int i = nNext; i != n_old; i = (i + b_size + dir) % b_size) { + if( !bouquetList->Bouquets[i]->channelList->isEmpty() ) { + found = true; + nNext = i; + break; + } + } + } + if (found) + return nNext; + + return -1; +} + #define CHANNEL_SMSKEY_TIMEOUT 800 /* return: >= 0 to zap, -1 on cancel, -3 on list mode change, -4 list edited, -2 zap but no restore old list/chan ?? */ int CChannelList::show() @@ -766,23 +790,8 @@ int CChannelList::show() if (dline) dline->kill(); //kill details line on change to next page if (!bouquetList->Bouquets.empty()) { - bool found = true; - int dir = msg == (neutrino_msg_t)g_settings.key_bouquet_up ? 1 : -1; - int b_size = bouquetList->Bouquets.size(); /* bigger than 0 */ - int nNext = (bouquetList->getActiveBouquetNumber() + b_size + dir) % b_size; - if(bouquetList->Bouquets[nNext]->channelList->isEmpty() ) { - found = false; - int n_old = nNext; - nNext = (nNext + b_size + dir) % b_size; - for (int i = nNext; i != n_old; i = (i + b_size + dir) % b_size) { - if( !bouquetList->Bouquets[i]->channelList->isEmpty() ) { - found = true; - nNext = i; - break; - } - } - } - if(found) { + int nNext = getPrevNextBouquet(msg == (neutrino_msg_t)g_settings.key_bouquet_up); + if(nNext >= 0) { bouquetList->activateBouquet(nNext, false); res = bouquetList->showChannelList(); loop = false; @@ -1458,21 +1467,22 @@ CZapitChannel* CChannelList::getPrevNextChannel(int key, unsigned int &sl) printf("CChannelList::getPrevNextChannel: selected %d total %d active bouquet %d total %d\n", (int)cactive, (int)chanlist.size(), bactive, bsize); if ((key == g_settings.key_quickzap_down) || (key == CRCInput::RC_left)) { if(cactive == 0) { - if(bactive == 0) - bactive = bsize - 1; - else - bactive--; - bouquetList->activateBouquet(bactive, false); - cactive = bouquetList->Bouquets[bactive]->channelList->getSize() - 1; + bactive = getPrevNextBouquet(false); + if (bactive >= 0) { + bouquetList->activateBouquet(bactive, false); + cactive = bouquetList->Bouquets[bactive]->channelList->getSize() - 1; + } } else --cactive; } else if ((key == g_settings.key_quickzap_up) || (key == CRCInput::RC_right)) { cactive++; if(cactive >= chanlist.size()) { - bactive = (bactive + 1) % bsize; - bouquetList->activateBouquet(bactive, false); - cactive = 0; + bactive = getPrevNextBouquet(true); + if (bactive >= 0) { + bouquetList->activateBouquet(bactive, false); + cactive = 0; + } } } sl = cactive; diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 8457334c8..ce34914d1 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -123,6 +123,7 @@ private: int emptyLineCount; void addTextToArray( const std::string & text, int screening ); void processTextToArray(std::string text, int screening = 0); + int getPrevNextBouquet(bool next); public: CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false); From 527e835d7e1674cbc709cdf36eec5774549b3afc Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 11:13:34 +0400 Subject: [PATCH 076/142] update initial astra frontend.conf, use same config as default --- data/initial/frontend.conf | 3 ++- src/zapit/data/frontend.conf | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/data/initial/frontend.conf b/data/initial/frontend.conf index 1bfe6aaf5..013cef302 100644 --- a/data/initial/frontend.conf +++ b/data/initial/frontend.conf @@ -7,6 +7,7 @@ fe0_position_192=192,-1,-1,-1,0,0,9750,10600,11700,0,0,1 fe0_satellites=192 fe0_uni_qrg=0 fe0_uni_scr=-1 +fe0_mode=1 fe1_diseqcRepeats=0 fe1_diseqcType=0 fe1_highVoltage=0 @@ -16,4 +17,4 @@ fe1_position_192=192,-1,-1,-1,0,0,9750,10600,11700,0,0,1 fe1_satellites=192 fe1_uni_qrg=0 fe1_uni_scr=-1 -mode=1 +fe1_mode=0 diff --git a/src/zapit/data/frontend.conf b/src/zapit/data/frontend.conf index e69de29bb..013cef302 100644 --- a/src/zapit/data/frontend.conf +++ b/src/zapit/data/frontend.conf @@ -0,0 +1,20 @@ +fe0_diseqcRepeats=0 +fe0_diseqcType=0 +fe0_highVoltage=0 +fe0_lastSatellitePosition=360 +fe0_motorRotationSpeed=18 +fe0_position_192=192,-1,-1,-1,0,0,9750,10600,11700,0,0,1 +fe0_satellites=192 +fe0_uni_qrg=0 +fe0_uni_scr=-1 +fe0_mode=1 +fe1_diseqcRepeats=0 +fe1_diseqcType=0 +fe1_highVoltage=0 +fe1_lastSatellitePosition=360 +fe1_motorRotationSpeed=18 +fe1_position_192=192,-1,-1,-1,0,0,9750,10600,11700,0,0,1 +fe1_satellites=192 +fe1_uni_qrg=0 +fe1_uni_scr=-1 +fe1_mode=0 From 4fa0c9a233521d4439fb178d91b74842b96fe5e1 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 14:10:17 +0400 Subject: [PATCH 077/142] gui/moviebrowser.cpp: add missed settings for reset to defaults --- src/gui/moviebrowser.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 13c1249cf..ba6884eb4 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -608,6 +608,8 @@ void CMovieBrowser::initGlobalSettings(void) m_settings.ytmode = cYTFeedParser::MOST_POPULAR; m_settings.ytresults = 10; m_settings.ytregion = "default"; + m_settings.ytquality = 37; + m_settings.ytconcconn = 4; } void CMovieBrowser::initFrames(void) From d886a95acd393a5b34ffcb4004238674cc881d1c Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 14:10:21 +0400 Subject: [PATCH 078/142] try to fix shutdown after wakeup, if several recordings was done, cancel shutdown after wakeup, if remote used, based on code (c) martii --- src/driver/rcinput.cpp | 6 ++++++ src/driver/rcinput.h | 1 + src/timerd/timermanager.cpp | 22 ++++++++++++++++++---- src/timerd/timermanager.h | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 3940cc1dc..4c867bfa2 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include //#define RCDEBUG @@ -136,6 +137,7 @@ CRCInput::CRCInput() repeat_block = repeat_block_generic = 0; open(); rc_last_key = KEY_MAX; + firstKey = true; //select and setup remote control hardware set_rc_hw(); @@ -1194,6 +1196,10 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 if(ret != sizeof(t_input_event)) continue; SHTDCNT::getInstance()->resetSleepTimer(); + if (firstKey) { + firstKey = false; + CTimerManager::getInstance()->cancelShutdownOnWakeup(); + } uint32_t trkey = translate(ev.code, i); #ifdef DEBUG printf("key: %04x value %d, translate: %04x -%s-\n", ev.code, ev.value, trkey, getKeyName(trkey).c_str()); diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 2b39ada3d..091d36a35 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -151,6 +151,7 @@ class CRCInput int fd_max; int clickfd; + bool firstKey; __u16 rc_last_key; void set_dsp(); diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index a9bfa47e2..4ae79b00c 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -727,11 +727,12 @@ bool CTimerManager::shutdown() void CTimerManager::shutdownOnWakeup(int currEventID) { time_t nextAnnounceTime=0; - if(wakeup == 0) - return; - wakeup = 0; pthread_mutex_lock(&tm_eventsMutex); + if(wakeup == 0) { + pthread_mutex_unlock(&tm_eventsMutex); + return; + } CTimerEventMap::iterator pos = events.begin(); for(;pos != events.end();++pos) @@ -756,10 +757,23 @@ void CTimerManager::shutdownOnWakeup(int currEventID) { // in den naechsten 10 min steht nix an dprintf("Programming shutdown event\n"); CTimerEvent_Shutdown* event = new CTimerEvent_Shutdown(now+120, now+180); - addEvent(event); + shutdown_eventID = addEvent(event); + wakeup = 0; } pthread_mutex_unlock(&tm_eventsMutex); } + +void CTimerManager::cancelShutdownOnWakeup() +{ + pthread_mutex_lock(&tm_eventsMutex); + if (shutdown_eventID > -1) { + removeEvent(shutdown_eventID); + shutdown_eventID = -1; + } + wakeup = 0; + pthread_mutex_unlock(&tm_eventsMutex); +} + void CTimerManager::setRecordingSafety(int pre, int post) { m_extraTimeStart=pre; diff --git a/src/timerd/timermanager.h b/src/timerd/timermanager.h index 76b4b2749..042b46655 100644 --- a/src/timerd/timermanager.h +++ b/src/timerd/timermanager.h @@ -212,6 +212,7 @@ class CTimerManager private: void Init(void); int eventID; + int shutdown_eventID; CEventServer *eventServer; CTimerEventMap events; pthread_t thrTimer; @@ -247,6 +248,7 @@ public: void getRecordingSafety(int &pre, int &post){pre=m_extraTimeStart;post=m_extraTimeEnd;} void setRecordingSafety(int pre, int post); void loadRecordingSafety(); + void cancelShutdownOnWakeup(); }; #endif From 036ef3399a34bdc3a3538675990e4c7006f3940b Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 30 Jul 2013 15:24:51 +0400 Subject: [PATCH 079/142] gui/infoviewer.cpp: fix shadow --- src/gui/infoviewer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index c75885d16..26894555d 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1367,11 +1367,11 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) return messages_return::unhandled; } -void CInfoViewer::sendNoEpg(const t_channel_id channel_id) +void CInfoViewer::sendNoEpg(const t_channel_id for_channel_id) { if (!virtual_zap_mode) { char *p = new char[sizeof(t_channel_id)]; - memcpy(p, &channel_id, sizeof(t_channel_id)); + memcpy(p, &for_channel_id, sizeof(t_channel_id)); g_RCInput->postMsg (NeutrinoMessages::EVT_NOEPG_YET, (const neutrino_msg_data_t) p, false); } } From 7a3b584920c1ef16bf4d899b3bd7c9e2dbc5af26 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 1 Aug 2013 17:54:51 +0200 Subject: [PATCH 080/142] genpsi: add pcr pid handling --- src/driver/genpsi.cpp | 17 +++++++++++------ src/driver/genpsi.h | 3 ++- src/driver/record.cpp | 10 +++++++--- src/driver/streamts.cpp | 5 +++++ 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/driver/genpsi.cpp b/src/driver/genpsi.cpp index cd350cf22..3c7fb6719 100644 --- a/src/driver/genpsi.cpp +++ b/src/driver/genpsi.cpp @@ -126,6 +126,7 @@ CGenPsi::CGenPsi() vpid = 0; vtype = 0; + pcrpid=0; vtxtpid = 0; vtxtlang[0] = 'g'; vtxtlang[1] = 'e'; @@ -160,9 +161,12 @@ void CGenPsi::addPid(uint16_t pid, uint16_t pidtype, short isAC3, const char *da switch(pidtype) { case EN_TYPE_VIDEO: - vpid=pid; + pcrpid=vpid=pid; vtype = ES_TYPE_MPEG12; break; + case EN_TYPE_PCR: + pcrpid=pid; + break; case EN_TYPE_AVC: vpid=pid; vtype = ES_TYPE_AVC; @@ -243,9 +247,9 @@ int CGenPsi::genpsi(int fd) } //-- write row with desc. for pcr stream (eq. video) -- pkt[ofs] = EN_TYPE_PCR; - pkt[ofs+1] = 0x02; - pkt[ofs+2] = (vpid>>8); - pkt[ofs+3] = (vpid & 0xFF); + pkt[ofs+1] = 0x02;//vtype ??? + pkt[ofs+2] = (pcrpid>>8); + pkt[ofs+3] = (pcrpid & 0xFF); //-- calculate CRC -- calc_crc32psi(&pkt[data_len], &pkt[OFS_HDR_2], data_len-OFS_HDR_2 ); @@ -276,8 +280,8 @@ int CGenPsi::genpsi(int fd) pkt[OFS_HDR_2+2] = (patch_len & 0xFF); //-- patch pcr PID -- ofs = OFS_PMT_DATA; - pkt[ofs] |= (vpid>>8); - pkt[ofs+1] = (vpid & 0xFF); + pkt[ofs] |= (pcrpid>>8); + pkt[ofs+1] = (pcrpid & 0xFF); //-- write row with desc. for ES video stream -- ofs = OFS_STREAM_TAB; pkt[ofs] = vtype; @@ -348,6 +352,7 @@ int CGenPsi::genpsi(int fd) //-- finish -- vpid=0; + pcrpid=0; nba=0; nsub = 0; vtxtpid = 0; diff --git a/src/driver/genpsi.h b/src/driver/genpsi.h index 1fce949d6..bc39991aa 100644 --- a/src/driver/genpsi.h +++ b/src/driver/genpsi.h @@ -27,7 +27,7 @@ #define EN_TYPE_AUDIO 0x01 #define EN_TYPE_TELTEX 0x02 #define EN_TYPE_PCR 0x03 -#define EN_TYPE_AVC 0x04 +#define EN_TYPE_AVC 0x04 #define EN_TYPE_DVBSUB 0x06 class CGenPsi @@ -36,6 +36,7 @@ class CGenPsi short nba, nsub; uint16_t vpid; uint8_t vtype; + uint16_t pcrpid; uint16_t vtxtpid; char vtxtlang[3]; uint16_t apid[10]; diff --git a/src/driver/record.cpp b/src/driver/record.cpp index ed3b6a5ed..d74a78cf0 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -161,10 +161,14 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) } CGenPsi psi; - if (allpids.PIDs.vpid != 0) - psi.addPid(allpids.PIDs.vpid, recMovieInfo->VideoType ? EN_TYPE_AVC : EN_TYPE_VIDEO, 0); - numpids = 0; + if (allpids.PIDs.vpid != 0){ + psi.addPid(allpids.PIDs.vpid, recMovieInfo->VideoType ? EN_TYPE_AVC : EN_TYPE_VIDEO, 0); + if(allpids.PIDs.pcrpid != allpids.PIDs.vpid){ + psi.addPid(allpids.PIDs.pcrpid, EN_TYPE_PCR, 0); + apids[numpids++]=allpids.PIDs.pcrpid; + } + } for (unsigned int i = 0; i < recMovieInfo->audioPids.size(); i++) { apids[numpids++] = recMovieInfo->audioPids[i].epgAudioPid; psi.addPid(recMovieInfo->audioPids[i].epgAudioPid, EN_TYPE_AUDIO, recMovieInfo->audioPids[i].atype); diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 1448061eb..2df37b569 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -389,6 +389,11 @@ bool CStreamManager::Parse(int fd, stream_pids_t &pids, t_channel_id &chid) } } } + //add pcr pid + if(channel->getPcrPid() != channel->getVideoPid()){ + pids.insert(channel->getPcrPid()); + psi.addPid(channel->getPcrPid(), EN_TYPE_PCR, 0); + } psi.genpsi(fd); return !pids.empty(); From 390fb80fad9f756eb3107827dad806e977219188 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 1 Aug 2013 19:03:54 +0200 Subject: [PATCH 081/142] genpsi: supplement to 7a3b584920c1ef16bf4d899b3bd7c9e2dbc5af26 --- src/driver/genpsi.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/driver/genpsi.cpp b/src/driver/genpsi.cpp index 3c7fb6719..856bfa4cf 100644 --- a/src/driver/genpsi.cpp +++ b/src/driver/genpsi.cpp @@ -164,13 +164,13 @@ void CGenPsi::addPid(uint16_t pid, uint16_t pidtype, short isAC3, const char *da pcrpid=vpid=pid; vtype = ES_TYPE_MPEG12; break; + case EN_TYPE_AVC: + pcrpid=vpid=pid; + vtype = ES_TYPE_AVC; + break; case EN_TYPE_PCR: pcrpid=pid; break; - case EN_TYPE_AVC: - vpid=pid; - vtype = ES_TYPE_AVC; - break; case EN_TYPE_AUDIO: apid[nba]=pid; atypes[nba]=isAC3; From b2141a8217099832738950c573c03fca776fb9d6 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 31 Jul 2013 15:06:48 +0400 Subject: [PATCH 082/142] autorun.sh: add reboot Conflicts: autorun.sh --- autorun.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/autorun.sh b/autorun.sh index 52b20488c..02bd8d175 100755 --- a/autorun.sh +++ b/autorun.sh @@ -3,6 +3,17 @@ export PATH=${PATH}:/opt/bin:/opt/usr/bin echo "### Starting NEUTRINO ###" -cd /opt/bin -./neutrino & +cd /tmp +/bin/neutrino > /dev/null 2> /dev/null +/bin/sync +/bin/sync + +if [ -e /tmp/.reboot ] ; then + /bin/dt -t"Rebooting..." + /sbin/reboot -f +else + /bin/dt -t"Panic..." + sleep 5 + /sbin/reboot -f +fi From 7a41572563e47455d0e41ef74f849e8001c29389 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 5 Aug 2013 18:15:33 +0400 Subject: [PATCH 083/142] revert apollo libcoolstream headers to release lib version --- lib/libcoolstream2/audio_cs.h | 19 ++++++------------- lib/libcoolstream2/video_cs.h | 30 +++++++----------------------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/lib/libcoolstream2/audio_cs.h b/lib/libcoolstream2/audio_cs.h index e15c00c29..a5aa5d866 100644 --- a/lib/libcoolstream2/audio_cs.h +++ b/lib/libcoolstream2/audio_cs.h @@ -78,12 +78,15 @@ private: unsigned int unit; cDemux *demux; cVideo *video; - CS_AUDIO_PDATA *privateData; + CS_AUDIO_PDATA *privateData; + //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; bool muted; AUDIO_FORMAT streamType; AUDIO_SYNC_MODE syncMode; - unsigned int uCurrentPTSDelay; + bool started; + unsigned int uAudioPTSDelay; + unsigned int uAudioDolbyPTSDelay, uAudioMpegPTSDelay; bool receivedDelay; /* internal methods */ @@ -97,10 +100,6 @@ private: bool spdifDD; bool hasMuteScheduled; bool analogOut; -#ifdef ISAPOLLO - bool containerMode; - bool hbrMode; -#endif // cAudio(unsigned int Unit); public: @@ -135,7 +134,7 @@ public: AUDIO_FORMAT GetStreamType(void) { return streamType; } bool ReceivedAudioDelay(void) { return receivedDelay; } void SetReceivedAudioDelay(bool Set = false) { receivedDelay = Set; } - unsigned int GetAudioDelay(void) { return uCurrentPTSDelay; } + unsigned int GetAudioDelay(void) { return (streamType == AUDIO_FMT_DOLBY_DIGITAL) ? uAudioDolbyPTSDelay : uAudioMpegPTSDelay; } void SetSyncMode(AVSYNC_TYPE SyncMode); /* stream source */ @@ -163,12 +162,6 @@ public: void SetDemux(cDemux *Demux); void SetVideo(cVideo *Video); static cAudio *GetDecoder(unsigned int Unit); - bool Started(void); - bool Paused(void); -#ifdef ISAPOLLO - void SetHBRMode(bool Enable = false); - void SetContainerMode(bool Enable = false); -#endif }; #endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h index 70b08c6b8..931de961b 100644 --- a/lib/libcoolstream2/video_cs.h +++ b/lib/libcoolstream2/video_cs.h @@ -150,12 +150,6 @@ typedef enum VIDEO_CONTROL_MAX = VIDEO_CONTROL_SHARPNESS } VIDEO_CONTROL; -typedef enum -{ - VIDEO_STREAM_FEED_MODE_LIVE = 0, - VIDEO_STREAM_FEED_MODE_PLAYBACK, -} VIDEO_STREAM_FEED_MODE; - class cDemux; class cAudio; @@ -163,7 +157,7 @@ class cVideo { friend class cAudio; private: static cVideo *instance[CS_MAX_VIDEO_DECODERS]; - // + unsigned int unit; CS_VIDEO_PDATA *privateData; VIDEO_FORMAT streamType; @@ -176,15 +170,14 @@ private: DISPLAY_AR PictureAR; VIDEO_FRAME_RATE FrameRate; VIDEO_HDMI_CEC_MODE hdmiCECMode; -#ifdef ISAPOLLO - VIDEO_STREAM_FEED_MODE streamFeedMode; -#endif bool Interlaced; - unsigned int uCurrentVPPDisplayDelay; - unsigned int uCurrentVideoPTSDelay; + unsigned int uVPPDisplayDelay; + unsigned int uVideoPTSDelay; int StcPts; + bool started; unsigned int bStandby; bool blank; + bool playing; bool auto_format; int uFormatIndex; bool vbi_started; @@ -230,8 +223,8 @@ public: /* get play state */ int getPlayState(void); - void SetVPPDelay(unsigned int delay) { uCurrentVPPDisplayDelay = delay; } - void SetVideoDelay(unsigned int delay) { uCurrentVideoPTSDelay = delay; } + void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; + void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; /* Notification handlers */ void HandleVPPMessage(int Event, void *pData); void HandleVideoMessage(void * hHandle, int Event, void *pData); @@ -239,9 +232,7 @@ public: VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } /* change video play state */ -#ifndef ISAPOLLO int Prepare(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); -#endif int Start(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); int Stop(bool Blank = true); bool Pause(void); @@ -279,13 +270,6 @@ public: bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); void SetDemux(cDemux *Demux); static cVideo *GetDecoder(unsigned int Unit); - bool Started(void); - bool Playing(void); - bool Paused(void); - void SyncSTC(void); -#ifdef ISAPOLLO - void SetStreamFeedMode(VIDEO_STREAM_FEED_MODE Mode); -#endif }; #endif // __VIDEO_CS_H_ From 8ade9f656b88522bae7f49a8cf86920133fede71 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 5 Aug 2013 19:19:08 +0400 Subject: [PATCH 084/142] gui/update.cpp: download different image for different system fs erase size --- src/gui/update.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 8e0ddfec7..63e651dc0 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -260,6 +260,15 @@ bool CFlashUpdate::selectHttpImage(void) newVersion = versions[selected]; file_md5 = md5s[selected]; fileType = fileTypes[selected]; +#ifdef BOXMODEL_APOLLO + if(fileType < '3') { + int esize = CMTDInfo::getInstance()->getMTDEraseSize(sysfs); + printf("[update] erase size is %x\n", esize); + if (esize == 0x40000) { + filename += ".256k"; + } + } +#endif #ifdef DEBUG printf("[update] filename %s type %c newVersion %s md5 %s\n", filename.c_str(), fileType, newVersion.c_str(), file_md5.c_str()); #endif From 3e207638ef3118901cffca83d0e653e74120cdf5 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 5 Aug 2013 19:43:45 +0400 Subject: [PATCH 085/142] gui/start_wizard.cpp: hack to enable easy setup aka fast scan setup, if locale is nederlands only --- src/gui/start_wizard.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index 9d2b8b2e9..363f6a30f 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -94,14 +94,17 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) { int advanced = 1; #ifdef ENABLE_FASTSCAN - advanced = 0; - CMenuWidget wtype(LOCALE_WIZARD_SETUP); - wtype.setWizardMode(true); - wtype.addIntroItems(); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_WIZARD_SETUP_TYPE, &advanced, WIZARD_SETUP_TYPE, 2, true, NULL); - mc->setHint("", LOCALE_WIZARD_SETUP_TYPE_HINT); - wtype.addItem(mc); - wtype.exec(NULL, ""); + std::string lang = g_settings.language; + if (lang == "nederlands") { + advanced = 0; + CMenuWidget wtype(LOCALE_WIZARD_SETUP); + wtype.setWizardMode(true); + wtype.addIntroItems(); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_WIZARD_SETUP_TYPE, &advanced, WIZARD_SETUP_TYPE, 2, true, NULL); + mc->setHint("", LOCALE_WIZARD_SETUP_TYPE_HINT); + wtype.addItem(mc); + wtype.exec(NULL, ""); + } #endif //open video settings in wizardmode if(advanced && res != menu_return::RETURN_EXIT_ALL) { From d54a49b243ed86d2c0c67f7beafa4d2fe34d4608 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 6 Aug 2013 10:08:55 +0400 Subject: [PATCH 086/142] gui/start_wizard.cpp: disable astra initial settings in case of fast-scan setup --- src/gui/start_wizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index 363f6a30f..4100ed542 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -127,7 +127,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) if (CFEManager::getInstance()->haveSat()) init_settings = file_exists(CONFIGDIR "/initial/"); - if(init_settings && (res != menu_return::RETURN_EXIT_ALL)) + if(advanced && init_settings && (res != menu_return::RETURN_EXIT_ALL)) { if (ShowMsgUTF(LOCALE_WIZARD_INITIAL_SETTINGS, g_Locale->getText(LOCALE_WIZARD_INSTALL_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { From f190332785ff5957ae91f565cf6dfa9aac8297a6 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 6 Aug 2013 14:50:01 +0400 Subject: [PATCH 087/142] zapit/src/femanager.cpp: try to fix skipping free frontend, if other linked group is busy --- src/zapit/src/femanager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 006a47706..204f5ca28 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -507,8 +507,7 @@ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) CFrontend * CFEManager::getFrontend(CZapitChannel * channel) { - CFrontend * free_frontend = NULL; - //CFrontend * same_tid_fe = NULL; + CFrontend * retfe = NULL; if (livefe && livefe->tuned && livefe->sameTsidOnid(channel->getTransponderId())) return livefe; @@ -538,6 +537,7 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) break; } } + CFrontend * free_frontend = NULL; CFrontend * free_twin = NULL; bool loop_busy = false; for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { @@ -572,6 +572,8 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) } if (!free_frontend) free_frontend = free_twin; + if (free_frontend && !retfe) + retfe = free_frontend; } if (mfe->getMode() == CFrontend::FE_MODE_INDEPENDENT) { FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64, mfe->fenumber, mfe->getMode(), @@ -581,12 +583,12 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) FEDEBUG("fe %d on the same TP", mfe->fenumber); return mfe; } - } else if(!free_frontend) - free_frontend = mfe; + } else if(!retfe) + retfe = mfe; } } - FEDEBUG("Selected fe: %d", free_frontend ? free_frontend->fenumber : -1); - return free_frontend; + FEDEBUG("Selected fe: %d", retfe ? retfe->fenumber : -1); + return retfe; } #ifdef DYNAMIC_DEMUX From d8b5979018d981c704e5f9513e00457b6606f9ce Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 7 Aug 2013 16:15:45 +0400 Subject: [PATCH 088/142] gui/vfd_setup.cpp: disable display settings on trinity too --- src/gui/vfd_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/vfd_setup.cpp b/src/gui/vfd_setup.cpp index 6c15f1359..ecfc2f891 100644 --- a/src/gui/vfd_setup.cpp +++ b/src/gui/vfd_setup.cpp @@ -53,7 +53,7 @@ CVfdSetup::CVfdSetup() { width = w_max (40, 10); dim_time = NULL; - vfd_enabled = (cs_get_revision() != 10); + vfd_enabled = (cs_get_revision() != 10) && (cs_get_revision() != 11); } CVfdSetup::~CVfdSetup() From 28af6c810b07be56d67bb1d9c921c21e9285f5d0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 7 Aug 2013 17:47:28 +0400 Subject: [PATCH 089/142] eitd/sectionsd.cpp: check is /sbin/ntpdate present, use ntpd if not --- src/eitd/sectionsd.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 168e76cd2..6ea2137cf 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -94,11 +94,7 @@ static bool messaging_zap_detected = false; //NTP-Config #define CONF_FILE CONFIGDIR "/neutrino.conf" -#ifdef USE_BB_NTPD -const std::string ntp_system_cmd_prefix = "/sbin/ntpd -q -p "; -#else -const std::string ntp_system_cmd_prefix = "/sbin/ntpdate "; -#endif +std::string ntp_system_cmd_prefix = "/sbin/ntpdate "; std::string ntp_system_cmd; std::string ntpserver; @@ -2113,9 +2109,12 @@ bool CEitManager::Start() oldEventsAre = config.epg_old_events*60L*60L; //hours max_events = config.epg_max_events; + if (access("/sbin/ntpdate", F_OK)) + ntp_system_cmd_prefix = "/sbin/ntpd -q -p "; + printf("[sectionsd] Caching: %d days, %d hours Extended Text, max %d events, Events are old %d hours after end time\n", config.epg_cache, config.epg_extendedcache, config.epg_max_events, config.epg_old_events); - printf("[sectionsd] NTP: %s, server %s\n", ntpenable ? "enabled" : "disabled", ntpserver.c_str()); + printf("[sectionsd] NTP: %s, server %s, command %s\n", ntpenable ? "enabled" : "disabled", ntpserver.c_str(), ntp_system_cmd_prefix.c_str()); if (!sectionsd_server.prepare(SECTIONSD_UDS_NAME)) { fprintf(stderr, "[sectionsd] failed to prepare basic server\n"); From abfaf533e724f32ac08c92431e371e77c9e70c56 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 7 Aug 2013 18:04:21 +0400 Subject: [PATCH 090/142] add frontpanel control tool to be used in scripts --- src/Makefile.am | 3 +- src/dt.c | 189 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 src/dt.c diff --git a/src/Makefile.am b/src/Makefile.am index 8963ecbb0..ee20e753e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -118,8 +118,9 @@ neutrino_LDADD += -lnxp endif bin_PROGRAMS += drivertool - drivertool_SOURCES = drivertool.c +bin_PROGRAMS += dt +dt_SOURCES = dt.c endif if BOXTYPE_TRIPLE neutrino_LDADD += \ diff --git a/src/dt.c b/src/dt.c new file mode 100644 index 000000000..301008c69 --- /dev/null +++ b/src/dt.c @@ -0,0 +1,189 @@ +/* + Copyright (C) 2013 CoolStream International Ltd + + License: GPLv2 + + 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; + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "cs_frontpanel.h" + +int main(int argc, char **argv) +{ + int x, b, f; + int fd; + char s[1024]; + time_t t; + struct tm *tmp; + unsigned int timer; + + if (argc > 1) + { + fd = open("/dev/display", O_RDONLY); + if (fd < 0) + { + perror("/dev/display"); + return -fd; + } + + memset(s, 0, 1024); + + for (x = 1; x < argc; x++) + { + if (argv[x][0] == '-') + { + if (sscanf(argv[x], "-b%d", &b) == 1) + { + if ((b < 16) && (b >= 0)) + { + if (ioctl(fd, IOC_FP_SET_BRIGHT, (unsigned char) b)) + perror("IOC_FP_SET_BRIGHT"); + } + else + printf("Error: brightness is out of range (0 ... 16)\n\n"); + } + else if (sscanf(argv[x], "-s%X:%X:%X", &b, &f, &timer) == 3) + { + if ((b < 16) && (b >= 0)) + { + fp_standby_data_t standby; + char h[3], m[3]; + + t = time(NULL); + tmp = localtime(&t); + if (tmp == NULL) { + perror("localtime"); + } + if (strftime(h, sizeof(h), "%_H", tmp) == 0) { + fprintf(stderr, "strftime returned 0\n"); + } + if (strftime(m, sizeof(m), "%_M", tmp) == 0) { + fprintf(stderr, "strftime returned 0\n"); + } + + standby.brightness = b; + standby.flags = f & 0xFF; + standby.current_hour = atoi(h); + standby.current_minute = atoi(m); + standby.timer_minutes_hi = timer >> 8; + standby.timer_minutes_lo = timer & 0xFF; + printf("brightness %d\n", standby.brightness); + printf("flags %02X\n", standby.flags); + printf("current_hour %d\n", standby.current_hour); + printf("current_minute %d\n", standby.current_minute); + printf("timer_minutes_hi %d\n", standby.timer_minutes_hi); + printf("timer_minutes_lo %d\n", standby.timer_minutes_lo); + + if (ioctl(fd, IOC_FP_STANDBY, (fp_standby_data_t *) &standby)) + perror("IOC_FP_STANDBY"); + } + else + printf("Error: brightness is out of range (0 ... 16)\n\n"); + } + else if (sscanf(argv[x], "-is%X", &b) == 1) + { + if (ioctl(fd, IOC_FP_SET_ICON, (unsigned int) b)) + perror("IOC_FP_SET_ICON"); + } + else if (sscanf(argv[x], "-ic%X", &b) == 1) + { + if (ioctl(fd, IOC_FP_CLEAR_ICON, (unsigned int) b)) + perror("IOC_FP_CLEAR_ICON"); + } + + else if (sscanf(argv[x], "-ps%X", &b) == 1) + { + if (ioctl(fd, IOC_FP_SET_OUTPUT, (unsigned char) b)) + perror("IOC_FP_SET_OUTPUT"); + } + else if (sscanf(argv[x], "-pc%X", &b) == 1) + { + if (ioctl(fd, IOC_FP_CLEAR_OUTPUT, (unsigned char) b)) + perror("IOC_FP_CLEAR_OUTPUT"); + } + + else if (sscanf(argv[x], "-t%[^\n]", s) == 1) + { + if (ioctl(fd, IOC_FP_SET_TEXT, s)) + perror("IOC_FP_SET_TEXT"); + } + else if (sscanf(argv[x], "-ls%X", &b) == 1) + { + if ((b > 0) || (b <= 8)) { + if (ioctl(fd, IOC_FP_LED_CTRL, b | 0x80)) + perror("IOC_FP_LED_CTRL"); + } + } + else if (sscanf(argv[x], "-lc%X", &b) == 1) + { + if ((b > 0) || (b <= 8)) { + if (ioctl(fd, IOC_FP_LED_CTRL, b)) + perror("IOC_FP_LED_CTRL"); + } + } + else if (sscanf(argv[x], "-st%X", &b) == 1) + { + fp_standby_cmd_data_t pwr; + pwr.addr = 0; + pwr.cmd = b; + printf("standby command: %x\n", pwr.cmd);fflush(stdout); + + if (ioctl(fd, IOC_FP_STANDBY_CMD, &pwr)) + perror("IOC_FP_STANDBY_CMD"); + } + + else if (argv[x][1] == 'c') + { + if (strlen(argv[x]) == 2) + { + if (ioctl(fd, IOC_FP_CLEAR_ALL, NULL)) + perror("IOC_FP_CLEAR_ALL"); + } + else + { + if (ioctl(fd, IOC_FP_SET_TEXT, NULL)) + perror("IOC_FP_SET_TEXT"); + } + } + } + } + close(fd); + } + else + { + printf("%s\n", argv[0]); + printf("dt - displaytest usage:\n" + " -b set display brightness between 0 and 15\n" + " -t write a UTF-8 text to the display\n" + " -c clear entire display\n" + " -ct clear text on the display\n" + " -is set icon\n" + " -ic clear icon\n" + " -ps set port\n" + " -pc clear port\n" + " -ls led n on\n" + " -lc led n off\n" + " -s:: sets the box into standby (brightness, flags, timer)\n" + "\n"); + } + return 0; +} From f3c13fbf343e2519847339f4b524db2917ef9ec1 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Wed, 7 Aug 2013 18:05:13 +0400 Subject: [PATCH 091/142] .gitignore: add src/dt --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2e690ac9d..45e88d4f3 100644 --- a/.gitignore +++ b/.gitignore @@ -36,5 +36,6 @@ src/nhttpd/web/*.js.gz src/zapit/src/pzapit src/zapit/src/udpstreampes src/drivertool +src/dt src/gui/version.h src/nhttpd/nhttpd.conf From db027d50ea5157a1c2fc48cb4a1fc9a936c1d77b Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 8 Aug 2013 10:57:18 +0400 Subject: [PATCH 092/142] eitd/sectionsd.cpp: disable ntpd daemonize --- src/eitd/sectionsd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 6ea2137cf..67c2d73e7 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -2110,7 +2110,7 @@ bool CEitManager::Start() max_events = config.epg_max_events; if (access("/sbin/ntpdate", F_OK)) - ntp_system_cmd_prefix = "/sbin/ntpd -q -p "; + ntp_system_cmd_prefix = "/sbin/ntpd -n -q -p "; printf("[sectionsd] Caching: %d days, %d hours Extended Text, max %d events, Events are old %d hours after end time\n", config.epg_cache, config.epg_extendedcache, config.epg_max_events, config.epg_old_events); From 5d77f01b5d9916cad07c7c10ff3767f87661d389 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Wed, 7 Aug 2013 21:52:44 +0200 Subject: [PATCH 093/142] helpers.cpp: Add getFileName(), getFileExt(), getNowTimeStr() --- src/system/helpers.cpp | 38 ++++++++++++++++++++++++++++++++++---- src/system/helpers.h | 3 +++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index f36bbbd5b..d084d1c8a 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -284,17 +284,17 @@ bool get_mem_usage(unsigned long &kbtotal, unsigned long &kbfree) return true; } -std::string getPathName(std::string &path) +std::string _getPathName(std::string &path, std::string sep) { - size_t pos = path.find_last_of("/"); + size_t pos = path.find_last_of(sep); if (pos == std::string::npos) return path; return path.substr(0, pos); } -std::string getBaseName(std::string &path) +std::string _getBaseName(std::string &path, std::string sep) { - size_t pos = path.find_last_of("/"); + size_t pos = path.find_last_of(sep); if (pos == std::string::npos) return path; if (path.length() == pos +1) @@ -302,6 +302,36 @@ std::string getBaseName(std::string &path) return path.substr(pos+1); } +std::string getPathName(std::string &path) +{ + return _getPathName(path, "/"); +} + +std::string getBaseName(std::string &path) +{ + return _getBaseName(path, "/"); +} + +std::string getFileName(std::string &file) +{ + return _getPathName(file, "."); +} + +std::string getFileExt(std::string &file) +{ + return _getBaseName(file, "."); +} + + +std::string getNowTimeStr(const char* format) +{ + char tmpStr[256]; + struct timeval tv; + gettimeofday(&tv, NULL); + strftime(tmpStr, sizeof(tmpStr), format, localtime(&tv.tv_sec)); + return (std::string)tmpStr; +} + std::string trim(std::string &str, const std::string &trimChars /*= " \n\r\t"*/) { std::string result = str.erase(str.find_last_not_of(trimChars) + 1); diff --git a/src/system/helpers.h b/src/system/helpers.h index 70db9525b..bab8204eb 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -38,6 +38,9 @@ bool get_mem_usage(unsigned long &total, unsigned long &free); std::string getPathName(std::string &path); std::string getBaseName(std::string &path); +std::string getFileName(std::string &file); +std::string getFileExt(std::string &file); +std::string getNowTimeStr(const char* format); std::string trim(std::string &str, const std::string &trimChars = " \n\r\t"); class CFileHelpers From 70882dde00a4bd3ac76efc77610df3e32fff1d96 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Thu, 8 Aug 2013 17:02:22 +0400 Subject: [PATCH 094/142] data/locale/nederlands.locale: fix telesat prov name --- data/locale/nederlands.locale | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/locale/nederlands.locale b/data/locale/nederlands.locale index 63095d533..6f90a4ca9 100644 --- a/data/locale/nederlands.locale +++ b/data/locale/nederlands.locale @@ -1605,7 +1605,7 @@ satsetup.fastscan_hd Enkel HD satsetup.fastscan_head Fastscan satsetup.fastscan_prov Provider satsetup.fastscan_prov_cd CanalDigitaal -satsetup.fastscan_prov_telesat TéléSAT +satsetup.fastscan_prov_telesat TéléSAT satsetup.fastscan_prov_tvv TV Vlaanderen satsetup.fastscan_sd Enkel SD satsetup.fastscan_type Scantype From ada1ec3e600604a87fa15985cd97863888121908 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 8 Aug 2013 15:09:30 +0200 Subject: [PATCH 095/142] streamts: add dvbsub and teletext pid to stream --- src/driver/genpsi.cpp | 2 +- src/driver/record.cpp | 2 +- src/driver/streamts.cpp | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/driver/genpsi.cpp b/src/driver/genpsi.cpp index 856bfa4cf..4f11d2d03 100644 --- a/src/driver/genpsi.cpp +++ b/src/driver/genpsi.cpp @@ -247,7 +247,7 @@ int CGenPsi::genpsi(int fd) } //-- write row with desc. for pcr stream (eq. video) -- pkt[ofs] = EN_TYPE_PCR; - pkt[ofs+1] = 0x02;//vtype ??? + pkt[ofs+1] = 0x02; pkt[ofs+2] = (pcrpid>>8); pkt[ofs+3] = (pcrpid & 0xFF); diff --git a/src/driver/record.cpp b/src/driver/record.cpp index d74a78cf0..123d6d012 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -345,8 +345,8 @@ void CRecordInstance::GetPids(CZapitChannel * channel) allpids.PIDs.vtxtpid = channel->getTeletextPid(); allpids.PIDs.pmtpid = channel->getPmtPid(); allpids.PIDs.selected_apid = channel->getAudioChannelIndex(); -#if 0 // not needed allpids.PIDs.pcrpid = channel->getPcrPid(); +#if 0 // not needed allpids.PIDs.privatepid = channel->getPrivatePid(); #endif allpids.APIDs.clear(); diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 2df37b569..9e52136aa 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -394,6 +394,27 @@ bool CStreamManager::Parse(int fd, stream_pids_t &pids, t_channel_id &chid) pids.insert(channel->getPcrPid()); psi.addPid(channel->getPcrPid(), EN_TYPE_PCR, 0); } + //add teletext pid + if (g_settings.recording_stream_vtxt_pid && channel->getTeletextPid() != 0){ + pids.insert(channel->getTeletextPid()); + psi.addPid(channel->getTeletextPid(), EN_TYPE_TELTEX, 0, channel->getTeletextLang()); + } + //add dvb sub pid + if (g_settings.recording_stream_subtitle_pids){ + for (int i = 0 ; i < (int)channel->getSubtitleCount() ; ++i) { + CZapitAbsSub* s = channel->getChannelSub(i); + if (s->thisSubType == CZapitAbsSub::DVB) { + if(i>9)//max sub pids + break; + + CZapitDVBSub* sd = reinterpret_cast(s); + pids.insert(sd->pId); + psi.addPid( sd->pId, EN_TYPE_DVBSUB, 0, sd->ISO639_language_code.c_str() ); + } + } + + } + psi.genpsi(fd); return !pids.empty(); From fd911c9debdded47ebf5f7d65a8e4401fc1500bd Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 8 Aug 2013 15:30:16 +0200 Subject: [PATCH 096/142] update slovak locale (THX EnoSat) --- data/license/slovak.license | 2 +- data/locale/unmaintained/slovak.locale | 48 +++++++++++++++++---- src/nhttpd/web/languages/Slovak | 60 +++++++++++++++++++++++++- 3 files changed, 98 insertions(+), 12 deletions(-) diff --git a/data/license/slovak.license b/data/license/slovak.license index 0d481d492..fb94fcc56 100644 --- a/data/license/slovak.license +++ b/data/license/slovak.license @@ -1,4 +1,4 @@ -Tento program je slobodný softvér: môžete ho šíriť a upravovať podľa ustanovení Všeobecnej verejnej licencie GNU (GNU General Public License), vydávanej nadáciou Free Software Foundation, a to podľa 2.verzie tejto Licencie. +Tento program je slobodný softvér: môžete ho šíriť a upravovať podľa ustanovení Všeobecnej verejnej licencie GNU (GNU General Public License), vydávanej nadáciou Free Software Foundation, a to buď podľa 2.verzie tejto Licencie, alebo (podľa vášho uváženia) ktorejkoľvek neskoršej verzie. Tento program je šírený v nádeji, že bude užitočný, avšak BEZ AKEJKOĽVEK ZÁRUKY. Neposkytujú sa ani odvodené záruky OBCHODOVATEĽNOSTI alebo VHODNOSTI PRE URČITÝ ÚČEL. Ďalšie podrobnosti hľadajte vo Všeobecnej verejnej licencii GNU. diff --git a/data/locale/unmaintained/slovak.locale b/data/locale/unmaintained/slovak.locale index f82ed1d3c..a060cfc9e 100644 --- a/data/locale/unmaintained/slovak.locale +++ b/data/locale/unmaintained/slovak.locale @@ -97,7 +97,7 @@ GENRE.TRAVEL_HOBBIES.6 inzertovanie/nakupovanie GENRE.TRAVEL_HOBBIES.7 záhradkárstvo GENRE.UNKNOWN neznáme apidselector.head Výber jazyka -audio.srs_algo Mód +audio.srs_algo Režim audio.srs_algo_heavy Hrubý audio.srs_algo_light Jemný audio.srs_algo_normal Normálny @@ -312,7 +312,7 @@ epgextended.presenter Produkcia epgextended.year_of_production Rok výroby epglist.noevents Programové informácie (EPG) sú nedostupné... epgviewer.More_Screenings Podobné relácie na tomto kanály -epgviewer.More_Screenings_short Viacej relácií +epgviewer.More_Screenings_short Ďaľšie vysielania epgviewer.age_rating Vekové obmedzenie epgviewer.audio Zvuk epgviewer.genre Žáner @@ -321,15 +321,15 @@ epgviewer.nodetailed Detailné informácie sú nedostupné epgviewer.notfound Nenájdené programové informácie (EPG) eventfinder.head Hľadaj v EPG eventfinder.keyword Slovo -eventfinder.search Hľadaj +eventfinder.search hľadaj eventfinder.search_all_epg Všade eventfinder.search_within_epg Hľadaj v EPG eventfinder.search_within_list Hľadaj v zozname eventfinder.searching Hľadám slovo v EPG... eventfinder.start_search Spusti hľadanie eventlist.additional Podrobnejšie informácie -eventlist.name Zoznam udalostí -eventlistbar.channelswitch prejdi +eventlist.name Zoznam relácií +eventlistbar.channelswitch prepni eventlistbar.eventsort triedenie eventlistbar.recordevent nahraj extra.add_to_bouquet Pridanie do buketu @@ -368,8 +368,11 @@ extra.fec_s2_qpsk_7_8 7/8 s2 qpsk extra.fec_s2_qpsk_8_9 8/9 s2 qpsk extra.fec_s2_qpsk_9_10 9/10 s2 qpsk extra.key_current_transponder Aktuálny kľúč transpondéra +extra.key_format_mode Mód obrazu extra.key_list_end Na koniec extra.key_list_start Na začiatok +extra.key_pic_mode Formát obrazu +extra.key_pic_size Zobrazenie formátu 4:3 extra.key_pip_close Spustiť/Zastaviť PiP extra.key_pip_setup Nastavenie PiP extra.key_pip_swap Prehodiť PiP/Hlavný obraz @@ -417,6 +420,7 @@ extra.update_dir Adresár aktualizácie extra.use_gotoxx Použi gotoXX extra.volume_digits Hlasitoť číselne extra.volume_pos Ukazovateľ hlasitosti +extra.volume_size Výška zobrazenia extra.west Západne extra.zap_cycle Cyklické prepínanie extra.zapit_fe_timeout Časový limit naladenia (1 = 10 msek) @@ -435,7 +439,7 @@ favorites.copy Kopíruj buket do Obľúbených favorites.finalhint \nPouži editor buketov pre dokonačenie\nzmien v obľúbených.\n favorites.menueadd Pridaj kanál do obľúbených favorites.nobouquets Obľúbené sú dostupné len pri použití Buketov. -filebrowser.delete zmaž +filebrowser.delete Zmazať filebrowser.denydirectoryleave Hlavný adresár filebrowser.dodelete1 zmaž filebrowser.dodelete2 ? @@ -480,6 +484,8 @@ flashupdate.globalprogress Celkový postup: flashupdate.head SW aktualizácia flashupdate.md5check Kontrola IMAGE flashupdate.md5sumerror IMAGE má chyby +flashupdate.menu_apply_kernel Nahranie jadra (kernelu) +flashupdate.menu_apply_settings Povoliť aplikovanie nastavení flashupdate.msgbox Zistený nový súbor:\nDátum: %s, %s\nBaseImage: %s\nTyp: %s\n\nNaozaj prevziať a nainštalovať\ntento súbor? flashupdate.msgbox_manual Zistený nový súbor:\nDátum: %s, %s\nBaseImage: %s\nTyp IMAGE: %s\n\nNaozaj nainštalovať\ntento súbor? flashupdate.mtdselector Výber partície @@ -652,6 +658,7 @@ keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock Základné oneskorenie keybindingmenu.repeatblockgeneric Oneskorenie opakovania keybindingmenu.sort Zmena poradia triedenia +keybindingmenu.special_active Špeciálne klávesy keybindingmenu.subchanneldown Predchádzajúci podkanál keybindingmenu.subchannelup Nasledujúci podkanál keybindingmenu.tvradiomode TV/Rádio @@ -679,6 +686,8 @@ lcdmenu.statusline Stavový riadok lcdmenu.statusline.both hlasitosť/odohratý čas lcdmenu.statusline.playtime odohratý čas lcdmenu.statusline.volume hlasitosť +ledcontroler.backlight Podsvietené tlačidlá +ledcontroler.backlight.tv TV režim ledcontroler.blink Blikať v hlbokom spánku ak je nastavený časovač ledcontroler.menu Podsvietenie Power tlačítka ledcontroler.mode.deepstandby Hlboký spánok @@ -750,6 +759,7 @@ menu.hint_audioplayer_title Použije SMS štýl vyhľadávania titulov v zozname menu.hint_auto_lang Automatické prepnutie zvuku na preferovaný jazyk menu.hint_auto_subs Automatické spustenie titulkov pre preferovaný jazyk menu.hint_back Návrat do predchádzajúcej položky.\nStlačenie MENU klávesy uzavrie všetky položky +menu.hint_backlight Nastavenie podsvietených tlačidiel menu.hint_backup Záloha konfigurácií a kanálov do vybraného adresára menu.hint_bedit Úprava obľúbených a buketov menu.hint_bigwindows Zoznam kanálov, programové informácie, prehrávač hudby a niektoré ďaľšie okná budú zobrazované na celej obrazovke @@ -780,6 +790,7 @@ menu.hint_epg_max_events Maximum udalostí zachytávania. Po dosiahnutí hranice menu.hint_epg_old_events Hodiny po skončení udalosti aby sa označila\nako stará a odstránila sa zo zachytávania menu.hint_epg_save Uloženie zachyteného EPG na disk alebo usb\na načítanie po spustení menu.hint_epg_save_standby Uloženie EPG v režime pripravenosti +menu.hint_epg_scan Povolenie prehľadávania EPG na pozadí ak je voľný tuner menu.hint_event_textcolor Zmena farby udalosti pre nastavenia farebnosti udalosti\nv zozname kanálov a stavovom riadku menu.hint_eventlist_additional Zobrazí podrobnejšie informácie\nv hlavnom okne menu.hint_eventlist_fonts Zmena veľkosti písma zoznamu udalostí @@ -840,6 +851,7 @@ menu.hint_key_channel_sms Ak zapnuté, číselné klávesy v zozname kanálov\ns menu.hint_key_channeldown Priradenie klávesy pre rýchlu zmenu na predchádzajúci\nkanál v zozname kanálov menu.hint_key_channellist Konfigurácia klávesových skratiek pre zoznam kanálov menu.hint_key_channelup Priradenie klávesy pre rýchlu zmenu na nasledujúci\nkanál v zozname kanálov +menu.hint_key_format_mode_active Kláves pre vypnutie/zapnutie konverzie obrazového formátu menu.hint_key_hardware Zmena typu diaľkového ovládača menu.hint_key_history Priradenie klávesy pre zobrazenie\nhistórie prepínania kanála menu.hint_key_lastchannel Priradenie klávesy pre rýchle prepnutie na\npredchádzajúci kanál v histórii @@ -862,6 +874,8 @@ menu.hint_key_mptime Priradenie klávesy pre zobrazenie časov nahrávky menu.hint_key_mptimeshift Priradenie klávesy pre spustenie časového posunu menu.hint_key_pagedown Priradenie klávesy pre zobrazenie nasledujúcej strany položiek menu.hint_key_pageup Priradenie klávesy pre zobrazenie predchádzajúcej strany položiek +menu.hint_key_pic_mode_active Povolenie/zakázanie klávesy pre zmenu formátu obrazu +menu.hint_key_pic_size_active Povolenie/zakázanie klávesy pre zmenu správneho zobrazenia 4:3 menu.hint_key_pip_close Priradenie klávesy pre ukončenie PiP\nalebo spustenia ho na aktuálnom kanály menu.hint_key_pip_setup Priradenie klávesy pre konfiguráciu PiP menu.hint_key_pip_swap Priradenie klávesy pre zmenu PiP a živého kanála @@ -873,6 +887,7 @@ menu.hint_key_right Výber 'vpravo' funkcie v živom TV/Rádio režime menu.hint_key_save Uloží klávesové skratky do súboru menu.hint_key_screenshot Priradenie klávesy pre uloženie GUI/nalebo zachytenie obrazovky menu.hint_key_sort Priradenie klávesy pre zmenu triedenia zoznamu kanálov +menu.hint_key_special_active Povolenie/zakázanie niektorých špeciálnych kláves menu.hint_key_subchanneldown Priradenie klávesy pre rýchlu zmenu\n do predchádzajúceho subkanálu menu.hint_key_subchannelup Priradenie klávesy pre rýchlu zmenu\n do nasledujúceho subkanálu menu.hint_key_transponder Priradenie tlačítka pre zobrazenie zoznamu kanálov\nz aktuálneho transpondéra @@ -1121,6 +1136,7 @@ menu.hint_video_scart_mode Výber režimu analógového výstupu pre SCART konek menu.hint_volume Konfigurácia volieb okna hlasitosti menu.hint_volume_digits Číselné zobrazenie ukazovateľa hlasitosti ZAP/VYP menu.hint_volume_pos Výber pozície indikátora hlasitosti +menu.hint_volume_size Výber výšky indikátora hlasitosti menu.hint_ytplay Prehranie vybraných youtube videí menu.hint_zap_cycle Pri prepínaní kanálov zotrvať v aktuálnom bukete menu.next ďaľej (MENU ukončí) @@ -1155,6 +1171,7 @@ miscsettings.epg_old_events_hint1 Ako dlho zapisovať dáta EPG po skončení? miscsettings.epg_old_events_hint2 Nastavenie v hodinách. miscsettings.epg_save Ulož/Obnov EPG po reštarte miscsettings.epg_save_standby Ulož EPG pri soft standby +miscsettings.epg_scan Prehľadávanie EPG miscsettings.general Hlavné nastavenia miscsettings.head Rôzne nastavenia miscsettings.infobar Inforiadok @@ -1212,6 +1229,7 @@ motorcontrol.install_menu Inštalačné menu motorcontrol.motor_pos (a) Pozícia motora: motorcontrol.movement (b) Presun: motorcontrol.msec ms +motorcontrol.network Informácie sieti motorcontrol.no_mode nestará sa motorcontrol.notdef Nepoužité motorcontrol.override Nahradiť pozíciu určenú pre @@ -1264,7 +1282,7 @@ moviebrowser.edit_book_type_info1 Zadanie novej dĺžky skoku moviebrowser.edit_book_type_info2 <0 vzad , >0 vpred, 0: nikde moviebrowser.edit_serie Zadanie názvu série moviebrowser.error_no_movies Nenájdené filmy -moviebrowser.foot_filter Filtrovať: +moviebrowser.foot_filter Filter: moviebrowser.foot_focus Prepnúť okno moviebrowser.foot_options Voľby moviebrowser.foot_play Štart filmu @@ -1355,6 +1373,7 @@ moviebrowser.update_if_dest_empty_only Kopírovať len ak je cieľové miesto pr moviebrowser.use_dir Použi adresár moviebrowser.use_movie_dir Použi adresár filmov moviebrowser.use_rec_dir Použi adresár nahrávania +moviebrowser.yt_concurrent_connections Súbežné spojenia moviebrowser.yt_error Chyba načítania youtube videa moviebrowser.yt_max_results Dosiahnuté maximum výsledkov moviebrowser.yt_most_discussed Najdiskutovanejšie @@ -1364,6 +1383,7 @@ moviebrowser.yt_most_responded Najodpovedajšie moviebrowser.yt_most_shared Najzdielanejšie moviebrowser.yt_next_results Ďaľšie výsledky moviebrowser.yt_on_the_web Trendové videá +moviebrowser.yt_pref_quality Preferovaná kvalita moviebrowser.yt_prev_results Predchádzájúce výsledky moviebrowser.yt_recently_featured Nedávno odporúčané moviebrowser.yt_region Región @@ -1572,6 +1592,9 @@ rclock.unlockmsg Ovládač opäť funkčný. recording.is_running Tento kanál sa nahráva. Spustiť nové nahrávanie? recording.start Spustenie nahrávania, prosím čakajte...! recording.stop Zastavenie nahrávania, prosím čakajte...! +recording.time_hour hodina +recording.time_hours hodín +recording.time_min min recordingmenu.apids Predvolené zvukové stopy recordingmenu.apids_ac3 Nahraj zvuk AC3 recordingmenu.apids_alt Nahraj ostatné zvukové stopy @@ -1735,7 +1758,8 @@ settings.noconffile Nenájdené nastavenia Neutrino.\nPoužité budú prednastav settings.pos_bottom_center spodný stred settings.pos_bottom_left ľavý spodok settings.pos_bottom_right pravý spodok -settings.pos_default_center vrchný stred +settings.pos_default_center stred +settings.pos_higher_center spodný vyšší stred settings.pos_top_center vrchný stred settings.pos_top_left ľavý vrch settings.pos_top_right pravý vrch @@ -1771,7 +1795,7 @@ subtitles.head Titulky subtitles.stop Vypnúť titulky timer.eventrecord.msg Udalosť je naplánovaná na nahrávanie.\nPre úpravu plánu otvorte časovač nahrávania. timer.eventrecord.title Plánovač nahrávania -timer.eventtimed.msg Táto program je naplánovaný.\nBox bude zapnutý a \nprepnutý na tento kanál v stanovenom čase. +timer.eventtimed.msg Táto relácia je naplánovaná.\nBox bude zapnutý a prepnutý \nna tento kanál v stanovenom čase. timer.eventtimed.title Plánovač udalostí timerbar.channelswitch prepni timerbar.recordevent nahraj @@ -1852,6 +1876,7 @@ timing.infobar_movieplayer Stavový riadok (filmový mód) timing.infobar_radio Stavový riadok (rádio mód) timing.menu Menu timing.numericzap Prepínanie číslami +timing.volumebar Ukazovateľ hlasitosti unicable.lnb Vstup Unicable unicable.qrg Kmitočet Unicable unicable.scr SCR Unicable @@ -1927,6 +1952,11 @@ videomenu.videoformat_43 4:3 videomenu.videomode Obrazový režim wizard.initial_settings Najdené ininicializačné nastavenia wizard.install_settings Chcete inštalovať kanály pre Astra 19.2°E? +wizard.setup Úvodná inštalácia +wizard.setup_advanced Rozšírená +wizard.setup_easy Jednoduchá +wizard.setup_type Typ inštalácie +wizard.setup_type_hint Jednoduché nastavenie pre CanalDigitaal/TĂ©lĂ©SAT/TV Vlaanderen alebo jednoduché káblové vyhľadávanie wizard.welcome_head Vitajte v Sprievodcovi nastavenia wizard.welcome_text Ďaľšie kroky prevedú základnú inštaláciu tohto zariadenia.\nChceš pokračovať?\nBlahoželáme k zakúpeniu CST. Nasledujúce \nkroky ťa prevedú počiatočnou inštaláciou nastavenia prístroja.\nPrajeme ti veľa radosti s týmto príjmačom!\nĎaľší krok ? word.from z diff --git a/src/nhttpd/web/languages/Slovak b/src/nhttpd/web/languages/Slovak index 501032626..0625c854e 100644 --- a/src/nhttpd/web/languages/Slovak +++ b/src/nhttpd/web/languages/Slovak @@ -1,6 +1,6 @@ # yWeb language file (Slovensky) by EnoSat # language version: 1.1 -# $Date: 2013-04-30 22:22:22 +0100 (Ut, 30 Apríla 2013) $ +# $Date: 2013-08-03 20:20:20 +0100 (so, 3 Augusta 2013) $ # $Revision: 212 $ #========= Hlavné / Celkové nastavenie global.no_iframes=Váš prehliadač nepodporuje I-rámce. @@ -53,6 +53,9 @@ attention=Upozornenie! directory=Adresár filename=Názov súboru restriced_by_management_ip=obmedzené Manažmentom-IP +automatic=automaticky +show=ukázať +hide=skryť #======== Hlavná ponuka main.boxcontrol=Ovládanie zariadenia @@ -301,6 +304,7 @@ set.nhttpd.active_after_boot=aktívne po nabootovaní set.nhttpd.port=Vydávateľ set.nhttpd.threading=Prepojené set.nhttpd.alternate_web_folder=Alternatívny web-adresár +set.nhttpd.hosted_folder=Pripojené adresáre set.nhttpd.allowed_file_extensions=Povolené prípony súboru / MIME set.nhttpd.allow_all_file_extensions=Povoliť všetky prípony súboru set.nhttpd.url_of_logos_desc=Vloženie adresára s logami staníc @@ -502,6 +506,7 @@ live.timer_edit.apids.default=Prednastavené live.timer_edit.apids.standard=Štandartné live.timer_edit.apids.alt=Alternativné live.timer_edit.apids.ac3=AC3 +live.timer_edit.apids=A-pidy live.timer_edit.standby=Režim spánku live.timer_edit.plugin=Doplnok live.timer_edit.rec_dir=Adresár nahrávania @@ -520,7 +525,7 @@ live.timer-sync.timer_preview=Prehľadový zoznam časovača live.timer-sync.start_time=Čas začiatku live.timer-sync.end_time=Čas konca live.timer-sync.channel=Kanál -live.timer-sync.programm=Program +live.timer-sync.programm=Relácia live.timer-sync.source=Zdroj live.timer-sync.set_timer=nastav časovač live.timer-sync.clear_log=vyčisti log @@ -534,3 +539,54 @@ info.About=O programe info.check_for_updates=Kontrola aktualizácie info.your_version=Vaša inštalovaná verzia info.actual_version=Aktuálna verzia + +========= Dialkové ovládanie +rc.key_power=Spánok +rc.key_mute=Umlčanie +rc.key_1=1 +rc.key_2=2 +rc.key_3=3 +rc.key_4=4 +rc.key_5=5 +rc.key_6=6 +rc.key_7=7 +rc.key_8=8 +rc.key_9=9 +rc.key_0=0 +rc.key_text=TXT +rc.key_favorites=Obľúbené +rc.key_volumeup=Hlas+ +rc.key_volumedown=Hlas- +rc.key_pageup=Strana+ +rc.key_pagedown=Strana- +rc.key_mode=TV/Radio +rc.key_next=Preskočiť- +rc.key_previous=Preskočiť+ +rc.key_sleep=Uspať +rc.key_audio=Zvuk +rc.key_help=Pomoc +rc.key_red=Červený +rc.key_green=Zelený +rc.key_yellow=Žltý +rc.key_blue=Modrý +rc.key_epg=EPG +rc.key_info=Info +rc.key_ok=OK +rc.key_up=Nahor +rc.key_down=Nadol +rc.key_left=Vľavo +rc.key_right=Vpravo +rc.key_setup=Ponuka +rc.key_home=Ukončiť +rc.key_sat=Družica +rc.key_www= +rc.key_rewind=Vpred +rc.key_play=Prehrať +rc.key_forward=Vzad +rc.key_stop=Zastaviť +rc.key_record=Nahrať +rc.key_pause=Pozastaviť +rc.key_games= +rc.key_time= +rc.key_picsize=Veľkosť obrazu +rc.key_picmode=Režim obrazu From 08b1f99352e20d16b7d4e2de18f53f9cb094cf30 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 8 Aug 2013 15:51:47 +0200 Subject: [PATCH 097/142] update encoding.conf --- data/encoding.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/data/encoding.conf b/data/encoding.conf index 495ae7277..4d524dca8 100644 --- a/data/encoding.conf +++ b/data/encoding.conf @@ -35,6 +35,7 @@ cn ISO3166-2 0xc95 0x3 #ASTRA 23.5 12109H skylink 0xc98 0x3 #ASTRA 23.5 12168V skylink* 0xc9a 0x3 #ASTRA 23.5 12207V skylink* +0xc8b 0x3 ISO6397 # skylink 23.5E 11914 H #TSID ONID 0x1 0x601 #UPC Cable Hungary 0x2 0x601 #UPC Cable Hungary From cf261628b6425f5c4a1356ea52af6c02326d5746 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 8 Aug 2013 17:02:53 +0200 Subject: [PATCH 098/142] eitd: fix compil without USE_DVBSI_EVENTS --- src/eitd/SIsections.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/eitd/SIsections.hpp b/src/eitd/SIsections.hpp index 5862e1717..b537cadaf 100644 --- a/src/eitd/SIsections.hpp +++ b/src/eitd/SIsections.hpp @@ -65,8 +65,8 @@ struct SI_section_EIT_header { unsigned segment_last_section_number : 8; unsigned last_table_id : 8; } __attribute__ ((packed)) ; // 14 bytes -#if 0 -// unused + +#ifndef USE_DVBSI_EVENTS struct SI_section_header { unsigned table_id : 8; #if __BYTE_ORDER == __BIG_ENDIAN From 9c175234e50d1ae960d1e0c9a88c4528001b6db9 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 8 Aug 2013 13:52:26 +0200 Subject: [PATCH 099/142] src/gui/scan.cpp: Fix pixel error with transponder scan. --- src/gui/scan.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index c3a4fd2a6..74dae6cd3 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -487,7 +487,7 @@ void CScanTs::hide() void CScanTs::paintLineLocale(int px, int * py, int pwidth, const neutrino_locale_t l) { frameBuffer->paintBoxRel(px, *py, pwidth, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, *py + mheight, pwidth, g_Locale->getText(l), COL_MENUCONTENTINACTIVE_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, *py + mheight, pwidth-2, g_Locale->getText(l), COL_MENUCONTENTINACTIVE_TEXT, 0, true); // UTF-8 *py += mheight; } @@ -495,7 +495,7 @@ void CScanTs::paintLine(int px, int py, int w, const char * const txt) { //printf("CScanTs::paintLine x %d y %d w %d width %d xpos2 %d: %s\n", px, py, w, width, xpos2, txt); frameBuffer->paintBoxRel(px, py, w, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px, py + mheight, w, txt, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, py + mheight, w-2, txt, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void CScanTs::paint(bool fortest) From ff161a699c7894e548cd5d893b1f03485b24a1bd Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Fri, 9 Aug 2013 11:04:26 +0200 Subject: [PATCH 100/142] - yweb: add PCR PID handling to live streaming ... ... and add PCR PID and PMT PID to streaminfo based on patches by Christian Schuett in Tuxbox Git --- src/nhttpd/tuxboxapi/coolstream/controlapi.cpp | 13 ++++++++++++- src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp | 7 ++++++- src/nhttpd/web/Y_StreamInfo.yhtm | 10 ++++++++++ src/nhttpd/web/Y_Version.txt | 4 ++-- src/nhttpd/web/languages/Deutsch | 2 ++ src/nhttpd/web/languages/English | 2 ++ 6 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index c1a8ed2d2..e407d85bb 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -1737,7 +1737,8 @@ void CControlAPI::SendAllCurrentVAPid(CyhookHandler *hh) hh->printf("%05u vtxt\n",pids.PIDs.vtxtpid); if (pids.PIDs.pmtpid) hh->printf("%05u pmt\n",pids.PIDs.pmtpid); - + if (pids.PIDs.pcrpid) + hh->printf("%05u pcr\n",pids.PIDs.pcrpid); } //----------------------------------------------------------------------------- void CControlAPI::SendTimers(CyhookHandler *hh) @@ -2067,9 +2068,17 @@ void CControlAPI::YWeb_SendVideoStreamingPids(CyhookHandler *hh, int apid_no) if(!pids.APIDs.empty()) apid = pids.APIDs[apid_idx].pid; if(hh->ParamList["no_commas"] != "") + { hh->printf("0x%04x 0x%04x 0x%04x",pids.PIDs.pmtpid,pids.PIDs.vpid,apid); + if (pids.PIDs.pcrpid != pids.PIDs.vpid) + hh->printf(" 0x%04x", pids.PIDs.pcrpid); + } else + { hh->printf("0x%04x,0x%04x,0x%04x",pids.PIDs.pmtpid,pids.PIDs.vpid,apid); + if (pids.PIDs.pcrpid != pids.PIDs.vpid) + hh->printf(",0x%04x", pids.PIDs.pcrpid); + } } //----------------------------------------------------------------------------- @@ -2543,6 +2552,8 @@ void CControlAPI::build_live_url(CyhookHandler *hh) if(!pids.APIDs.empty()) apid = pids.APIDs[apid_idx].pid; xpids = string_printf("0x%04x,0x%04x,0x%04x",pids.PIDs.pmtpid,pids.PIDs.vpid,apid); + if (pids.PIDs.pcrpid != pids.PIDs.vpid) + xpids += string_printf(",0x%04x", pids.PIDs.pcrpid); } else if ( mode == CZapitClient::MODE_RADIO) { diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index a3489f34a..fa62bb6ad 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -520,6 +520,7 @@ std::string CNeutrinoYParser::func_get_mode(CyhookHandler *, std::string) //------------------------------------------------------------------------- std::string CNeutrinoYParser::func_get_video_pids(CyhookHandler *, std::string para) { + std::string yresult; CZapitClient::responseGetPIDs pids; int apid=0,apid_no=0,apid_idx=0; pids.PIDs.vpid=0; @@ -532,7 +533,10 @@ std::string CNeutrinoYParser::func_get_video_pids(CyhookHandler *, std::string apid_idx=apid_no; if(!pids.APIDs.empty()) apid = pids.APIDs[apid_idx].pid; - return string_printf("0x%04x,0x%04x,0x%04x",pids.PIDs.pmtpid,pids.PIDs.vpid,apid); + yresult = string_printf("0x%04x,0x%04x,0x%04x", pids.PIDs.pmtpid, pids.PIDs.vpid, apid); + if (pids.PIDs.pcrpid != pids.PIDs.vpid) + yresult += string_printf(",0x%04x", pids.PIDs.pcrpid); + return yresult; } //------------------------------------------------------------------------- // y-func : get_radio_pids (returns: 0x0000) @@ -738,6 +742,7 @@ std::string CNeutrinoYParser::func_get_current_stream_info(CyhookHandler *hh, s hh->ParamList["apid"] = itoh(serviceinfo.apid); hh->ParamList["vtxtpid"] = (serviceinfo.vtxtpid != 0)?itoh(serviceinfo.vtxtpid):"not available"; hh->ParamList["pmtpid"] = (serviceinfo.pmtpid != 0)?itoh(serviceinfo.pmtpid):"not available"; + hh->ParamList["pcrpid"] = (serviceinfo.pcrpid != 0)?itoh(serviceinfo.pcrpid):"not available"; hh->ParamList["tsfrequency"] = string_printf("%d.%d MHz", serviceinfo.tsfrequency/1000, serviceinfo.tsfrequency%1000); hh->ParamList["polarisation"] = serviceinfo.polarisation==1?"h":"v"; hh->ParamList["ServiceName"] = NeutrinoAPI->GetServiceName(CZapit::getInstance()->GetCurrentChannelID()); diff --git a/src/nhttpd/web/Y_StreamInfo.yhtm b/src/nhttpd/web/Y_StreamInfo.yhtm index d554b0417..944651899 100644 --- a/src/nhttpd/web/Y_StreamInfo.yhtm +++ b/src/nhttpd/web/Y_StreamInfo.yhtm @@ -79,6 +79,16 @@  
{=vpid=}
+ + {=L:epg.si.pcrpid=}: +   +
{=pcrpid=}
+ + + {=L:epg.si.pmtpid=}: +   +
{=pmtpid=}
+ {=L:epg.si.apid=}:   diff --git a/src/nhttpd/web/Y_Version.txt b/src/nhttpd/web/Y_Version.txt index 5698d1a0b..173750aaa 100644 --- a/src/nhttpd/web/Y_Version.txt +++ b/src/nhttpd/web/Y_Version.txt @@ -1,4 +1,4 @@ -version=2.8.0.43 -date=07.07.2013 +version=2.8.0.44 +date=09.08.2013 type=Release info=Port CST diff --git a/src/nhttpd/web/languages/Deutsch b/src/nhttpd/web/languages/Deutsch index f17d79614..dd6d71641 100644 --- a/src/nhttpd/web/languages/Deutsch +++ b/src/nhttpd/web/languages/Deutsch @@ -196,6 +196,8 @@ epg.si.onid=Original Network ID epg.si.sid=Service ID epg.si.tsid=Transponder Stream ID epg.si.vpid=Video PID +epg.si.pmtpid=Program Map Table PID +epg.si.pcrpid=Program Clock Reference PID epg.si.apid=Audio PID epg.si.vtxtpid=Teletext PID epg.si.crypt=Crypt Systeme diff --git a/src/nhttpd/web/languages/English b/src/nhttpd/web/languages/English index d9ae7c8d2..c5ff7241a 100644 --- a/src/nhttpd/web/languages/English +++ b/src/nhttpd/web/languages/English @@ -199,6 +199,8 @@ epg.si.onid=Original Network ID epg.si.sid=Service ID epg.si.tsid=Transponder Stream ID epg.si.vpid=Video PID +epg.si.pmtpid=Program Map Table PID +epg.si.pcrpid=Program Clock Reference PID epg.si.apid=Audio PID epg.si.vtxtpid=Teletext PID epg.si.crypt=Crypt systems From 322db8b5918dc5efbd1e2e28a24c14b44d0e7a2d Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 13:31:20 +0400 Subject: [PATCH 101/142] zapit/lib/zapitclient.cpp: add zapTo_epg, EVT_BACK_ZAP_COMPLETE event --- src/zapit/include/zapit/client/msgtypes.h | 1 + src/zapit/include/zapit/client/zapitclient.h | 2 ++ src/zapit/lib/zapitclient.cpp | 21 ++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/zapit/include/zapit/client/msgtypes.h b/src/zapit/include/zapit/client/msgtypes.h index 1da5b0eb9..1bdaa1fd2 100644 --- a/src/zapit/include/zapit/client/msgtypes.h +++ b/src/zapit/include/zapit/client/msgtypes.h @@ -190,6 +190,7 @@ class CZapitMessages t_channel_id channel_id; bool record; bool pip; + bool epg; }; struct commandSetAudioChannel diff --git a/src/zapit/include/zapit/client/zapitclient.h b/src/zapit/include/zapit/client/zapitclient.h index bb71ad4a0..b71568f83 100644 --- a/src/zapit/include/zapit/client/zapitclient.h +++ b/src/zapit/include/zapit/client/zapitclient.h @@ -72,6 +72,7 @@ class CZapitClient:public CBasicClient EVT_SERVICES_CHANGED, EVT_PMT_CHANGED, EVT_TUNE_COMPLETE, + EVT_BACK_ZAP_COMPLETE, LAST_EVENT_MARKER // <- no actual event, needed by pzapit }; @@ -274,6 +275,7 @@ class CZapitClient:public CBasicClient unsigned int zapTo_serviceID(const t_channel_id channel_id); unsigned int zapTo_record(const t_channel_id channel_id); unsigned int zapTo_pip(const t_channel_id channel_id); + unsigned int zapTo_epg(const t_channel_id channel_id); /* zaps to subservice, returns the "zap-status" */ unsigned int zapTo_subServiceID(const t_channel_id channel_id); diff --git a/src/zapit/lib/zapitclient.cpp b/src/zapit/lib/zapitclient.cpp index 393c4e8fa..28e9cf773 100644 --- a/src/zapit/lib/zapitclient.cpp +++ b/src/zapit/lib/zapitclient.cpp @@ -170,6 +170,7 @@ unsigned int CZapitClient::zapTo_record(const t_channel_id channel_id) msg.channel_id = channel_id; msg.record = true; msg.pip = false; + msg.epg = false; send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); @@ -188,6 +189,26 @@ unsigned int CZapitClient::zapTo_pip(const t_channel_id channel_id) msg.channel_id = channel_id; msg.record = false; msg.pip = true; + msg.epg = false; + + send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); + + CZapitMessages::responseZapComplete response; + CBasicClient::receive_data((char* )&response, sizeof(response)); + + close_connection(); + + return response.zapStatus; +} + +unsigned int CZapitClient::zapTo_epg(const t_channel_id channel_id) +{ + CZapitMessages::commandZaptoServiceID msg; + + msg.channel_id = channel_id; + msg.record = false; + msg.pip = false; + msg.epg = true; send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); From f210a8c048e7aefa9f1033eee1bdb046ee7b6552 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 13:32:43 +0400 Subject: [PATCH 102/142] neutrino: add EVT_BACK_ZAP_COMPLETE event for background epg scan zap --- src/driver/rcinput.cpp | 4 ++++ src/neutrino.cpp | 5 +++-- src/neutrinoMessages.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 4c867bfa2..916613966 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1054,6 +1054,10 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 *msg = NeutrinoMessages::EVT_TUNE_COMPLETE; *data = (neutrino_msg_data_t) p; break; + case CZapitClient::EVT_BACK_ZAP_COMPLETE: + *msg = NeutrinoMessages::EVT_BACK_ZAP_COMPLETE; + *data = (neutrino_msg_data_t) p; + break; default: printf("[neutrino] event INITID_ZAPIT - unknown eventID 0x%x\n", emsg.eventID ); } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 2250b2dd0..bd9e68e9a 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1636,7 +1636,7 @@ void CNeutrinoApp::InitTimerdClient() void CNeutrinoApp::InitZapitClient() { g_Zapit = new CZapitClient; -#define ZAPIT_EVENT_COUNT 27 +#define ZAPIT_EVENT_COUNT 28 const CZapitClient::events zapit_event[ZAPIT_EVENT_COUNT] = { CZapitClient::EVT_ZAP_COMPLETE, @@ -1666,6 +1666,7 @@ void CNeutrinoApp::InitZapitClient() CZapitClient::EVT_SDT_CHANGED, CZapitClient::EVT_PMT_CHANGED, CZapitClient::EVT_TUNE_COMPLETE, + CZapitClient::EVT_BACK_ZAP_COMPLETE }; for (int i = 0; i < ZAPIT_EVENT_COUNT; i++) @@ -2313,7 +2314,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) return messages_return::handled; } } - if ((msg == NeutrinoMessages::EVT_EIT_COMPLETE)) { + if ((msg == NeutrinoMessages::EVT_EIT_COMPLETE || msg == NeutrinoMessages::EVT_BACK_ZAP_COMPLETE)) { CEpgScan::getInstance()->handleMsg(msg, data); return messages_return::handled; } diff --git a/src/neutrinoMessages.h b/src/neutrinoMessages.h index 50d703020..ce90d5b46 100644 --- a/src/neutrinoMessages.h +++ b/src/neutrinoMessages.h @@ -150,6 +150,7 @@ struct NeutrinoMessages { EVT_RECORDING_ENDED = CRCInput::RC_WithData + 23, /* sectionsd */ EVT_EIT_COMPLETE = CRCInput::RC_WithData + 24, /* data: (t_channel_id *) */ + EVT_BACK_ZAP_COMPLETE = CRCInput::RC_WithData + 25, /* data: (t_channel_id *) */ }; enum { From 640056c938018247b410266f93cb62c6f3610cb1 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 13:35:14 +0400 Subject: [PATCH 103/142] zapit/src/zapit.cpp: add ZapForEpg() --- src/zapit/include/zapit/zapit.h | 6 +++- src/zapit/src/zapit.cpp | 51 +++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/zapit/include/zapit/zapit.h b/src/zapit/include/zapit/zapit.h index 1ee0b16de..a80088ebc 100644 --- a/src/zapit/include/zapit/zapit.h +++ b/src/zapit/include/zapit/zapit.h @@ -6,6 +6,7 @@ #define __zapit_h__ #include +#include #include #include #include @@ -102,7 +103,7 @@ class CZapit : public OpenThreads::Thread RECORD_MODE = 0x04 }; - OpenThreads::Mutex mutex; + OpenThreads::ReentrantMutex mutex; bool started; bool event_mode; bool firstzap; @@ -211,6 +212,7 @@ class CZapit : public OpenThreads::Thread bool ParseCommand(CBasicMessage::Header &rmsg, int connfd); bool ZapIt(const t_channel_id channel_id, bool for_update = false, bool startplayback = true); bool ZapForRecord(const t_channel_id channel_id); + bool ZapForEpg(const t_channel_id channel_id); bool ChangeAudioPid(uint8_t index); void SetRadioMode(); void SetTVMode(); @@ -257,5 +259,7 @@ class CZapit : public OpenThreads::Thread int SetVolumePercent(int percent); bool StartPip(const t_channel_id channel_id); bool StopPip(); + void Lock() { mutex.lock(); } + void Unlock() { mutex.unlock(); } }; #endif /* __zapit_h__ */ diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 0a2332b2c..01447934f 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -71,6 +71,7 @@ #include #include #include +#include /* globals */ int sig_delay = 2; // seconds between signal check @@ -596,7 +597,7 @@ bool CZapit::StartPip(const t_channel_id channel_id) if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { - printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); + INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); return false; } INFO("[pip] zap to %s (%llx tp %llx)", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); @@ -653,7 +654,7 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id) bool transponder_change; if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { - printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); + INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); return false; } INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id); @@ -676,6 +677,43 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id) return true; } +bool CZapit::ZapForEpg(const t_channel_id channel_id) +{ + CZapitChannel* newchannel; + bool transponder_change; + bool ret = false; + + if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { + INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); + return false; + } + INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id); + + CFEManager::getInstance()->lockFrontend(live_fe); +#ifdef ENABLE_PIP + if (pip_fe && pip_fe != live_fe) + CFEManager::getInstance()->lockFrontend(pip_fe); +#endif + CFrontend * frontend = CFEManager::getInstance()->allocateFE(newchannel); + if(frontend == NULL) { + ERROR("Cannot get frontend\n"); + goto __error; + } + if(!TuneChannel(frontend, newchannel, transponder_change)) + goto __error; + + if(ParsePatPmt(newchannel)) + ret = true; + +__error: + CFEManager::getInstance()->unlockFrontend(live_fe); +#ifdef ENABLE_PIP + if (pip_fe && pip_fe != live_fe) + CFEManager::getInstance()->unlockFrontend(pip_fe); +#endif + return ret; +} + /* set channel/pid volume percent, using current channel_id and pid, if those params is 0 */ void CZapit::SetPidVolume(t_channel_id channel_id, int pid, int percent) { @@ -970,6 +1008,15 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) else if(msgZaptoServiceID.pip) msgResponseZapComplete.zapStatus = StartPip(msgZaptoServiceID.channel_id); #endif + else if(msgZaptoServiceID.epg) { + msgResponseZapComplete.zapStatus = 0; + CBasicServer::send_data(connfd, &msgResponseZapComplete, sizeof(msgResponseZapComplete)); + bool ret = ZapForEpg(msgZaptoServiceID.channel_id); + if (!ret) + msgZaptoServiceID.channel_id = 0; + SendEvent(CZapitClient::EVT_BACK_ZAP_COMPLETE, &msgZaptoServiceID.channel_id, sizeof(t_channel_id)); + break; + } else msgResponseZapComplete.zapStatus = ZapTo(msgZaptoServiceID.channel_id, (rmsg.cmd == CZapitMessages::CMD_ZAPTO_SUBSERVICEID)); From 46980f524d425c1296be0d189fca37677e0f6281 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 13:35:32 +0400 Subject: [PATCH 104/142] driver/scanepg.cpp: try to make zap for epg scan non-blocking --- src/driver/scanepg.cpp | 87 +++++++++++++++++++++++++++--------------- src/driver/scanepg.h | 2 + 2 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/driver/scanepg.cpp b/src/driver/scanepg.cpp index 4b893648f..be68e6cf4 100644 --- a/src/driver/scanepg.cpp +++ b/src/driver/scanepg.cpp @@ -42,6 +42,7 @@ extern CBouquetList * bouquetList; CEpgScan::CEpgScan() { current_bnum = -1; + next_chid = 0; } CEpgScan::~CEpgScan() @@ -60,6 +61,7 @@ void CEpgScan::Clear() { scanmap.clear(); current_bnum = -1; + next_chid = 0; } void CEpgScan::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) @@ -98,39 +100,64 @@ void CEpgScan::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) if (scanmap.empty()) return; - t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - - CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend(); - CFEManager::getInstance()->lockFrontend(live_fe); -#ifdef ENABLE_PIP - CFrontend *pip_fe = CZapit::getInstance()->GetPipFrontend(); - if (pip_fe && pip_fe != live_fe) - CFEManager::getInstance()->lockFrontend(pip_fe); -#endif - for (eit_scanmap_iterator_t it = scanmap.begin(); it != scanmap.end(); /* ++it*/) { - newchan = CServiceManager::getInstance()->FindChannel(it->second); - if ((newchan == NULL) || SAME_TRANSPONDER(live_channel_id, newchan->getChannelID())) { - scanmap.erase(it++); - continue; - } - if (CFEManager::getInstance()->canTune(newchan)) { - INFO("try to scan [%s]", newchan->getName().c_str()); - bool ret = g_Zapit->zapTo_record(newchan->getChannelID()) > 0; - if (ret) { + Next(); + } + else if (msg == NeutrinoMessages::EVT_BACK_ZAP_COMPLETE) { + t_channel_id chid = *(t_channel_id *)data; + INFO("EVT_BACK_ZAP_COMPLETE [" PRINTF_CHANNEL_ID_TYPE "]", chid); + if (next_chid) { + newchan = CServiceManager::getInstance()->FindChannel(next_chid); + if (newchan) { + if(chid) { + INFO("try to scan [%s]", newchan->getName().c_str()); g_Sectionsd->setServiceChanged(newchan->getChannelID(), false, newchan->getRecordDemux()); - break; } else { - scanmap.erase(it++); - continue; + INFO("tune failed [%s]", newchan->getName().c_str()); + scanmap.erase(newchan->getTransponderId()); + Next(); } - } else - INFO("skip [%s], cannot tune", newchan->getName().c_str()); - ++it; + } } - CFEManager::getInstance()->unlockFrontend(live_fe); -#ifdef ENABLE_PIP - if (pip_fe && pip_fe != live_fe) - CFEManager::getInstance()->unlockFrontend(pip_fe); -#endif } } + +void CEpgScan::Next() +{ + next_chid = 0; + if (CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) + return; + + t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); + + CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend(); + /* executed in neutrino thread - possible race with locks in zapit zap NOWAIT : + send zaTo_NOWAIT -> EIT_COMPLETE from sectionsd -> zap and this at the same time + */ + CFEManager::getInstance()->lockFrontend(live_fe); +#ifdef ENABLE_PIP + CFrontend *pip_fe = CZapit::getInstance()->GetPipFrontend(); + if (pip_fe && pip_fe != live_fe) + CFEManager::getInstance()->lockFrontend(pip_fe); +#endif + for (eit_scanmap_iterator_t it = scanmap.begin(); it != scanmap.end(); /* ++it*/) { + CZapitChannel * newchan = CServiceManager::getInstance()->FindChannel(it->second); + if ((newchan == NULL) || SAME_TRANSPONDER(live_channel_id, newchan->getChannelID())) { + scanmap.erase(it++); + continue; + } + if (CFEManager::getInstance()->canTune(newchan)) { + INFO("try to tune [%s]", newchan->getName().c_str()); + next_chid = newchan->getChannelID(); + break; + } else + INFO("skip [%s], cannot tune", newchan->getName().c_str()); + ++it; + } + CFEManager::getInstance()->unlockFrontend(live_fe); +#ifdef ENABLE_PIP + if (pip_fe && pip_fe != live_fe) + CFEManager::getInstance()->unlockFrontend(pip_fe); +#endif + if (next_chid) + g_Zapit->zapTo_epg(next_chid); +} diff --git a/src/driver/scanepg.h b/src/driver/scanepg.h index d3c74bc60..bdd9f5c32 100644 --- a/src/driver/scanepg.h +++ b/src/driver/scanepg.h @@ -31,7 +31,9 @@ class CEpgScan private: int current_bnum; eit_scanmap_t scanmap; + t_channel_id next_chid; std::set scanned; + void Next(); CEpgScan(); public: From 026fd54dcbc340deb0a254da38f5898d8fd969ea Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 16:00:51 +0400 Subject: [PATCH 105/142] zapit/include/zapit/femanager.h: change mutex to recursive, add Lock/Unlock --- src/zapit/include/zapit/femanager.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index ecdaaf18a..d7fa6a679 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -29,7 +29,7 @@ #include #include -#include +#include #define MAX_FE 4 #define MAX_ADAPTERS 1 @@ -85,7 +85,7 @@ class CFEManager bool have_sat; bool have_cable; bool have_locked; - OpenThreads::Mutex mutex; + OpenThreads::ReentrantMutex mutex; std::vector dmap; @@ -142,5 +142,8 @@ class CFEManager bool haveCable() { return have_cable; } bool satOnly() { return (have_sat && !have_cable); } bool cableOnly() { return (have_cable && !have_sat); } + void Lock() { mutex.lock(); } + void Unlock() { mutex.unlock(); } + }; #endif /* __femanager_h__ */ From 79845b8fe239c5d9e9cf726dd6d9d7198e17c2a0 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 16:01:57 +0400 Subject: [PATCH 106/142] driver/scanepg.cpp: fix copy/paste --- src/driver/scanepg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/scanepg.cpp b/src/driver/scanepg.cpp index be68e6cf4..5bbf95ef7 100644 --- a/src/driver/scanepg.cpp +++ b/src/driver/scanepg.cpp @@ -124,7 +124,7 @@ void CEpgScan::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) void CEpgScan::Next() { next_chid = 0; - if (CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) + if (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_standby) return; t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); From cdb0e0ef215dbdfb1843045ab68f1523b8ac139f Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 16:05:20 +0400 Subject: [PATCH 107/142] driver/record.cpp, driver/scanepg.cpp, zapit/src/zapit.cpp: try to prevent race while lock/allocate frontend in case of possible concurrent usage in neutrino and zapit threads --- src/driver/record.cpp | 4 ++++ src/driver/scanepg.cpp | 6 ++++-- src/zapit/src/zapit.cpp | 31 +++++++++++++++++++------------ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 123d6d012..d6bfd4398 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -1621,6 +1621,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * if(live_channel_id != channel_id) { /* first try to get frontend for record with locked live */ bool unlock = true; + /* executed in neutrino thread - possible race with zap NOWAIT and epg scan zap */ + CFEManager::getInstance()->Lock(); CFEManager::getInstance()->lockFrontend(live_fe); frontend = CFEManager::getInstance()->allocateFE(channel, true); if (frontend == NULL) { @@ -1629,6 +1631,8 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * CFEManager::getInstance()->unlockFrontend(live_fe); frontend = CFEManager::getInstance()->allocateFE(channel, true); } + CFEManager::getInstance()->Unlock(); + if (frontend == NULL) return false; diff --git a/src/driver/scanepg.cpp b/src/driver/scanepg.cpp index 5bbf95ef7..b0e2075d5 100644 --- a/src/driver/scanepg.cpp +++ b/src/driver/scanepg.cpp @@ -129,10 +129,11 @@ void CEpgScan::Next() t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); - CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend(); /* executed in neutrino thread - possible race with locks in zapit zap NOWAIT : - send zaTo_NOWAIT -> EIT_COMPLETE from sectionsd -> zap and this at the same time + send zapTo_NOWAIT -> EIT_COMPLETE from sectionsd -> zap and this at the same time */ + CFEManager::getInstance()->Lock(); + CFrontend *live_fe = CZapit::getInstance()->GetLiveFrontend(); CFEManager::getInstance()->lockFrontend(live_fe); #ifdef ENABLE_PIP CFrontend *pip_fe = CZapit::getInstance()->GetPipFrontend(); @@ -158,6 +159,7 @@ void CEpgScan::Next() if (pip_fe && pip_fe != live_fe) CFEManager::getInstance()->unlockFrontend(pip_fe); #endif + CFEManager::getInstance()->Unlock(); if (next_chid) g_Zapit->zapTo_epg(next_chid); } diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 01447934f..373a371c8 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -483,6 +483,8 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay INFO("[zapit] zap to %s (%" PRIx64 " tp %" PRIx64 ")", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); #ifdef ENABLE_PIP + /* executed async if zap NOWAIT, race possible with record lock/allocate */ + CFEManager::getInstance()->Lock(); if (pip_fe) CFEManager::getInstance()->lockFrontend(pip_fe); CFrontend * fe = CFEManager::getInstance()->allocateFE(newchannel); @@ -492,6 +494,7 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay StopPip(); fe = CFEManager::getInstance()->allocateFE(newchannel); } + CFEManager::getInstance()->Unlock(); #else CFrontend * fe = CFEManager::getInstance()->allocateFE(newchannel); #endif @@ -681,7 +684,6 @@ bool CZapit::ZapForEpg(const t_channel_id channel_id) { CZapitChannel* newchannel; bool transponder_change; - bool ret = false; if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { INFO("channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); @@ -689,29 +691,34 @@ bool CZapit::ZapForEpg(const t_channel_id channel_id) } INFO("%s: %s (%" PRIx64 ")", __FUNCTION__, newchannel->getName().c_str(), channel_id); + /* executed async in zapit thread, race possible with record lock/allocate */ + CFEManager::getInstance()->Lock(); + CFEManager::getInstance()->lockFrontend(live_fe); #ifdef ENABLE_PIP if (pip_fe && pip_fe != live_fe) CFEManager::getInstance()->lockFrontend(pip_fe); #endif CFrontend * frontend = CFEManager::getInstance()->allocateFE(newchannel); - if(frontend == NULL) { - ERROR("Cannot get frontend\n"); - goto __error; - } - if(!TuneChannel(frontend, newchannel, transponder_change)) - goto __error; - if(ParsePatPmt(newchannel)) - ret = true; - -__error: CFEManager::getInstance()->unlockFrontend(live_fe); #ifdef ENABLE_PIP if (pip_fe && pip_fe != live_fe) CFEManager::getInstance()->unlockFrontend(pip_fe); #endif - return ret; + CFEManager::getInstance()->Unlock(); + + if(frontend == NULL) { + ERROR("Cannot get frontend\n"); + return false; + } + if(!TuneChannel(frontend, newchannel, transponder_change)) + return false; + + if(!ParsePatPmt(newchannel)) + return false; + + return true; } /* set channel/pid volume percent, using current channel_id and pid, if those params is 0 */ From 7165459b27726e9f31286e0c5f4fa4112ee5d573 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 19:15:56 +0400 Subject: [PATCH 108/142] zapit/src/zapit.cpp: ZapForEpg no need for successfull ParsePatPmt, channel may be not running atm --- src/zapit/src/zapit.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 373a371c8..c1e598d66 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -714,10 +714,11 @@ bool CZapit::ZapForEpg(const t_channel_id channel_id) } if(!TuneChannel(frontend, newchannel, transponder_change)) return false; - +#if 0 if(!ParsePatPmt(newchannel)) return false; - +#endif + ParsePatPmt(newchannel); return true; } From 624f128325824118e6ba1070cfd9688e081004e8 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 15:36:30 +0400 Subject: [PATCH 109/142] autorun.sh: change PATH and LD_LIBRARY_PATH --- autorun.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autorun.sh b/autorun.sh index 02bd8d175..d0b799034 100755 --- a/autorun.sh +++ b/autorun.sh @@ -1,5 +1,5 @@ -export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib -export PATH=${PATH}:/opt/bin:/opt/usr/bin +export LD_LIBRARY_PATH=/var/lib +export PATH=${PATH}:/var/bin:/var/plugins echo "### Starting NEUTRINO ###" From 94366342202e881c00c267c7342d76e1a12a9d70 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 15:38:07 +0400 Subject: [PATCH 110/142] neutrino.cpp: change apply_settings default to false --- src/neutrino.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index bd9e68e9a..3365e2358 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -656,7 +656,7 @@ int CNeutrinoApp::loadSetup(const char * fname) //Software-update g_settings.softupdate_mode = configfile.getInt32( "softupdate_mode", 1 ); g_settings.apply_kernel = configfile.getBool("apply_kernel" , false); - g_settings.apply_settings = configfile.getBool("apply_settings" , true); + g_settings.apply_settings = configfile.getBool("apply_settings" , false); strcpy(g_settings.softupdate_url_file, configfile.getString("softupdate_url_file", "/var/etc/update.urls").c_str()); strcpy(g_settings.softupdate_proxyserver, configfile.getString("softupdate_proxyserver", "" ).c_str()); From 73e67e8cbdd658cfb1c7536baeeb4d2381a87e27 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 15:39:17 +0400 Subject: [PATCH 111/142] gui/update_settings.cpp: disable apply settings menu item on apollo, as non-working at the moment --- src/gui/update_settings.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/update_settings.cpp b/src/gui/update_settings.cpp index 27e609283..8e59b5a62 100644 --- a/src/gui/update_settings.cpp +++ b/src/gui/update_settings.cpp @@ -114,7 +114,9 @@ int CUpdateSettings::initMenu() CMenuForwarder * fw_update_dir = new CMenuForwarder(LOCALE_EXTRA_UPDATE_DIR, true, g_settings.update_dir , this, "update_dir", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); // fw_update_dir->setHint("", LOCALE_MENU_HINT_XXX); +#ifndef BOXMODEL_APOLLO CMenuOptionChooser *apply_settings = new CMenuOptionChooser(LOCALE_FLASHUPDATE_MENU_APPLY_SETTINGS, &g_settings.apply_settings, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, OnOffNotifier); +#endif // apply_settings->setHint("", LOCALE_MENU_HINT_XXX); #if 0 CMenuOptionChooser *apply_kernel = new CMenuOptionChooser(LOCALE_FLASHUPDATE_MENU_APPLY_KERNEL, &g_settings.apply_kernel, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, g_settings.apply_settings); @@ -125,7 +127,9 @@ int CUpdateSettings::initMenu() w_upsettings.addItem(fw_update_dir); w_upsettings.addItem(fw_url); w_upsettings.addItem(GenericMenuSeparatorLine); +#ifndef BOXMODEL_APOLLO w_upsettings.addItem(apply_settings); +#endif #if 0 w_upsettings.addItem(apply_kernel); #endif From ad1a626844b58409537f890b08090faf3de4cf67 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Mon, 12 Aug 2013 15:40:40 +0400 Subject: [PATCH 112/142] driver/record.cpp: check if pcr pid is not 0 before adding to record --- src/driver/record.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/record.cpp b/src/driver/record.cpp index d6bfd4398..7b6dff7ee 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -164,7 +164,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) numpids = 0; if (allpids.PIDs.vpid != 0){ psi.addPid(allpids.PIDs.vpid, recMovieInfo->VideoType ? EN_TYPE_AVC : EN_TYPE_VIDEO, 0); - if(allpids.PIDs.pcrpid != allpids.PIDs.vpid){ + if (allpids.PIDs.pcrpid && (allpids.PIDs.pcrpid != allpids.PIDs.vpid)) { psi.addPid(allpids.PIDs.pcrpid, EN_TYPE_PCR, 0); apids[numpids++]=allpids.PIDs.pcrpid; } From 5f7792352b433c4c6b25aea7b5c8c585830455f4 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Wed, 14 Aug 2013 09:44:31 +0200 Subject: [PATCH 113/142] - moviebrowser.cpp: reduce console output at startup --- src/gui/moviebrowser.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index ba6884eb4..71db7906c 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -343,7 +343,7 @@ CMovieBrowser::CMovieBrowser(const char* path): configfile ('\t') CMovieBrowser::CMovieBrowser(): configfile ('\t') { - TRACE("$Id: moviebrowser.cpp,v 1.10 2006/09/11 21:11:35 guenther Exp $\r\n"); + //TRACE("$Id: moviebrowser.cpp,v 1.10 2006/09/11 21:11:35 guenther Exp $\r\n"); init(); } @@ -636,7 +636,6 @@ void CMovieBrowser::initFrames(void) m_cBoxFrameBrowserList.iWidth = m_cBoxFrame.iWidth; m_cBoxFrameBrowserList.iHeight = m_cBoxFrame.iHeight * m_settings.browserFrameHeight / 100; -fprintf(stderr, "m_cBoxFrame.iHeight %d m_cBoxFrameBrowserList.iHeight %d m_settings.browserFrameHeight %d\n",m_cBoxFrame.iHeight, m_cBoxFrameBrowserList.iHeight, m_settings.browserFrameHeight); m_cBoxFrameFootRel.iX = 0; m_cBoxFrameFootRel.iY = m_cBoxFrame.iHeight - m_pcFontFoot->getHeight(); m_cBoxFrameFootRel.iWidth = m_cBoxFrameBrowserList.iWidth; From 35c87ebee0200110a7db23297debcf69427685a9 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Wed, 14 Aug 2013 22:56:58 +0200 Subject: [PATCH 114/142] zapitclient: initalize all var from commandZaptoServiceID struckt --- src/zapit/include/zapit/client/msgtypes.h | 1 + src/zapit/lib/zapitclient.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/zapit/include/zapit/client/msgtypes.h b/src/zapit/include/zapit/client/msgtypes.h index 1bdaa1fd2..4321d8a53 100644 --- a/src/zapit/include/zapit/client/msgtypes.h +++ b/src/zapit/include/zapit/client/msgtypes.h @@ -191,6 +191,7 @@ class CZapitMessages bool record; bool pip; bool epg; + commandZaptoServiceID():channel_id(0),record(false),pip(false),epg(false){} }; struct commandSetAudioChannel diff --git a/src/zapit/lib/zapitclient.cpp b/src/zapit/lib/zapitclient.cpp index 28e9cf773..2db89e08a 100644 --- a/src/zapit/lib/zapitclient.cpp +++ b/src/zapit/lib/zapitclient.cpp @@ -152,6 +152,7 @@ unsigned int CZapitClient::zapTo_serviceID(const t_channel_id channel_id) msg.channel_id = channel_id; msg.record = false; msg.pip = false; + msg.epg = false; send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); @@ -225,6 +226,9 @@ unsigned int CZapitClient::zapTo_subServiceID(const t_channel_id channel_id) CZapitMessages::commandZaptoServiceID msg; msg.channel_id = channel_id; + msg.record = false; + msg.pip = false; + msg.epg = false; send(CZapitMessages::CMD_ZAPTO_SUBSERVICEID, (const char *) & msg, sizeof(msg)); @@ -242,6 +246,9 @@ void CZapitClient::zapTo_serviceID_NOWAIT(const t_channel_id channel_id) CZapitMessages::commandZaptoServiceID msg; msg.channel_id = channel_id; + msg.record = false; + msg.pip = false; + msg.epg = false; send(CZapitMessages::CMD_ZAPTO_SERVICEID_NOWAIT, (const char *) & msg, sizeof(msg)); @@ -254,6 +261,9 @@ void CZapitClient::zapTo_subServiceID_NOWAIT(const t_channel_id channel_id) CZapitMessages::commandZaptoServiceID msg; msg.channel_id = channel_id; + msg.record = false; + msg.pip = false; + msg.epg = false; send(CZapitMessages::CMD_ZAPTO_SUBSERVICEID_NOWAIT, (const char *) & msg, sizeof(msg)); From efe212413b535ea0b3c9dcab16763fc78032e91d Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 15 Aug 2013 16:25:38 +0200 Subject: [PATCH 115/142] - controlapi/yparser: detect new models tank and trinity --- src/nhttpd/tuxboxapi/coolstream/controlapi.cpp | 7 ++++++- src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index e407d85bb..960428a3c 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -623,14 +623,19 @@ void CControlAPI::HWInfoCGI(CyhookHandler *hh) boxname += "BSE"; break; case 8: - case 9: boxname += "Neo"; if (CFEManager::getInstance()->getFrontendCount() > 1) boxname += " Twin"; break; + case 9: + boxname += "Tank"; + break; case 10: boxname += "Zee"; break; + case 11: + boxname += "Trinity"; + break; default: char buffer[10]; diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index fa62bb6ad..8824c9342 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -707,14 +707,19 @@ std::string CNeutrinoYParser::func_get_boxtype(CyhookHandler *, std::string) boxname += "BSE"; break; case 8: - case 9: boxname += "Neo"; if (CFEManager::getInstance()->getFrontendCount() > 1) boxname += " Twin"; break; + case 9: + boxname += "Tank"; + break; case 10: boxname += "Zee"; break; + case 11: + boxname += "Trinity"; + break; default: char buffer[10]; From ce00efbd246b6d3257a3c47fdc947fd11c6c5bf0 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Thu, 15 Aug 2013 16:40:38 +0200 Subject: [PATCH 116/142] - yweb: add picture for tank remote control --- src/nhttpd/web/images/Makefile.am | 1 + src/nhttpd/web/images/rc_cst_v5.jpg | Bin 0 -> 78309 bytes 2 files changed, 1 insertion(+) create mode 100644 src/nhttpd/web/images/rc_cst_v5.jpg diff --git a/src/nhttpd/web/images/Makefile.am b/src/nhttpd/web/images/Makefile.am index 99ad6eaab..0b4d21667 100644 --- a/src/nhttpd/web/images/Makefile.am +++ b/src/nhttpd/web/images/Makefile.am @@ -68,6 +68,7 @@ install_DATA = accept.png \ rc_cst_v2.jpg \ rc_cst_v3.jpg \ rc_cst_v4.jpg \ + rc_cst_v5.jpg \ rc_dbox_nokia_old.jpg \ rc_dbox_philips.jpg \ record.gif \ diff --git a/src/nhttpd/web/images/rc_cst_v5.jpg b/src/nhttpd/web/images/rc_cst_v5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c4997ec18d4ba6fb9240659bf1ece6ea7c3cc6d GIT binary patch literal 78309 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 nZkkXAG|)_Gr`8@=(@(5Cuq$& Date: Thu, 15 Aug 2013 18:18:05 +0200 Subject: [PATCH 117/142] - yweb: add tank remote control --- src/nhttpd/web/Y_Blocks.txt | 70 ++++++++++++++++++++++++++++- src/nhttpd/web/Y_Settings_yWeb.yhtm | 4 +- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/nhttpd/web/Y_Blocks.txt b/src/nhttpd/web/Y_Blocks.txt index 94602f2ab..8dab68a26 100644 --- a/src/nhttpd/web/Y_Blocks.txt +++ b/src/nhttpd/web/Y_Blocks.txt @@ -508,9 +508,11 @@ start-block~remote {=if-equal:{=var-get:boxtype=}~CST Zee CABLE~ {=include-block:Y_Blocks.txt;rc_cst_v3=}~ {=if-equal:{=var-get:boxtype=}~CST Neo Twin SAT~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ {=if-equal:{=var-get:boxtype=}~CST Neo Twin CABLE~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ + {=if-equal:{=var-get:boxtype=}~CST Tank SAT~ {=include-block:Y_Blocks.txt;rc_cst_v5=}~ + {=if-equal:{=var-get:boxtype=}~CST Tank CABLE~ {=include-block:Y_Blocks.txt;rc_cst_v5=}~ {=comment:fallback~=} {=include-block:Y_Blocks.txt;rc_cst_v1=} - =}=}=}=}=}=} + =}=}=}=}=}=}=}=} =}=} ~ {=if-equal:{=var-get:yfbtype=}~-2~ {=include-block:Y_Blocks.txt;rc_dbox_philips=}~ @@ -519,9 +521,10 @@ start-block~remote {=if-equal:{=var-get:yfbtype=}~2~ {=include-block:Y_Blocks.txt;rc_cst_v2=}~ {=if-equal:{=var-get:yfbtype=}~3~ {=include-block:Y_Blocks.txt;rc_cst_v3=}~ {=if-equal:{=var-get:yfbtype=}~4~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ + {=if-equal:{=var-get:yfbtype=}~5~ {=include-block:Y_Blocks.txt;rc_cst_v5=}~ {=comment:fallback~=} {=include-block:Y_Blocks.txt;rc_cst_v1=} - =}=}=}=}=}=} + =}=}=}=}=}=}=} =} end-block~remote @@ -723,6 +726,69 @@ start-block~map_rc_cst_v3_v4 end-block~map_rc_cst_v3_v4 +# ------- Remote CST V5 (TANK) +start-block~rc_cst_v5 +remote + + standby + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + + 0 + tv/radio + + ok + up + down + left + right + + epg + menu + info + exit + + + picmode + fav + + red + green + yellow + blue + + vol+ + vol- + mute + text + page+ + page- + + + + + + audio + sat + help + + rew + play + ff + rec + pause + stop + +end-block~rc_cst_v5 + # ------- Remote d-Box Nokia old start-block~rc_dbox_nokia_old remote diff --git a/src/nhttpd/web/Y_Settings_yWeb.yhtm b/src/nhttpd/web/Y_Settings_yWeb.yhtm index 0be09d97a..17a0991e8 100644 --- a/src/nhttpd/web/Y_Settings_yWeb.yhtm +++ b/src/nhttpd/web/Y_Settings_yWeb.yhtm @@ -18,7 +18,8 @@ function do_init(){ case "1": // cst hd1/bse case "2": // cst neo case "3": // cst zee/neo2 - case "4": // cst neo twin (todo!) + case "4": // cst neo twin + case "5": // cst tank sel=(sel*1+val*1); break; default: @@ -95,6 +96,7 @@ function do_init(){ + From d1e62602424eebd6891ad72dde875803cc31aaf8 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 17 Aug 2013 13:00:07 +0200 Subject: [PATCH 118/142] src/makefile.am: Add various libraries for apollo --- src/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Makefile.am b/src/Makefile.am index ee20e753e..f73ed0665 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -114,8 +114,12 @@ if BOXTYPE_COOL neutrino_LDADD += -lcoolstream-mt -lca-sc if ENABLE_TMSDK else +if BOXMODEL_APOLLO +neutrino_LDADD += -llnxtmvssUsr -llnxUKAL -llnxplatUsr -llnxtmasUsr -llnxdvbciUsr -llnxpvrUsr -llnxcssUsr -llnxnotifyqUsr -ltmpvrDataManager -ltmpvrIndexStorage -llnxscsUsr +else neutrino_LDADD += -lnxp endif +endif bin_PROGRAMS += drivertool drivertool_SOURCES = drivertool.c From 381d25bdcd17bcb4db1ed3ffc638ee7db6373eee Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 17 Aug 2013 13:00:28 +0200 Subject: [PATCH 119/142] Fix file include in apollo libcoolstream headers --- lib/libcoolstream2/cs_api.h | 2 +- lib/libcoolstream2/video_cs.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/libcoolstream2/cs_api.h b/lib/libcoolstream2/cs_api.h index 9ae38a702..64b8180bc 100644 --- a/lib/libcoolstream2/cs_api.h +++ b/lib/libcoolstream2/cs_api.h @@ -10,7 +10,7 @@ #ifndef __CS_API_H_ #define __CS_API_H_ -#include +#include #include #include #include diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h index 931de961b..e7aba1ba8 100644 --- a/lib/libcoolstream2/video_cs.h +++ b/lib/libcoolstream2/video_cs.h @@ -9,8 +9,8 @@ #ifndef __VIDEO_CS_H_ #define __VIDEO_CS_H_ -#include -#include +#include +#include #include "cs_types.h" From 874cf44b425ce3ff2fc83ff38e06fd90d27fc5bc Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 17 Aug 2013 14:30:29 +0200 Subject: [PATCH 120/142] src/gui/scan.cpp: Fix pixel error with transponder scan. fix for 9c175234e50d1ae960d1e0c9a88c4528001b6db9 --- src/gui/scan.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index 74dae6cd3..5d4b79902 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -394,7 +394,7 @@ int CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) case NeutrinoMessages::EVT_SCAN_REPORT_FREQUENCY: freqready = 1; sprintf(buffer, "%u", data); - xpos_frequency = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(buffer, true); + xpos_frequency = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(buffer, true)+2; paintLine(xpos2, ypos_frequency, xpos_frequency, buffer); paintRadar(); break; @@ -487,7 +487,7 @@ void CScanTs::hide() void CScanTs::paintLineLocale(int px, int * py, int pwidth, const neutrino_locale_t l) { frameBuffer->paintBoxRel(px, *py, pwidth, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, *py + mheight, pwidth-2, g_Locale->getText(l), COL_MENUCONTENTINACTIVE_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, *py + mheight, pwidth, g_Locale->getText(l), COL_MENUCONTENTINACTIVE_TEXT, 0, true); // UTF-8 *py += mheight; } @@ -495,7 +495,7 @@ void CScanTs::paintLine(int px, int py, int w, const char * const txt) { //printf("CScanTs::paintLine x %d y %d w %d width %d xpos2 %d: %s\n", px, py, w, width, xpos2, txt); frameBuffer->paintBoxRel(px, py, w, mheight, COL_MENUCONTENT_PLUS_0); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, py + mheight, w-2, txt, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px+2, py + mheight, w, txt, COL_MENUCONTENT_TEXT, 0, true); // UTF-8 } void CScanTs::paint(bool fortest) @@ -514,12 +514,12 @@ void CScanTs::paint(bool fortest) if(deltype == FE_QPSK) { //sat paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTSATELLITE); - xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE), true); // UTF-8 + xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE), true)+2; // UTF-8 } if(deltype == FE_QAM) { //cable paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTCABLE); - xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTCABLE), true); // UTF-8 + xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTCABLE), true)+2; // UTF-8 } ypos_transponder = ypos; @@ -550,7 +550,7 @@ void CScanTs::paint(bool fortest) int CScanTs::greater_xpos(int xpos, const neutrino_locale_t txt) { - int txt_xpos = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(txt), true); // UTF-8 + int txt_xpos = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(txt), true)+2; // UTF-8 if (txt_xpos > xpos) return txt_xpos; else From 0cc83a6a9f8a67b962ce2d989dee7fe73da4a8f5 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 17 Aug 2013 20:02:42 +0200 Subject: [PATCH 121/142] gui/update.cpp: disable "systemFS with settings" menu item on apollo, as non-working at the moment --- src/gui/update.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 63e651dc0..ec2ad885f 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -649,8 +649,10 @@ void CFlashExpert::showMTDSelector(const std::string & actionkey) sprintf(sActionKey, "%s%d", actionkey.c_str(), lx); mtdselector->addItem(new CMenuForwarderNonLocalized(mtdInfo->getMTDName(lx).c_str(), enabled, NULL, this, sActionKey, CRCInput::convertDigitToKey(shortcut++))); } +#ifndef BOXMODEL_APOLLO if (actionkey == "writemtd") mtdselector->addItem(new CMenuForwarderNonLocalized("systemFS with settings", true, NULL, this, "writemtd10", CRCInput::convertDigitToKey(shortcut++))); +#endif mtdselector->exec(NULL,""); delete mtdselector; } From bc069b0a8458ec7feb6e368ce0b4b9df18e9eed3 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 8 Aug 2013 14:02:27 +0200 Subject: [PATCH 122/142] Softupdate: Use user-defined file names for apply settings and saving partitions from the flash. --- data/locale/deutsch.locale | 7 +++++++ data/locale/english.locale | 7 +++++++ src/gui/update.cpp | 18 +++++++++++------- src/gui/update_ext.cpp | 24 +++++++++++++++++++----- src/gui/update_ext.h | 5 +++++ src/gui/update_settings.cpp | 34 ++++++++++++++++++++++++++++++---- src/neutrino.cpp | 5 +++++ src/system/locals.h | 7 +++++++ src/system/locals_intern.h | 7 +++++++ src/system/settings.h | 2 ++ 10 files changed, 100 insertions(+), 16 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 00b6c9ca2..7715bcfc5 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -489,6 +489,13 @@ flashupdate.menu_apply_settings Settingsübernahme erlauben flashupdate.msgbox Es wurde folgendes neues File gefunden:\nDatum: %s, %s\nBasisImage: %s\nTyp: %s\n\nWollen Sie diese Version jetzt herunterladen\nund installieren? flashupdate.msgbox_manual Es wurde ein neues Image gefunden:\nDatum: %s, %s\nBasisImage: %s\nImageTyp: %s\n\nWollen Sie diese Version jetzt installieren? flashupdate.mtdselector Partitions-Auswahl +flashupdate.namemode1 Dateiname Settingsfile +flashupdate.namemode1_default +settings.img +flashupdate.namemode1_hostname_time ++settings.img +flashupdate.namemode1_orgname_time ++settings.img +flashupdate.namemode2 Dateiname Sicherung +flashupdate.namemode2_default +.img +flashupdate.namemode2_hostname_time ++.img flashupdate.new_found Updates verfügbar! flashupdate.new_notfound Keine Updates verfügbar! flashupdate.programmingflash programmiere Flash diff --git a/data/locale/english.locale b/data/locale/english.locale index e709825c8..d96bf036b 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -489,6 +489,13 @@ flashupdate.menu_apply_settings Allow apply settings flashupdate.msgbox Found the following new file:\nDate: %s, %s\nBaseImage: %s\nType: %s\n\nDo you want to download and install this version now? flashupdate.msgbox_manual Found the following new image:\nDate: %s, %s\nBaseImage: %s\nImageType: %s\n\nDo you want to install this version now? flashupdate.mtdselector Partition-Selector +flashupdate.namemode1 Filename settingsfile +flashupdate.namemode1_default +settings.img +flashupdate.namemode1_hostname_time +