diff --git a/.gitignore b/.gitignore
index bbd35a839..70c4a6ac3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,10 @@ INSTALL
*.la
.*.swp
+### editor crap
+*.rej
+*~
+
### binaries that fall out of the build
lib/sectionsdclient/sectionsdcontrol
src/neutrino
diff --git a/data/cables.xml b/data/cables.xml
index 2a3ed0c75..ce0008bf5 100644
--- a/data/cables.xml
+++ b/data/cables.xml
@@ -515,6 +515,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index b8b41539d..6d2b7b202 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -69,7 +69,6 @@ install_DATA += \
dd.png \
dd_avail.png \
dd_gray.png \
- ddfill.png \
down.png \
error.png \
features.png \
@@ -110,6 +109,7 @@ install_DATA += \
hint_reboot.png \
hint_recording.png \
hint_reload.png \
+ hint_restart.png \
hint_save.png \
hint_scan.png \
hint_scripts.png \
@@ -162,6 +162,7 @@ install_DATA += \
mp3-5.jpg \
mp3-6.jpg \
mp3-7.jpg \
+ multimedia.png \
mute.png \
mute_small.png \
mute_zap_gray.png \
diff --git a/data/icons/ddfill.png b/data/icons/ddfill.png
deleted file mode 100644
index 88e3fc272..000000000
Binary files a/data/icons/ddfill.png and /dev/null differ
diff --git a/data/icons/hint_restart.png b/data/icons/hint_restart.png
new file mode 100644
index 000000000..2ac75bd1b
Binary files /dev/null and b/data/icons/hint_restart.png differ
diff --git a/data/icons/multimedia.png b/data/icons/multimedia.png
new file mode 100644
index 000000000..72ea0c77c
Binary files /dev/null and b/data/icons/multimedia.png differ
diff --git a/data/icons/radio.jpg b/data/icons/radio.jpg
deleted file mode 100644
index 4a9072c53..000000000
Binary files a/data/icons/radio.jpg and /dev/null differ
diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale
index 2af2a5e7f..54e51f09d 100644
--- a/data/locale/deutsch.locale
+++ b/data/locale/deutsch.locale
@@ -200,6 +200,10 @@ bouquetname.new Neue Kanäle
bouquetname.other Unbekannter Provider
bouquetname.removed Gelöschte Kanäle
cablesetup.provider Kabelanbieter
+channellist.additional Zusatzinformationen
+channellist.additional_off aus
+channellist.additional_on ein
+channellist.additional_on_minitv ein (mit MiniTV)
channellist.current_tp Aktueller Transponder
channellist.edit Bearbeiten
channellist.epgtext_align_left links
@@ -221,6 +225,9 @@ channellist.make_hdlist Erzeuge Bouquet mit HD-Kanälen
channellist.make_newlist Erzeuge Bouquet mit neuen Kanälen
channellist.make_removedlist Erzeuge Bouquet mit gelöschten Kanälen
channellist.new_zap_mode Quickzap in Liste
+channellist.new_zap_mode_active aktiv
+channellist.new_zap_mode_allow erlauben
+channellist.new_zap_mode_off aus
channellist.nonefound Es wurden keine Kanäle gefunden!\nFühren Sie bitte eine Kanalsuche durch\n(MENU-Taste -> Service)
channellist.provs Anbieter
channellist.recording_not_possible Aufnahme nicht möglich!
@@ -516,6 +523,7 @@ fontmenu.sizes Schriftgrössen
fontsize.channel_num_zap Direktauswahl
fontsize.channellist Kanalliste
fontsize.channellist_descr Beschreibung
+fontsize.channellist_event Eventliste
fontsize.channellist_number Nummer
fontsize.epg_date EPG Datum
fontsize.epg_info1 EPG Info 1
@@ -733,6 +741,7 @@ menu.hint_cache_txt Startet das Zwischenspeichern des Teletext nach\nKanalwechse
menu.hint_cec_mode CEC-Modus
menu.hint_cec_standby CEC-Standby
menu.hint_cec_view_on CEC view ON
+menu.hint_channellist_additional Definiert, ob zusätzliche Informationen im Hauptfenster angezeigt werden sollen
menu.hint_channellist_colored Definiert ob die aktuelle oder nächste Sendung in einer anderen Farbe dargestellt werden soll
menu.hint_channellist_epg_align Hier kann man festlegen, wie der Text für das EPG in der Liste\nrechts vom Programmnamen ausgerichtet wird
menu.hint_channellist_extended Bei aktivierter Funktion wird vor dem Sendernamen ein Balken eingeblendet,\nder den Sendungsfortschritt anzeigt
@@ -794,6 +803,7 @@ menu.hint_infobar_fonts Ändern Sie in der Infobar die Schriftgrößen
menu.hint_infobar_logo Logo- und Signal-Optionen
menu.hint_infobar_logo_dir Hier wählen Sie das Verzeichnis für die Senderlogos
menu.hint_infobar_on_epg Zeigt einen Hinweis bei EPG-Änderungen
+menu.hint_infobar_progressbar Wählt die Optionen des Fortschrittsbalken in der Infobar
menu.hint_infobar_radiotext Zeigt Radiotext in einen Fenster, wenn verfügbar
menu.hint_infobar_res Zeige die gesendete Auflösung in Symbolen
menu.hint_infobar_sat Zeigt die aktuellen Satelliten- oder Kabel-Provider
@@ -1123,6 +1133,11 @@ miscsettings.infobar_disp_5 Logo/Signalbalken
miscsettings.infobar_disp_6 Logo+Kanalnummer/Signalbalken
miscsettings.infobar_disp_log Logo
miscsettings.infobar_logo_hdd_dir Logo Verz.
+miscsettings.infobar_progressbar Fortschrittsbalken Opt.
+miscsettings.infobar_progressbar_0 Standard
+miscsettings.infobar_progressbar_1 unterhalb Kanalname
+miscsettings.infobar_progressbar_2 unterhalb Kanalname schmal
+miscsettings.infobar_progressbar_3 zwischen EPG-Events schmal
miscsettings.infobar_sat_display Kabel-/Satellitenanbieter
miscsettings.infobar_show Info bei EPG Änderungen
miscsettings.infobar_show_dd_available DD-Verfügbarkeit anzeigen
diff --git a/data/locale/english.locale b/data/locale/english.locale
index 7534161c2..bb4531ad6 100644
--- a/data/locale/english.locale
+++ b/data/locale/english.locale
@@ -200,6 +200,10 @@ bouquetname.new New channels
bouquetname.other Unknown provider
bouquetname.removed Removed channels
cablesetup.provider cable provider
+channellist.additional Additional informations
+channellist.additional_off off
+channellist.additional_on on
+channellist.additional_on_minitv on (with MiniTV)
channellist.current_tp Current transponder
channellist.edit Edit
channellist.epgtext_align_left left
@@ -221,6 +225,9 @@ channellist.make_hdlist Create list of HD channels
channellist.make_newlist Create list of new channels
channellist.make_removedlist Create list of removed channels
channellist.new_zap_mode Quickzap in list
+channellist.new_zap_mode_active active
+channellist.new_zap_mode_allow allow
+channellist.new_zap_mode_off off
channellist.nonefound No channels were found!\nPlease execute a scan\n(MENU-key -> service)
channellist.provs Providers
channellist.recording_not_possible Recording not possible!
@@ -516,12 +523,13 @@ fontmenu.sizes Font sizes
fontsize.channel_num_zap direct selection
fontsize.channellist Channellist
fontsize.channellist_descr Description
+fontsize.channellist_event Event list
fontsize.channellist_number Number
fontsize.epg_date EPG Date
fontsize.epg_info1 EPG Info 1
fontsize.epg_info2 EPG Info 2
fontsize.epg_title EPG Title
-fontsize.eventlist_datetime Date / Dime
+fontsize.eventlist_datetime Date / Time
fontsize.eventlist_itemlarge Large
fontsize.eventlist_itemsmall Small
fontsize.eventlist_title Title
@@ -733,6 +741,7 @@ menu.hint_cache_txt Start teletext caching after channel switch
menu.hint_cec_mode CEC mode
menu.hint_cec_standby CEC standby
menu.hint_cec_view_on CEC view ON
+menu.hint_channellist_additional Show additional informations\nin main box
menu.hint_channellist_colored Use different color for current or next event
menu.hint_channellist_epg_align EPG event align
menu.hint_channellist_extended Show current event progress bar
@@ -794,6 +803,7 @@ menu.hint_infobar_fonts Change infobar font sizes
menu.hint_infobar_logo Logo / signal options
menu.hint_infobar_logo_dir Select directory to search for channels logo
menu.hint_infobar_on_epg Show infobar on current EPG event change
+menu.hint_infobar_progressbar Selects the options of Progressbar in the Infobar
menu.hint_infobar_radiotext Show radiotext window
menu.hint_infobar_res Show channel resolution icons
menu.hint_infobar_sat Show current satellite or cable provider
@@ -1123,6 +1133,11 @@ miscsettings.infobar_disp_5 Logo+signal
miscsettings.infobar_disp_6 Logo+channel number+signal
miscsettings.infobar_disp_log Logo
miscsettings.infobar_logo_hdd_dir Logo dir
+miscsettings.infobar_progressbar progressbar options
+miscsettings.infobar_progressbar_0 standard
+miscsettings.infobar_progressbar_1 below channel name
+miscsettings.infobar_progressbar_2 small below channel name
+miscsettings.infobar_progressbar_3 narrow between EPG-Events
miscsettings.infobar_sat_display Satellite display on infobar
miscsettings.infobar_show show Info on EPG change
miscsettings.infobar_show_dd_available show DD availability
diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp
index 3344aa424..623279768 100644
--- a/src/eitd/sectionsd.cpp
+++ b/src/eitd/sectionsd.cpp
@@ -1379,8 +1379,10 @@ void CTimeThread::run()
if(!scanning)
sleep_time = 0;
real_pause();
+#ifndef DEBUG_TIME_THREAD
+ Sleep();
+#else
int rs = Sleep();
-#ifdef DEBUG_TIME_THREAD
xprintf("%s: wakeup, running %d scanning %d channel %" PRIx64 " reason %d\n",
name.c_str(), running, scanning, current_service, rs);
#endif
@@ -1572,8 +1574,19 @@ bool CEventsThread::addEvents()
for (SIevents::const_iterator e = eit.events().begin(); e != eit.events().end(); ++e) {
if (!(e->times.empty())) {
+#if 0
if ( ( e->times.begin()->startzeit < zeit + secondsToCache ) &&
- ( ( e->times.begin()->startzeit + (long)e->times.begin()->dauer ) > zeit - oldEventsAre ) )
+ ( ( e->times.begin()->startzeit + (long)e->times.begin()->dauer ) > zeit - oldEventsAre ) &&
+ ( e->times.begin()->dauer < 60 ) ) {
+ char x_startTime[10];
+ struct tm *x_tmStartTime = localtime(&e->times.begin()->startzeit);
+ strftime(x_startTime, sizeof(x_startTime)-1, "%H:%M", x_tmStartTime );
+ printf("####[%s - #%d] - startzeit: %s, dauer: %d, channel_id: 0x%llX\n", __FUNCTION__, __LINE__, x_startTime, e->times.begin()->dauer, e->get_channel_id());
+ }
+#endif
+ if ( ( e->times.begin()->startzeit < zeit + secondsToCache ) &&
+ ( ( e->times.begin()->startzeit + (long)e->times.begin()->dauer ) > zeit - oldEventsAre ) &&
+ ( e->times.begin()->dauer > 1 ) )
{
addEvent(*e, wait_for_time ? zeit: 0, e->table_id == 0x4e);
event_count++;
diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp
index 8d48c12ab..268146208 100644
--- a/src/gui/audioplayer.cpp
+++ b/src/gui/audioplayer.cpp
@@ -275,7 +275,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey)
m_current = 0;
m_selected = 0;
- m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - ConnectLineBox_Width - 5;
+ m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - 2*ConnectLineBox_Width - 5;
m_height = (g_settings.screen_EndY - g_settings.screen_StartY - 5);
m_sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight();
@@ -293,7 +293,9 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey)
m_listmaxshow = (m_height - m_info_height - m_title_height - m_theight - 2*m_buttonHeight) / (m_fheight);
m_height = m_theight + m_info_height + m_title_height + 2*m_buttonHeight + m_listmaxshow * m_fheight; // recalc height
- m_x = getScreenStartX( m_width + ConnectLineBox_Width ) + ConnectLineBox_Width;
+ m_x = getScreenStartX( m_width );
+ if (m_x < ConnectLineBox_Width)
+ m_x = ConnectLineBox_Width;
m_y = getScreenStartY( m_height );
m_idletime=time(NULL);
@@ -360,6 +362,9 @@ int CAudioPlayerGui::show()
int ret = menu_return::RETURN_REPAINT;
+ // clear whole screen
+ m_frameBuffer->paintBackground();
+
CVFD::getInstance()->setMode(CVFD::MODE_AUDIO);
paintLCD();
@@ -420,8 +425,6 @@ int CAudioPlayerGui::show()
videoDecoder->ShowPicture(fname);
} else if (pic_index) {
pic_index = 0;
- videoDecoder->StopPicture();
- videoDecoder->ShowPicture(DATADIR "/neutrino/icons/mp3.jpg");
}
} else
pic_index = 0;
@@ -434,6 +437,11 @@ int CAudioPlayerGui::show()
if (m_screensaver)
{
screensaver(false);
+ if (msg < CRCInput::RC_MaxRC) {
+ // ignore first keypress - just quit the screensaver
+ g_RCInput->clearRCMsg();
+ continue;
+ }
}
}
@@ -895,9 +903,6 @@ int CAudioPlayerGui::show()
ret = menu_return::RETURN_EXIT_ALL;
loop = false;
}
- // update mute icon
- //paintHead();
- //paintLCD();
}
m_frameBuffer->blit();
}
@@ -1592,6 +1597,7 @@ void CAudioPlayerGui::paintItem(int pos)
c_rad_small = 0;
}
+ m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, COL_MENUCONTENT_PLUS_0);
m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, bgcolor, c_rad_small);
if ((pos + m_liststart) < m_playlist.size())
@@ -1666,20 +1672,6 @@ void CAudioPlayerGui::paintHead()
xpos -= (iw + 10);
}
//m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, m_x + m_width - 30, ypos);
-#endif
-#if 1
- if ( CNeutrinoApp::getInstance()->isMuted() )
- {
-#if 0
- int xpos = m_x + m_width - 75;
- ypos = m_y + m_title_height;
- if (m_theight > 32)
- ypos = (m_theight - 32) / 2 + m_y + m_title_height;
- m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MUTE, xpos, ypos);
-#endif
- m_frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE, &iw, &ih);
- m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MUTE, xpos - iw, ypos, m_theight);
- }
#endif
m_frameBuffer->blit();
}
@@ -1734,7 +1726,9 @@ const struct button_label AudioPlayerButtons[][4] =
void CAudioPlayerGui::paintFoot()
{
- // printf("paintFoot{\n");
+ if (m_screensaver)
+ return;
+
const struct button_label ScondLineButtons[3] =
{
{ NEUTRINO_ICON_BUTTON_OKAY , LOCALE_AUDIOPLAYER_PLAY },
@@ -1750,8 +1744,8 @@ const struct button_label ScondLineButtons[3] =
top = m_y + (m_height - 2 * m_buttonHeight);
//int ButtonWidth2 = (m_width - 50) / 2;
- m_frameBuffer->paintBoxRel(m_x, top, m_width, 2 * m_buttonHeight, COL_INFOBAR_SHADOW_PLUS_1, c_rad_mid, CORNER_BOTTOM);
- m_frameBuffer->paintHLine(m_x, m_x + m_width, top, COL_INFOBAR_SHADOW_PLUS_1);
+ m_frameBuffer->paintBoxRel(m_x, top, m_width, 2 * m_buttonHeight, COL_INFOBAR_SHADOW_PLUS_1, c_rad_mid, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL));
+ // why? m_frameBuffer->paintHLine(m_x, m_x + m_width, top, COL_INFOBAR_SHADOW_PLUS_1);
if (!m_playlist.empty())
::paintButtons(m_x, top+m_buttonHeight, m_width, 3, ScondLineButtons, m_width, m_buttonHeight);
@@ -1799,6 +1793,9 @@ const struct button_label ScondLineButtons[3] =
//------------------------------------------------------------------------
void CAudioPlayerGui::paintInfo()
{
+ if (m_screensaver)
+ return;
+
int c_rad_mid = RADIUS_MID;
if (m_state == CAudioPlayerGui::STOP && m_show_playlist)
m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width, m_title_height);
@@ -1896,8 +1893,8 @@ void CAudioPlayerGui::paint()
m_frameBuffer->paintBoxRel(m_x + m_width - 13, ypos + 2 + sbs*(sb-4)/sbc , 11, (sb-4)/sbc, COL_MENUCONTENT_PLUS_3, RADIUS_SMALL);
}
- paintFoot();
paintInfo();
+ paintFoot();
m_frameBuffer->blit();
m_visible = true;
@@ -2115,11 +2112,9 @@ void CAudioPlayerGui::play(unsigned int pos)
//LCD
paintLCD();
// Display
- if (!m_screensaver)
- paintInfo();
+ paintInfo();
m_key_level = 1;
- if (!m_screensaver)
- paintFoot();
+ paintFoot();
}
}
//------------------------------------------------------------------------
@@ -2338,11 +2333,8 @@ void CAudioPlayerGui::screensaver(bool on)
{
g_RCInput->killTimer(stimer);
m_screensaver = false;
-#if 0
- m_frameBuffer->loadPal("radiomode.pal", 18, COL_MAXFREE);
- m_frameBuffer->useBackground(m_frameBuffer->loadBackground(NEUTRINO_ICON_RADIOMODE));// set useBackground true or false
- m_frameBuffer->paintBackground();
-#endif
+ videoDecoder->StopPicture();
+ videoDecoder->ShowPicture(DATADIR "/neutrino/icons/mp3.jpg");
paint();
m_idletime = time(NULL);
}
diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h
index 8f9d4bdfc..74284ed4a 100644
--- a/src/gui/audioplayer.h
+++ b/src/gui/audioplayer.h
@@ -260,7 +260,7 @@ class CAudioPlayerGui : public CMenuTarget
void stop();
bool playNext(bool allow_rotate = false);
bool playPrev(bool allow_rotate = false);
- int getAdioPayerM_currend() {return m_current;}
+ int getAudioPlayerM_current() {return m_current;}
};
diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp
index 00eae9237..cf10dc85f 100644
--- a/src/gui/channellist.cpp
+++ b/src/gui/channellist.cpp
@@ -73,6 +73,8 @@
#include
+#include
+
extern CBouquetList * bouquetList; /* neutrino.cpp */
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
extern CPictureViewer * g_PicViewer;
@@ -90,7 +92,11 @@ extern bool autoshift;
extern CBouquetManager *g_bouquetManager;
extern int old_b_id;
-CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist, bool )
+extern cVideo * videoDecoder;
+
+#define ConnectLineBox_Width 16
+
+CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist)
{
frameBuffer = CFrameBuffer::getInstance();
name = pName;
@@ -101,9 +107,11 @@ CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vl
zapProtection = NULL;
this->historyMode = phistoryMode;
vlist = _vlist;
+ new_zap_mode = 0;
selected_chid = 0;
- this->new_mode_active = false;
footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //initial height value for buttonbar
+ previous_channellist_additional = -1;
+ eventFont = SNeutrinoSettings::FONT_TYPE_CHANNELLIST_EVENT;
//printf("************ NEW LIST %s : %x\n", name.c_str(), (int) this);fflush(stdout);
}
@@ -298,6 +306,7 @@ int CChannelList::doChannelMenu(void)
{
int i = 0;
int select = -1;
+ int shortcut = 0;
static int old_selected = 0;
char cnt[5];
bool enabled = true;
@@ -335,9 +344,10 @@ int CChannelList::doChannelMenu(void)
menu->addItem(new CMenuForwarder(LOCALE_FAVORITES_MENUEADD, unlocked, NULL, selector, cnt, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE), old_selected == i++);
snprintf(cnt, sizeof(cnt), "%d", i);
bool reset_enabled = chanlist[selected]->flags & CZapitChannel::NEW;
- menu->addItem(new CMenuForwarder(LOCALE_CHANNELLIST_RESET_FLAGS, reset_enabled, NULL, selector, cnt, CRCInput::convertDigitToKey(0)), old_selected == i++);
+ menu->addItem(new CMenuForwarder(LOCALE_CHANNELLIST_RESET_FLAGS, reset_enabled, NULL, selector, cnt, CRCInput::convertDigitToKey(shortcut++)), old_selected == i++);
snprintf(cnt, sizeof(cnt), "%d", i);
- menu->addItem(new CMenuForwarder(LOCALE_MAINMENU_SETTINGS, true, NULL, selector, cnt, CRCInput::convertDigitToKey(0)), old_selected == i++);
+ menu->addItem(new CMenuSeparator(CMenuSeparator::LINE));
+ menu->addItem(new CMenuForwarder(LOCALE_MAINMENU_SETTINGS, true, NULL, selector, cnt, CRCInput::convertDigitToKey(shortcut++)), old_selected == i++);
menu->exec(NULL, "");
delete menu;
delete selector;
@@ -433,6 +443,7 @@ int CChannelList::doChannelMenu(void)
break;
case 5: // settings
{
+ previous_channellist_additional = g_settings.channellist_additional;
COsdSetup osd_setup;
osd_setup.showContextChanlistMenu();
//FIXME check font/options changed ?
@@ -450,6 +461,7 @@ int CChannelList::doChannelMenu(void)
int CChannelList::exec()
{
displayNext = 0; // always start with current events
+ displayList = 1; // always start with event list
int nNewChannel = show();
if ( nNewChannel > -1 && nNewChannel < (int) chanlist.size()) {
if(this->historyMode && chanlist[nNewChannel]) {
@@ -466,9 +478,19 @@ int CChannelList::exec()
void CChannelList::calcSize()
{
const int pic_h = 39;
- int fw = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getWidth();
- width = w_max (((g_settings.channellist_extended)?(frameBuffer->getScreenWidth() / 20 * (fw+6)):(frameBuffer->getScreenWidth() / 20 * (fw+5))), 100);
- height = h_max ((frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20 * 2));
+
+ full_width = frameBuffer->getScreenWidth() - frameBuffer->getScreenX() - 2*ConnectLineBox_Width;
+ if (g_settings.channellist_additional)
+ width = full_width / 3 * 2;
+ else
+ width = full_width;
+
+ height = h_max ((frameBuffer->getScreenHeight() / 20 * 17), 0);
+
+ x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - full_width) / 2;
+ if (x < ConnectLineBox_Width)
+ x = ConnectLineBox_Width;
+ y = frameBuffer->getScreenY();
CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, name.c_str());
@@ -486,7 +508,7 @@ void CChannelList::calcSize()
frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &icol_w, &icol_h);
theight = std::max(theight, icol_h);
- if(g_settings.channellist_new_zap_mode)
+ if(new_zap_mode)
{
frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, &icol_w, &icol_h);
theight = std::max(theight, icol_h);
@@ -499,9 +521,15 @@ void CChannelList::calcSize()
listmaxshow = (height - theight - footerHeight -0)/fheight;
height = theight + footerHeight + listmaxshow * fheight;
info_height = 2*fheight + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 10;
+ y += (frameBuffer->getScreenHeight() - height - info_height) / 2;
- x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2;
- y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - (height+ info_height)) / 2;
+ infozone_width = full_width - width;
+ pig_width = infozone_width;
+ if (g_settings.channellist_additional == 2) // with miniTV
+ pig_height = (pig_width * 9) / 16;
+ else
+ pig_height = 0;
+ infozone_height = height - theight - pig_height - footerHeight;
}
bool CChannelList::updateSelection(int newpos)
@@ -521,7 +549,7 @@ bool CChannelList::updateSelection(int newpos)
showChannelLogo();
}
- if(this->new_mode_active && SameTP()) {
+ if((new_zap_mode == 2 /* active */) && SameTP()) {
actzap = true;
zapTo(selected);
}
@@ -545,7 +573,7 @@ int CChannelList::show()
return res;
}
- this->new_mode_active = 0;
+ new_zap_mode = g_settings.channellist_new_zap_mode;
calcSize();
displayNext = false;
@@ -677,6 +705,7 @@ int CChannelList::show()
}
else if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup)
{
+ displayList = 1;
int step = ((int) msg == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1
int new_selected = selected - step;
if (new_selected < 0) {
@@ -689,6 +718,7 @@ int CChannelList::show()
}
else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown)
{
+ displayList = 1;
int step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1
int new_selected = selected + step;
if (new_selected >= (int) chanlist.size()) {
@@ -751,9 +781,19 @@ int CChannelList::show()
loop=false;
}
}
- else if (( msg == CRCInput::RC_spkr ) && g_settings.channellist_new_zap_mode ) {
+ else if (( msg == CRCInput::RC_spkr ) && new_zap_mode ) {
if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_ts) {
- this->new_mode_active = (this->new_mode_active ? 0 : 1);
+ switch (new_zap_mode) {
+ case 2: /* active */
+ new_zap_mode = 1; /* allow */
+ break;
+ case 1: /* allow */
+ new_zap_mode = 2; /* active */
+ break;
+ default:
+ break;
+
+ }
paintHead();
showChannelLogo();
}
@@ -819,9 +859,16 @@ int CChannelList::show()
}
else if ( msg == CRCInput::RC_blue )
{
- displayNext = !displayNext;
+ if (g_settings.channellist_additional)
+ displayList = !displayList;
+ else
+ displayNext = !displayNext;
+
paintHead(); // update button bar
paint();
+
+ if (!displayList && g_settings.channellist_additional)
+ showdescription(selected);
}
else if ( msg == CRCInput::RC_green )
{
@@ -862,6 +909,10 @@ int CChannelList::show()
}
frameBuffer->blit();
}
+ if (g_settings.channellist_new_zap_mode != new_zap_mode)
+ g_settings.channellist_new_zap_mode = new_zap_mode;
+ new_zap_mode = 0;
+
hide();
fader.Stop();
@@ -870,7 +921,6 @@ int CChannelList::show()
res = bouquetList->exec(true);
printf("CChannelList:: bouquetList->exec res %d\n", res);
}
- this->new_mode_active = 0;
if(NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode())
return -1;
@@ -886,7 +936,11 @@ int CChannelList::show()
void CChannelList::hide()
{
- frameBuffer->paintBackgroundBoxRel(x, y, width, height+ info_height+ 5);
+ if ((g_settings.channellist_additional == 2) || (previous_channellist_additional == 2)) // with miniTV
+ {
+ videoDecoder->Pig(-1, -1, -1, -1);
+ }
+ frameBuffer->paintBackgroundBoxRel(x, y, full_width, height+ info_height+ 5);
clearItem2DetailsLine();
frameBuffer->blit();
}
@@ -1118,7 +1172,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */)
zapToChannel(chan);
tuned = pos;
- if(this->new_mode_active)
+ if(new_zap_mode == 2 /* active */)
selected_in_new_mode = pos;
else
selected = pos;
@@ -1154,7 +1208,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel)
g_RemoteControl->zapTo_ChannelID(selected_chid, channel->getName(), (channel->bAlwaysLocked == g_settings.parentallock_defaultlocked));
CNeutrinoApp::getInstance()->channelList->adjustToChannelID(channel->getChannelID());
}
- if(!this->new_mode_active) {
+ if(new_zap_mode != 2 /* not active */) {
/* remove recordModeActive from infobar */
if(g_settings.auto_timeshift && !CNeutrinoApp::getInstance()->recordingstatus) {
g_InfoViewer->handleMsg(NeutrinoMessages::EVT_RECORDMODE, 0);
@@ -1477,7 +1531,7 @@ void CChannelList::paintDetails(int index)
p_event = &chanlist[index]->currentEvent;
}
- frameBuffer->paintBoxRel(x+2, y + height + 2, width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);//round
+ frameBuffer->paintBoxRel(x+2, y + height + 2, full_width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);//round
if (!p_event->description.empty()) {
char cNoch[50] = {0}; // UTF-8
@@ -1501,7 +1555,7 @@ void CChannelList::paintDetails(int index)
std::string text2= p_event->text;
int xstart = 10;
- if (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text1, true) > (width - 30 - seit_len) )
+ if (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text1, true) > (full_width - 30 - seit_len) )
{
// zu breit, Umbruch versuchen...
int pos;
@@ -1509,7 +1563,7 @@ void CChannelList::paintDetails(int index)
pos = text1.find_last_of("[ -.]+");
if ( pos!=-1 )
text1 = text1.substr( 0, pos );
- } while ( ( pos != -1 ) && (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text1, true) > (width - 30 - seit_len) ) );
+ } while ( ( pos != -1 ) && (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text1, true) > (full_width - 30 - seit_len) ) );
std::string text3 = ""; /* not perfect, but better than crashing... */
if (p_event->description.length() > text1.length())
@@ -1519,7 +1573,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, 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_CHANNELLIST : COL_MENUCONTENTDARK, 0, true);
}
if (!(text2.empty())) {
@@ -1528,7 +1582,7 @@ void CChannelList::paintDetails(int index)
text2 = text2.substr( 0, text2.find('\n') );
#if 0 //FIXME: to discuss, eat too much cpu time if string long enough
int pos = 0;
- while ( ( pos != -1 ) && (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text2, true) > (width - 30 - noch_len) ) ) {
+ while ( ( pos != -1 ) && (g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getRenderWidth(text2, true) > (full_width - 30 - noch_len) ) ) {
pos = text2.find_last_of(" ");
if ( pos!=-1 ) {
@@ -1536,12 +1590,12 @@ void CChannelList::paintDetails(int index)
}
}
#endif
- g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->RenderString(x+ xstart, y+ height+ 5+ 2* fheight, 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+ 2* 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]->RenderString(x+ 10, y+ height+ 5+ fheight, 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+ 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+ width- 10- noch_len, y+ height+ 5+ 2* 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_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+ 2* fheight, noch_len, cNoch, colored_event_C ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); // UTF-8
}
if(g_settings.channellist_foot == 0) {
transponder t;
@@ -1553,7 +1607,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+ 3*fheight, width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
+ g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x+ 10, y+ height+ 5+ 3*fheight, full_width - 30, desc.c_str(), COL_MENUCONTENTDARK, 0, true);
}
else if( !displayNext && g_settings.channellist_foot == 1) { // next Event
char buf[128] = {0};
@@ -1566,10 +1620,12 @@ 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+ 3*fheight, 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+ width- 10- from_len, y+ height+ 5+ 3*fheight, 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+ 3*fheight, 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+ 3*fheight, from_len, cFrom, colored_event_N ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTDARK, 0, true); // UTF-8
}
}
+ if ((g_settings.channellist_additional) && (p_event != NULL))
+ paint_events(index);
}
void CChannelList::clearItem2DetailsLine()
@@ -1579,15 +1635,12 @@ void CChannelList::clearItem2DetailsLine()
void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/)
{
-#define ConnectLineBox_Width 16
-
int xpos = x - ConnectLineBox_Width;
int ypos1 = y + theight+0 + pos*fheight;
int ypos2 = y + height;
int ypos1a = ypos1 + (fheight/2)-2;
int ypos2a = ypos2 + (info_height/2)-2;
fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6;
-
// Clear
frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height + 1);
@@ -1600,7 +1653,7 @@ void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/)
details_line.paint();
//info box frame
- frameBuffer->paintBoxFrame(x, ypos2, width, info_height, 2, col1, RADIUS_LARGE);
+ frameBuffer->paintBoxFrame(x, ypos2, full_width, info_height, 2, col1, RADIUS_LARGE);
}
}
}
@@ -1610,14 +1663,14 @@ void CChannelList::showChannelLogo()
if(g_settings.infobar_show_channellogo){
static int logo_w = 0;
static int logo_h = 0;
- int logo_w_max = width / 4;
- frameBuffer->paintBoxRel(x + width - logo_off - logo_w, y+(theight-logo_h)/2, logo_w, logo_h, COL_MENUHEAD_PLUS_0);
+ int logo_w_max = full_width / 4;
+ frameBuffer->paintBoxRel(x + full_width - logo_off - logo_w, y+(theight-logo_h)/2, logo_w, logo_h, COL_MENUHEAD_PLUS_0);
std::string lname;
if(g_PicViewer->GetLogoName(chanlist[selected]->channel_id, chanlist[selected]->getName(), lname, &logo_w, &logo_h)) {
if((logo_h > theight) || (logo_w > logo_w_max))
g_PicViewer->rescaleImageDimensions(&logo_w, &logo_h, logo_w_max, theight);
- g_PicViewer->DisplayImage(lname, x + width - logo_off - logo_w, y+(theight-logo_h)/2, logo_w, logo_h);
+ g_PicViewer->DisplayImage(lname, x + full_width - logo_off - logo_w, y+(theight-logo_h)/2, logo_w, logo_h);
}
}
}
@@ -1662,10 +1715,20 @@ void CChannelList::paintButtonBar(bool is_current)
int Bindex = 2 + (smode ? 1:0);
//manage now/next button
- if (displayNext)
- Button[Bindex].locale = LOCALE_INFOVIEWER_NOW;
+ if (g_settings.channellist_additional)
+ {
+ if (displayList)
+ Button[Bindex].locale = LOCALE_FONTSIZE_CHANNELLIST_DESCR;
+ else
+ Button[Bindex].locale = LOCALE_FONTMENU_EVENTLIST;
+ }
else
- Button[Bindex].locale = LOCALE_INFOVIEWER_NEXT;
+ {
+ if (displayNext)
+ Button[Bindex].locale = LOCALE_INFOVIEWER_NOW;
+ else
+ Button[Bindex].locale = LOCALE_INFOVIEWER_NEXT;
+ }
Bindex++;
//manage record button
@@ -1707,9 +1770,9 @@ void CChannelList::paintButtonBar(bool is_current)
//paint buttons
int y_foot = y + (height - footerHeight);
#if 0
- ::paintButtons(x, y_foot, width,num_buttons, Button, footerHeight,0,false,COL_INFOBAR_SHADOW,NULL,0,true, buttonID_rest);
+ ::paintButtons(x, y_foot, full_width,num_buttons, Button, footerHeight,0,false,COL_INFOBAR_SHADOW,NULL,0,true, buttonID_rest);
#endif
- ::paintButtons(x, y_foot, width, num_buttons, Button, width, footerHeight);
+ ::paintButtons(x, y_foot, full_width, num_buttons, Button, full_width, footerHeight);
}
void CChannelList::paintItem(int pos)
@@ -1947,31 +2010,31 @@ void CChannelList::paintHead()
int iw1, iw2, iw3, ih = 0;
frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_INFO, &iw1, &ih);
frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &iw2, &ih);
- if (g_settings.channellist_new_zap_mode)
+ if (new_zap_mode)
frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, &iw3, &ih);
// head
- frameBuffer->paintBoxRel(x,y, width,theight+0, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round
+ frameBuffer->paintBoxRel(x,y, full_width,theight+0, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round
- frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x + width - iw1 - 4, y, theight); //y+ 5 );
- frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, x + width - iw1 - iw2 - 8, y, theight);//y + 5); // icon for bouquet list button
- if (g_settings.channellist_new_zap_mode)
- frameBuffer->paintIcon(this->new_mode_active ?
+ frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x + full_width - iw1 - 10, y, theight); //y+ 5 );
+ frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, x + full_width - iw1 - iw2 - 14, y, theight);//y + 5); // icon for bouquet list button
+ if (new_zap_mode)
+ frameBuffer->paintIcon((new_zap_mode == 2 /* active */) ?
NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE : NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE,
- x + width - iw1 - iw2 - iw3 - 12, y, theight);
+ x + full_width - iw1 - iw2 - iw3 - 18, y, theight);
if (gotTime) {
- int iw3x = (g_settings.channellist_new_zap_mode) ? iw3 : -4;
- g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x + width - iw1 - iw2 - iw3x - 16 -timestr_len,
+ int iw3x = (new_zap_mode) ? iw3 : -10;
+ g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x + full_width - iw1 - iw2 - iw3x - 28 -timestr_len,
y+theight, timestr_len, timestr, COL_MENUHEAD, 0, true); // UTF-8
timestr_len += 4;
}
timestr_len += iw1 + iw2 + 12;
- if (g_settings.channellist_new_zap_mode)
- timestr_len += iw3 + 4;
- logo_off = timestr_len + 4;
- g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, width - timestr_len, name, COL_MENUHEAD, 0, true); // UTF-8
+ if (new_zap_mode)
+ timestr_len += iw3 + 10;
+ logo_off = timestr_len + 10;
+ g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, full_width - timestr_len, name, COL_MENUHEAD, 0, true); // UTF-8
}
void CChannelList::paint()
@@ -1981,7 +2044,12 @@ void CChannelList::paint()
liststart = (selected/listmaxshow)*listmaxshow;
updateEvents(this->historyMode ? 0:liststart, this->historyMode ? 0:(liststart + listmaxshow));
- frameBuffer->paintBoxRel(x, y+theight, width, height-footerHeight-theight, COL_MENUCONTENT_PLUS_0, 0, CORNER_BOTTOM);
+ // paint background for main box
+ frameBuffer->paintBoxRel(x, y+theight, width, height-footerHeight-theight, COL_MENUCONTENT_PLUS_0);
+ if (g_settings.channellist_additional)
+ // paint background for right box
+ frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,pig_height+infozone_height,COL_MENUCONTENT_PLUS_0);
+
for(unsigned int count = 0; count < listmaxshow; count++) {
paintItem(count);
}
@@ -1994,6 +2062,19 @@ 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(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);
+ }
+ }
}
bool CChannelList::isEmpty() const
@@ -2059,3 +2140,182 @@ std::string CChannelList::MaxChanNr()
ss >> maxchansize;
return maxchansize;
}
+
+void CChannelList::paint_pig (int _x, int _y, int w, int h)
+{
+ frameBuffer->paintBackgroundBoxRel (_x, _y, w, h);
+ //printf("CChannelList::paint_pig x %d y %d w %d h %d osd_w %d osd_w %d\n", _x, _y, w, h, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true));
+ videoDecoder->Pig(_x, _y, w, h, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true));
+}
+
+void CChannelList::paint_events(int index)
+{
+ ffheight = g_Font[eventFont]->getHeight();
+ readEvents(chanlist[index]->channel_id);
+ frameBuffer->paintBoxRel(x+ width,y+ theight+pig_height, infozone_width, infozone_height,COL_MENUCONTENT_PLUS_0);
+
+ char startTime[10];
+ int eventStartTimeWidth = g_Font[eventFont]->getRenderWidth("22:22") + 5; // use a fixed value
+ int startTimeWidth = 0;
+ CChannelEventList::iterator e;
+ time_t azeit;
+ time(&azeit);
+
+ if ( evtlist.empty() )
+ {
+ CChannelEvent evt;
+
+ evt.description = g_Locale->getText(LOCALE_EPGLIST_NOEVENTS);
+ evt.eventID = 0;
+ evtlist.push_back(evt);
+ }
+
+ int i=1;
+ for (e=evtlist.begin(); e!=evtlist.end(); ++e )
+ {
+ //Remove events in the past
+ time_t dif = azeit - e->startTime;
+ if ( (dif > 0) && (!(e->eventID == 0)))
+ {
+ do
+ {
+ //printf("%d seconds in the past - deleted %s\n", dif, e->description.c_str());
+ e = evtlist.erase( e );
+ if (e == evtlist.end())
+ break;
+ dif = azeit - e->startTime;
+ }
+ while ( dif > 0 );
+ }
+ if (e == evtlist.end())
+ break;
+
+ //Display the remaining events
+ if ((y+ theight+ pig_height + i*ffheight) < (y+ theight+ pig_height + infozone_height))
+ {
+ if (e->eventID)
+ {
+ struct tm *tmStartZeit = localtime(&e->startTime);
+ strftime(startTime, sizeof(startTime), "%H:%M", tmStartZeit );
+ //printf("%s %s\n", startTime, e->description.c_str());
+ startTimeWidth = eventStartTimeWidth;
+ g_Font[eventFont]->RenderString(x+ width+5, y+ theight+ pig_height + i*ffheight, startTimeWidth, startTime, (g_settings.colored_events_channellist == 2 /* next */) ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTINACTIVE, 0, true);
+ }
+ g_Font[eventFont]->RenderString(x+ width+5+startTimeWidth, y+ theight+ pig_height + i*ffheight, infozone_width - startTimeWidth - 20, e->description, COL_MENUCONTENTDARK, 0, true);
+ }
+ else
+ {
+ break;
+ }
+ i++;
+ }
+ if ( !evtlist.empty() )
+ evtlist.clear();
+}
+
+static bool sortByDateTime (const CChannelEvent& a, const CChannelEvent& b)
+{
+ return a.startTime < b.startTime;
+}
+
+void CChannelList::readEvents(const t_channel_id channel_id)
+{
+ CEitManager::getInstance()->getEventsServiceKey(channel_id , evtlist);
+
+ if ( evtlist.empty() )
+ {
+ CChannelEvent evt;
+ evt.description = g_Locale->getText(LOCALE_EPGLIST_NOEVENTS);
+ evt.eventID = 0;
+ evtlist.push_back(evt);
+ }
+ else
+ sort(evtlist.begin(),evtlist.end(),sortByDateTime);
+
+ return;
+}
+
+void CChannelList::showdescription(int index)
+{
+ ffheight = g_Font[eventFont]->getHeight();
+ CZapitChannel* chan = chanlist[index];
+ CChannelEvent *p_event=NULL;
+ p_event = &chan->currentEvent;
+ epgData.info2.clear();
+ epgText.clear();
+ CEitManager::getInstance()->getEPGid(p_event->eventID, p_event->startTime, &epgData);
+ if (!(epgData.info2.empty()))
+ {
+ frameBuffer->paintBoxRel(x+ width,y+ theight+pig_height, infozone_width, infozone_height,COL_MENUCONTENT_PLUS_0);
+ processTextToArray(epgData.info2);
+ 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);
+ }
+}
+
+void CChannelList::addTextToArray(const std::string & text, int screening) // UTF-8
+{
+ //printf("line: >%s<\n", text.c_str() );
+ if (text==" ")
+ {
+ emptyLineCount ++;
+ if (emptyLineCount<2)
+ {
+ epgText.push_back(epg_pair(text,screening));
+ }
+ }
+ else
+ {
+ emptyLineCount = 0;
+ epgText.push_back(epg_pair(text,screening));
+ }
+}
+
+void CChannelList::processTextToArray(std::string text, int screening) // UTF-8
+{
+ std::string aktLine = "";
+ std::string aktWord = "";
+ int aktWidth = 0;
+ text += ' ';
+ char* text_= (char*) text.c_str();
+
+ while (*text_!=0)
+ {
+ if ( (*text_==' ') || (*text_=='\n') || (*text_=='-') || (*text_=='.') )
+ {
+ if (*text_!='\n')
+ aktWord += *text_;
+
+ int aktWordWidth = g_Font[eventFont]->getRenderWidth(aktWord, true);
+ if ((aktWordWidth+aktWidth)<(infozone_width - 20))
+ {//space ok, add
+ aktWidth += aktWordWidth;
+ aktLine += aktWord;
+
+ if (*text_=='\n')
+ { //enter-handler
+ addTextToArray( aktLine, screening );
+ aktLine = "";
+ aktWidth= 0;
+ }
+ aktWord = "";
+ }
+ else
+ {//new line needed
+ addTextToArray( aktLine, screening);
+ aktLine = aktWord;
+ aktWidth = aktWordWidth;
+ aktWord = "";
+ if (*text_=='\n')
+ continue;
+ }
+ }
+ else
+ {
+ aktWord += *text_;
+ }
+ text_++;
+ }
+ //add the rest
+ addTextToArray( aktLine + aktWord, screening );
+}
diff --git a/src/gui/channellist.h b/src/gui/channellist.h
index d96e22a3a..61bfed57a 100644
--- a/src/gui/channellist.h
+++ b/src/gui/channellist.h
@@ -64,26 +64,36 @@ private:
unsigned int liststart;
unsigned int listmaxshow;
unsigned int numwidth;
+ int new_zap_mode;
int fheight; // Fonthoehe Channellist-Inhalt
int theight; // Fonthoehe Channellist-Titel
int footerHeight;
+ int eventFont;
+ int ffheight;
std::string name;
ZapitChannelList chanlist;
CZapProtection* zapProtection;
- int width;
- int height;
- int x;
- int y;
+ int full_width;
+ int width;
+ int height;
+ int x;
+ int y;
int logo_off;
+ int pig_width;
+ int pig_height;
+ int infozone_width;
+ int infozone_height;
+ int previous_channellist_additional;
+ CEPGData epgData;
bool historyMode;
bool vlist; // "virtual" list, not bouquet
bool displayNext;
+ bool displayList;
int info_height;
- bool new_mode_active;
int ChannelList_Rec;
void paintDetails(int index);
@@ -98,9 +108,19 @@ private:
void showChannelLogo();
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 showdescription(int index);
+ typedef std::pair epg_pair;
+ std::vector epgText;
+ int emptyLineCount;
+ void addTextToArray( const std::string & text, int screening );
+ void processTextToArray(std::string text, int screening = 0);
public:
- CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false, bool new_mode_active = false );
+ CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false);
~CChannelList();
void SetChannelList(ZapitChannelList* channels);
diff --git a/src/gui/components/Makefile.am b/src/gui/components/Makefile.am
index 362e4b4c6..a05598e44 100644
--- a/src/gui/components/Makefile.am
+++ b/src/gui/components/Makefile.am
@@ -1,4 +1,4 @@
-AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS
+AM_CPPFLAGS = -fno-rtti -fno-exceptions
INCLUDES = \
-I$(top_builddir) \
@@ -6,8 +6,9 @@ INCLUDES = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/zapit/include \
-I$(top_srcdir)/lib \
- -I$(top_srcdir)/lib/libnet \
+ -I$(top_srcdir)/lib/libeventserver \
-I$(top_srcdir)/lib/libconfigfile \
+ -I$(top_srcdir)/lib/xmltree \
@FREETYPE_CFLAGS@
if BOXTYPE_COOL
diff --git a/src/gui/components/cc.h b/src/gui/components/cc.h
index 07b3adfc1..522146dfc 100644
--- a/src/gui/components/cc.h
+++ b/src/gui/components/cc.h
@@ -1,9 +1,9 @@
/*
- GUI window component classes - Neutrino-GUI
+ Based up Neutrino-GUI - Tuxbox-Project
+ Copyright (C) 2001 by Steffen Hehn 'McClean'
- Copyright(C) 2012, 2013, Thilo Graf
-
- This class contains generic components for GUI-related parts.
+ Classes for generic for GUI-related components.
+ Copyright (C) 2012, 2013, Thilo Graf 'dbt'
License: GPL
diff --git a/src/gui/components/components.cpp b/src/gui/components/components.cpp
index 596c5c024..63893826f 100644
--- a/src/gui/components/components.cpp
+++ b/src/gui/components/components.cpp
@@ -1,10 +1,10 @@
/*
- GUI window component classes - Neutrino-GUI
+ Based up Neutrino-GUI - Tuxbox-Project
+ Copyright (C) 2001 by Steffen Hehn 'McClean'
- Copyright(C) 2012, 2013, Thilo Graf
- Copyright(C) 2012, Michael Liebmann
-
- This class contains generic components for GUI-related parts.
+ Classes for generic for GUI-related components.
+ Copyright (C) 2012, 2013, Thilo Graf 'dbt'
+ Copyright (C) 2012, Michael Liebmann 'micha-bbg'
License: GPL
diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp
index 345328e1e..f8e412ba3 100644
--- a/src/gui/infoviewer.cpp
+++ b/src/gui/infoviewer.cpp
@@ -459,6 +459,22 @@ void CInfoViewer::show_current_next(bool new_chan, int epgpos)
// nicht gefunden / noch nicht geladen
/* see the comment in display_Info() for a reasoning for this calculation */
int CurrInfoY = (BoxEndY + ChanNameY + time_height) / 2; // lower end of current info box
+ if(g_settings.infobar_progressbar){
+ int pb_h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() - 4;
+ switch(g_settings.infobar_progressbar)
+ {
+ case 1:
+ case 2:
+ CurrInfoY += (pb_h/3);
+ break;
+ case 3:
+ CurrInfoY -= (pb_h/3);
+ break;
+ default:
+ break;
+ }
+ }
+
neutrino_locale_t loc;
if (! gotTime)
loc = LOCALE_INFOVIEWER_WAITTIME;
@@ -726,8 +742,11 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con
std::string prov_name = pname;
prov_name=prov_name.substr(prov_name.find_first_of("]")+1);
- int chname_width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getRenderWidth (ChannelName);
- chname_width += (chname_width/(ChannelName.size()-1)/2);
+ int chname_width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getRenderWidth (ChannelName, true);// UTF-8
+ unsigned int chann_size = ChannelName.size();
+ if(ChannelName.empty())
+ chann_size = 1;
+ chname_width += (chname_width/chann_size/2);
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,
@@ -1435,30 +1454,67 @@ void CInfoViewer::display_Info(const char *current, const char *next,
int height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight();
int CurrInfoY = (BoxEndY + ChanNameY + time_height) / 2;
int NextInfoY = CurrInfoY + height; // lower end of next info box
- int xStart;
int InfoX = ChanInfoX + 10;
- xStart = InfoX;
+ int xStart = InfoX;
if (starttimes)
xStart += info_time_width + 10;
- //colored_events init
- bool colored_event_C = false;
- bool colored_event_N = false;
- if (g_settings.colored_events_infobar == 1)
- colored_event_C = true;
- if (g_settings.colored_events_infobar == 2)
- colored_event_N = true;
+ int pb_h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() - 4;
+ switch(g_settings.infobar_progressbar)
+ {
+ case 1:
+ case 2:
+ CurrInfoY += (pb_h/3);
+ NextInfoY += (pb_h/3);
+ break;
+ case 3:
+ CurrInfoY -= (pb_h/3);
+ NextInfoY += (pb_h/3);
+ break;
+ default:
+ break;
+ }
if (pb_pos > -1)
{
int pb_w = 112;
+ int pb_startx = BoxEndX - pb_w - SHADOW_OFFSET;
+ int pb_starty = ChanNameY - (pb_h + 10);
+ int pb_shadow = COL_INFOBAR_SHADOW_PLUS_0;
+ int pb_color = g_settings.progressbar_color ? COL_INFOBAR_SHADOW_PLUS_0 : COL_INFOBAR_PLUS_0;
+ if(g_settings.infobar_progressbar){
+ pb_startx = xStart;
+ pb_w = BoxEndX - 10 - xStart;
+ pb_shadow = 0;
+ }
+ switch(g_settings.infobar_progressbar)
+ {
+ case 1:
+
+ pb_starty = CurrInfoY - ((pb_h * 2) + (pb_h / 6)) ;
+ pb_h = (pb_h/3);
+ pb_color = COL_INFOBAR_SHADOW_PLUS_0;
+ break;
+ case 2:
+ pb_starty = CurrInfoY - ((pb_h * 2) + (pb_h / 5)) ;
+ pb_h = (pb_h/5);
+ pb_color = COL_INFOBAR_SHADOW_PLUS_0;
+ break;
+ case 3:
+ pb_starty = CurrInfoY + ((pb_h / 3)-(pb_h/5)) ;
+ pb_h = (pb_h/5);
+ break;
+ default:
+ break;
+ }
+
int pb_p = pb_pos * pb_w / 100;
- int pb_h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() - 4;
if (pb_p > pb_w)
pb_p = pb_w;
- timescale->paintProgressBar(BoxEndX - pb_w - SHADOW_OFFSET, ChanNameY - (pb_h + 10) , pb_w, pb_h, pb_p, pb_w,
- 0, 0, g_settings.progressbar_color ? COL_INFOBAR_SHADOW_PLUS_0 : COL_INFOBAR_PLUS_0, COL_INFOBAR_SHADOW_PLUS_0, "", COL_INFOBAR);
+
+ timescale->paintProgressBar(pb_startx, pb_starty, pb_w, pb_h, pb_p, pb_w,
+ 0, 0, pb_color, pb_shadow, "", COL_INFOBAR);
//printf("paintProgressBar(%d, %d, %d, %d)\n", BoxEndX - pb_w - SHADOW_OFFSET, ChanNameY - (pb_h + 10) , pb_w, pb_h);
}
@@ -1472,6 +1528,14 @@ void CInfoViewer::display_Info(const char *current, const char *next,
int nextTimeX = BoxEndX - nextTimeW - 10;
static int oldCurrTimeX = currTimeX; // remember the last pos. of remaining time, in case we change from 20/100min to 21/99min
+ //colored_events init
+ bool colored_event_C = false;
+ bool colored_event_N = false;
+ if (g_settings.colored_events_infobar == 1)
+ colored_event_C = true;
+ if (g_settings.colored_events_infobar == 2)
+ colored_event_N = true;
+
if (current != NULL && update_current)
{
frameBuffer->paintBox(InfoX, CurrInfoY - height, currTimeX, CurrInfoY, COL_INFOBAR_PLUS_0);
@@ -1722,7 +1786,7 @@ void CInfoViewer::showInfoFile()
/*if (recordModeActive)
return;*/
char infotext[80];
- int fd, xStart, xOffset, yStart, width, height, tWidth, tIndent;
+ int fd, xStart, yStart, width, height, iOffset, oOffset, tWidth, tIndent, pb_w;
ssize_t cnt;
fd = open("/tmp/infobar.txt", O_RDONLY); //read textcontent from this file
@@ -1738,14 +1802,16 @@ void CInfoViewer::showInfoFile()
}
infotext[cnt-1] = '\0';
- xStart = BoxStartX + ChanWidth + 140; //140px space for the little rec/ts-bar
- xOffset = 5; //same value as the used RADIUS_SMALL
+ iOffset = RADIUS_SMALL; // inner left/right offset
+ oOffset = 140; // outer left/right offset
+ pb_w = 112; // same value as int pb_w in display_Info()
+ xStart = BoxStartX + ChanWidth + oOffset;
yStart = BoxStartY;
- width = BoxEndX - xStart - 225; //225px space for the progress-bar
+ width = BoxEndX - xStart - (g_settings.infobar_progressbar ? oOffset : oOffset + pb_w);
height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight() + 2;
tWidth = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth(infotext);
- if (tWidth < (width - (xOffset * 2)) )
- tIndent = (width - (xOffset * 2) - tWidth) / 2;
+ if (tWidth < (width - (iOffset * 2)) )
+ tIndent = (width - (iOffset * 2) - tWidth) / 2;
else
tIndent = 0;
//shadow
@@ -1754,7 +1820,7 @@ void CInfoViewer::showInfoFile()
frameBuffer->paintBoxRel(xStart, yStart, width, height, COL_INFOBAR_PLUS_0, RADIUS_SMALL, CORNER_ALL);
//content
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(
- xStart + xOffset + tIndent, yStart + height, width - xOffset, (std::string)infotext, COL_INFOBAR, height, false);
+ xStart + iOffset + tIndent, yStart + height, width - iOffset, (std::string)infotext, COL_INFOBAR, height, false);
}
void CInfoViewer::killTitle()
diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp
index cde8bfbe1..278323b6e 100644
--- a/src/gui/miscsettings_menu.cpp
+++ b/src/gui/miscsettings_menu.cpp
@@ -132,6 +132,13 @@ const CMenuOptionChooser::keyval MISCSETTINGS_FILESYSTEM_IS_UTF8_OPTIONS[MISCSET
{ 1, LOCALE_FILESYSTEM_IS_UTF8_OPTION_UTF8 }
};
+#define CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT 3
+const CMenuOptionChooser::keyval CHANNELLIST_NEW_ZAP_MODE_OPTIONS[CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT] =
+{
+ { 0, LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF },
+ { 1, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW },
+ { 2, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ACTIVE }
+};
#ifdef CPU_FREQ
#define CPU_FREQ_OPTION_COUNT 13
@@ -399,7 +406,7 @@ void CMiscMenue::showMiscSettingsMenuChanlist(CMenuWidget *ms_chanlist)
mc->setHint("", LOCALE_MENU_HINT_ZAP_CYCLE);
ms_chanlist->addItem(mc);
- mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true );
+ mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, CHANNELLIST_NEW_ZAP_MODE_OPTIONS, CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT, true );
mc->setHint("", LOCALE_MENU_HINT_NEW_ZAP_MODE);
ms_chanlist->addItem(mc);
}
diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp
index 738b9dcb0..db43a3236 100644
--- a/src/gui/osd_setup.cpp
+++ b/src/gui/osd_setup.cpp
@@ -82,11 +82,12 @@ COsdSetup::~COsdSetup()
}
//font settings
-const SNeutrinoSettings::FONT_TYPES channellist_font_sizes[4] =
+const SNeutrinoSettings::FONT_TYPES channellist_font_sizes[5] =
{
SNeutrinoSettings::FONT_TYPE_CHANNELLIST,
SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR,
SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER,
+ SNeutrinoSettings::FONT_TYPE_CHANNELLIST_EVENT,
SNeutrinoSettings::FONT_TYPE_CHANNEL_NUM_ZAP
};
@@ -132,7 +133,7 @@ const SNeutrinoSettings::FONT_TYPES other_font_sizes[5] =
font_sizes_groups font_sizes_groups[6] =
{
{LOCALE_FONTMENU_MENU , 5, other_font_sizes , "fontsize.doth", LOCALE_MENU_HINT_MENU_FONTS },
- {LOCALE_FONTMENU_CHANNELLIST, 4, channellist_font_sizes, "fontsize.dcha", LOCALE_MENU_HINT_CHANNELLIST_FONTS },
+ {LOCALE_FONTMENU_CHANNELLIST, 5, channellist_font_sizes, "fontsize.dcha", LOCALE_MENU_HINT_CHANNELLIST_FONTS },
{LOCALE_FONTMENU_EVENTLIST , 4, eventlist_font_sizes , "fontsize.deve", LOCALE_MENU_HINT_EVENTLIST_FONTS },
{LOCALE_FONTMENU_EPG , 4, epg_font_sizes , "fontsize.depg", LOCALE_MENU_HINT_EPG_FONTS },
{LOCALE_FONTMENU_INFOBAR , 4, infobar_font_sizes , "fontsize.dinf", LOCALE_MENU_HINT_INFOBAR_FONTS },
@@ -161,6 +162,7 @@ font_sizes_struct neutrino_font[FONT_TYPE_COUNT] =
{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},
@@ -355,6 +357,14 @@ const CMenuOptionChooser::keyval INFOBAR_SHOW_RES_MODE_OPTIONS[INFOBAR_SHOW_RES_
{ 2, LOCALE_OPTIONS_OFF }
};
+#define CHANNELLIST_ADDITIONAL_OPTION_COUNT 3
+const CMenuOptionChooser::keyval CHANNELLIST_ADDITIONAL_OPTIONS[CHANNELLIST_ADDITIONAL_OPTION_COUNT] =
+{
+ { 0, LOCALE_CHANNELLIST_ADDITIONAL_OFF },
+ { 1, LOCALE_CHANNELLIST_ADDITIONAL_ON },
+ { 2, LOCALE_CHANNELLIST_ADDITIONAL_ON_MINITV }
+};
+
#define CHANNELLIST_FOOT_OPTIONS_COUNT 3
const CMenuOptionChooser::keyval CHANNELLIST_FOOT_OPTIONS[CHANNELLIST_FOOT_OPTIONS_COUNT]=
{
@@ -722,6 +732,14 @@ const CMenuOptionChooser::keyval LOCALE_MISCSETTINGS_INFOBAR_DISP_OPTIONS[LOCAL
{ 5 , LOCALE_MISCSETTINGS_INFOBAR_DISP_5 },
{ 6 , LOCALE_MISCSETTINGS_INFOBAR_DISP_6 }
};
+#define LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_COUNT 4
+const CMenuOptionChooser::keyval LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_OPTIONS[LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_COUNT]=
+{
+ { 0 , LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_0 },
+ { 1 , LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_1 },
+ { 2 , LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_2 },
+ { 3 , LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_3 }
+};
//infobar
void COsdSetup::showOsdInfobarSetup(CMenuWidget *menu_infobar)
@@ -750,6 +768,11 @@ void COsdSetup::showOsdInfobarSetup(CMenuWidget *menu_infobar)
mc->setHint("", LOCALE_MENU_HINT_INFOBAR_SAT);
menu_infobar->addItem(mc);
+ // infobar progress
+ mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR, &g_settings.infobar_progressbar, LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_OPTIONS, LOCALE_MISCSETTINGS_INFOBAR_PROGRESSBAR_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_INFOBAR_PROGRESSBAR);
+ menu_infobar->addItem(mc);
+
// flash/hdd progress
mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_INFOBAR_SHOW_SYSFS_HDD, &g_settings.infobar_show_sysfs_hdd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true);
mc->setHint("", LOCALE_MENU_HINT_INFOBAR_FILESYS);
@@ -801,6 +824,12 @@ void COsdSetup::showOsdChanlistSetup(CMenuWidget *menu_chanlist)
CMenuOptionChooser * mc;
menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST);
+
+ // channellist additional
+ mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_ADDITIONAL, &g_settings.channellist_additional, CHANNELLIST_ADDITIONAL_OPTIONS, CHANNELLIST_ADDITIONAL_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_ADDITIONAL);
+ menu_chanlist->addItem(mc);
+
// epg align
mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true);
mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_EPG_ALIGN);
@@ -893,9 +922,15 @@ int COsdSetup::showContextChanlistMenu()
menu_chanlist->enableFade(false);
menu_chanlist->setSelected(cselected);
+ CMenuOptionChooser * mc;
+
menu_chanlist->addIntroItems(LOCALE_MISCSETTINGS_CHANNELLIST);//, NONEXISTANT_LOCALE, CMenuWidget::BTN_TYPE_CANCEL);
- CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true);
+ mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_ADDITIONAL, &g_settings.channellist_additional, CHANNELLIST_ADDITIONAL_OPTIONS, CHANNELLIST_ADDITIONAL_OPTION_COUNT, true);
+ mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_ADDITIONAL);
+ menu_chanlist->addItem(mc);
+
+ mc = new CMenuOptionChooser(LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN, &g_settings.channellist_epgtext_align_right, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS, CHANNELLIST_EPGTEXT_ALIGN_RIGHT_OPTIONS_COUNT, true);
mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_EPG_ALIGN);
menu_chanlist->addItem(mc);
@@ -911,6 +946,8 @@ int COsdSetup::showContextChanlistMenu()
mc->setHint("", LOCALE_MENU_HINT_CHANNELLIST_COLORED);
menu_chanlist->addItem(mc);
+ menu_chanlist->addItem(new CMenuSeparator(CMenuSeparator::LINE));
+
CMenuWidget *fontSettingsSubMenu = new CMenuWidget(LOCALE_FONTMENU_HEAD, NEUTRINO_ICON_KEYBINDING);
fontSettingsSubMenu->enableSaveScreen(true);
fontSettingsSubMenu->enableFade(false);
@@ -925,7 +962,7 @@ int COsdSetup::showContextChanlistMenu()
fontSettingsSubMenu->addItem(GenericMenuSeparatorLine);
fontSettingsSubMenu->addItem(new CMenuForwarder(LOCALE_OPTIONS_DEFAULT, true, NULL, this, font_sizes_groups[i].actionkey));
- CMenuForwarder * mf = new CMenuDForwarder(LOCALE_FONTMENU_HEAD, true, NULL, fontSettingsSubMenu, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN);
+ CMenuForwarder * mf = new CMenuDForwarder(LOCALE_FONTMENU_HEAD, true, NULL, fontSettingsSubMenu, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED);
mf->setHint("", LOCALE_MENU_HINT_FONTS);
menu_chanlist->addItem(mf);
diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp
index 730705e69..fb4c6dd57 100644
--- a/src/gui/pictureviewer.cpp
+++ b/src/gui/pictureviewer.cpp
@@ -235,7 +235,7 @@ int CPictureViewerGui::show()
bool update=true;
if (audioplayer)
- m_currentTitle = m_audioPlayer->getAdioPayerM_currend();
+ m_currentTitle = m_audioPlayer->getAudioPlayerM_current();
while (loop)
{
@@ -564,17 +564,17 @@ int CPictureViewerGui::show()
// control keys for audioplayer
else if (audioplayer && msg==CRCInput::RC_pause)
{
- m_currentTitle = m_audioPlayer->getAdioPayerM_currend();
+ m_currentTitle = m_audioPlayer->getAudioPlayerM_current();
m_audioPlayer->pause();
}
else if (audioplayer && msg==CRCInput::RC_stop)
{
- m_currentTitle = m_audioPlayer->getAdioPayerM_currend();
+ m_currentTitle = m_audioPlayer->getAudioPlayerM_current();
m_audioPlayer->stop();
}
else if (audioplayer && msg==CRCInput::RC_play)
{
- m_currentTitle = m_audioPlayer->getAdioPayerM_currend();
+ m_currentTitle = m_audioPlayer->getAudioPlayerM_current();
if (m_currentTitle > -1)
m_audioPlayer->play((unsigned int)m_currentTitle);
}
diff --git a/src/gui/update_ext.cpp b/src/gui/update_ext.cpp
index 50619921f..601b11647 100644
--- a/src/gui/update_ext.cpp
+++ b/src/gui/update_ext.cpp
@@ -596,13 +596,13 @@ bool CExtUpdate::readBackupList(const std::string & dstPath)
// read DeleteList
for(it = deleteList.begin(); it != deleteList.end(); ++it) {
line = *it;
- if (lstat(line.c_str(), &FileInfo) != -1) {
- if ((line.find("*") != std::string::npos) || (line.find("?") != std::string::npos)) {
- // Wildcards
- WRITE_UPDATE_LOG("delete file list: %s\n", line.c_str());
- deleteFileList(line.c_str());
- }
- else if (S_ISREG(FileInfo.st_mode)) {
+ if ((line.find("*") != std::string::npos) || (line.find("?") != std::string::npos)) {
+ // Wildcards
+ WRITE_UPDATE_LOG("delete file list: %s\n", line.c_str());
+ deleteFileList(line.c_str());
+ }
+ else if (lstat(line.c_str(), &FileInfo) != -1) {
+ if (S_ISREG(FileInfo.st_mode)) {
// File
WRITE_UPDATE_LOG("delete file: %s\n", line.c_str());
unlink(line.c_str());
diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp
index ebe682849..225a1d9dd 100644
--- a/src/gui/upnpbrowser.cpp
+++ b/src/gui/upnpbrowser.cpp
@@ -130,7 +130,7 @@ int CUpnpBrowserGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/
#endif
m_LastMode=(CNeutrinoApp::getInstance()->getLastMode());
- m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - ConnectLineBox_Width;
+ m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - 2*ConnectLineBox_Width;
m_height = (g_settings.screen_EndY - g_settings.screen_StartY);
m_sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight();
@@ -143,7 +143,9 @@ int CUpnpBrowserGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/
m_listmaxshow = (m_height - m_info_height - m_title_height - m_theight - 2*m_buttonHeight) / (m_fheight);
m_height = m_theight + m_info_height + m_title_height + 2*m_buttonHeight + m_listmaxshow * m_fheight; // recalc height
- m_x=getScreenStartX( m_width + ConnectLineBox_Width ) + ConnectLineBox_Width;
+ m_x=getScreenStartX( m_width );
+ if (m_x < ConnectLineBox_Width)
+ m_x = ConnectLineBox_Width;
m_y=getScreenStartY( m_height );
// Stop sectionsd
diff --git a/src/neutrino.cpp b/src/neutrino.cpp
index 3ecf1133f..c743e92c4 100644
--- a/src/neutrino.cpp
+++ b/src/neutrino.cpp
@@ -413,6 +413,7 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.progressbar_color = configfile.getBool("progressbar_color", true );
g_settings.infobar_show = configfile.getInt32("infobar_show", 1);
g_settings.infobar_show_channellogo = configfile.getInt32("infobar_show_channellogo" , 3 );
+ g_settings.infobar_progressbar = configfile.getInt32("infobar_progressbar" , 0 );
g_settings.casystem_display = configfile.getInt32("casystem_display", 2 );//mini ca mode default
g_settings.scrambled_message = configfile.getBool("scrambled_message", true );
g_settings.volume_pos = configfile.getInt32("volume_pos", 0 );
@@ -635,6 +636,7 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.mode_clock = configfile.getInt32( "mode_clock", 0);
g_settings.zapto_pre_time = configfile.getInt32( "zapto_pre_time", 0);
g_settings.spectrum = configfile.getBool("spectrum" , false);
+ g_settings.channellist_additional = configfile.getInt32("channellist_additional", 0); //default off
g_settings.channellist_epgtext_align_right = configfile.getBool("channellist_epgtext_align_right" , false);
g_settings.channellist_extended = configfile.getBool("channellist_extended" , true);
g_settings.channellist_foot = configfile.getInt32("channellist_foot" , 1);//default next Event
@@ -876,6 +878,7 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setBool("progressbar_color" , g_settings.progressbar_color );
configfile.setInt32("infobar_show", g_settings.infobar_show);
configfile.setInt32("infobar_show_channellogo" , g_settings.infobar_show_channellogo );
+ configfile.setInt32("infobar_progressbar" , g_settings.infobar_progressbar );
configfile.setInt32("casystem_display" , g_settings.casystem_display );
configfile.setBool("scrambled_message" , g_settings.scrambled_message );
configfile.setInt32("volume_pos" , g_settings.volume_pos );
@@ -1063,6 +1066,7 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setInt32( "mode_clock", g_settings.mode_clock );
configfile.setInt32( "zapto_pre_time", g_settings.zapto_pre_time );
configfile.setBool("spectrum", g_settings.spectrum);
+ configfile.setInt32("channellist_additional", g_settings.channellist_additional);
configfile.setBool("channellist_epgtext_align_right", g_settings.channellist_epgtext_align_right);
configfile.setBool("channellist_extended" , g_settings.channellist_extended);
configfile.setInt32("channellist_foot" , g_settings.channellist_foot);
diff --git a/src/nhttpd/doc/nhttpd_controlapi.html b/src/nhttpd/doc/nhttpd_controlapi.html
index e87fa6c56..2632352cc 100644
--- a/src/nhttpd/doc/nhttpd_controlapi.html
+++ b/src/nhttpd/doc/nhttpd_controlapi.html
@@ -1829,11 +1829,17 @@ Die Pluginliste wird neu geladen.
Handler: http://dbox/control/screenshot
-Parameter: keine
-Rükgabe : ok
+Parameter: name=<dateiname>&osd=1|0&video=1|0
+Rückgabe : ok
-Screenshot mit TV Bild und OSD wird erstellt und unter /tmp/screenshot.png abgelegt.
+Screenshot mit TV Bild und OSD wird erstellt und unter /tmp/<dateiname>.png abgelegt.
+
+Beispiel:
+
+>>>http://dbox/control/screenshot?osd=0&video=1
+ok
+
diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp
index a3beb60b7..8df655346 100644
--- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp
+++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp
@@ -1466,10 +1466,23 @@ void CControlAPI::ReloadPluginsCGI(CyhookHandler *hh)
#ifdef SCREENSHOT
void CControlAPI::ScreenshotCGI(CyhookHandler *hh)
{
- CScreenShot * sc = new CScreenShot("/tmp/screenshot.png", (CScreenShot::screenshot_format_t)0 /*PNG*/);
- sc->EnableOSD(true);
+ bool enableOSD = true;
+ bool enableVideo = true;
+ std::string filename = "screenshot";
+
+ if(hh->ParamList["osd"] == "0")
+ enableOSD = false;
+ if(hh->ParamList["video"] == "0")
+ enableVideo = false;
+ if(hh->ParamList["name"] != "")
+ filename = hh->ParamList["name"];
+
+ CScreenShot * sc = new CScreenShot("/tmp/" + filename + ".png", (CScreenShot::screenshot_format_t)0 /*PNG*/);
+ sc->EnableOSD(enableOSD);
+ sc->EnableVideo(enableVideo);
sc->Start();
- hh->SendOk();
+
+ hh->SendOk(); // FIXME what if sc->Start() failed?
}
#endif
diff --git a/src/nhttpd/web/Makefile.am b/src/nhttpd/web/Makefile.am
index 7a1a58268..858dbdf7d 100644
--- a/src/nhttpd/web/Makefile.am
+++ b/src/nhttpd/web/Makefile.am
@@ -75,7 +75,6 @@ install_DATA = channels.js \
Y_Tools_Boxcontrol.yhtm \
Y_Tools_Check_Install.yhtm \
Y_Tools_Cmd.yhtm \
- Y_Tools_fbshot.yhtm \
Y_Tools_Flash_Menue.yhtm \
Y_Tools_Flash_Upload.yhtm \
Y_Tools_Info_Menue.yhtm \
@@ -83,7 +82,7 @@ install_DATA = channels.js \
Y_Tools_lcshot.yhtm \
Y_Tools_Menue.yhtm \
Y_Tools_Rcsim.yhtm \
- Y_Tools_remote_osd.yhtm \
+ Y_Tools_Screenshot.yhtm \
Y_Tools_Timer_Sync.js \
Y_Tools_Timer_Sync.yhtm \
Y_Tools_tvshot.yhtm \
diff --git a/src/nhttpd/web/Y_Boxcontrol_Menue.yhtm b/src/nhttpd/web/Y_Boxcontrol_Menue.yhtm
index c75361b24..536cd1dc7 100644
--- a/src/nhttpd/web/Y_Boxcontrol_Menue.yhtm
+++ b/src/nhttpd/web/Y_Boxcontrol_Menue.yhtm
@@ -72,8 +72,6 @@ function init(){
{=var-set:lcshot={=if-file-exists:/bin/lcshot~true~{=if-file-exists:/var/bin/lcshot~true~false=}=}=}
-{=var-set:fbshot={=if-file-exists:/bin/fbshot~true~{=if-file-exists:/var/bin/fbshot~true~{=if-file-exists:/bin/dboxshot~true~{=if-file-exists:/var/bin/dboxshot~true~false=}=}=}=}=}
-{=var-set:dboxshot={=if-file-exists:/bin/dboxshot~true~{=if-file-exists:/var/bin/dboxshot~true~false=}=}=}
diff --git a/src/nhttpd/web/Y_Main.css b/src/nhttpd/web/Y_Main.css
index 7f48c980d..705b64cad 100644
--- a/src/nhttpd/web/Y_Main.css
+++ b/src/nhttpd/web/Y_Main.css
@@ -12,6 +12,18 @@ button,input,select,form,td {
font-family: Verdana, Geneva, Arial, 'Lucida Grande',Tahoma, Helvetica, sans-serif;
color:#555555;
}
+.left {
+ float: left;
+}
+.right {
+ float: right;
+}
+.clear {
+ clear: both;
+ line-height: 0px;
+ height: 0;
+ overflow: hidden;
+}
/* buttons */
a img:hover {
position:relative;
@@ -37,8 +49,9 @@ button[ytype="zap"]{background-image:url(/images/zap.png);}
button[ytype="timeup"]{background-image:url(/images/time_up.png);}
button[ytype="timedown"]{background-image:url(/images/time_down.png);}
button[ytype="timeadd"]{background-image:url(/images/time_add.png);}
-button[ytype="shot"]{background-image:url(/images/snapshot.png);}
+button[ytype="snapshot"]{background-image:url(/images/snapshot.png);}
button[ytype="clearshot"]{background-image:url(/images/remove.png);}
+button[ytype="zoomshot"]{background-image:url(/images/fullscreen.png);}
button[ytype="go"]{background-image:url(/images/accept.png);}
button[ytype="download"]{background-image:url(/images/wget.gif);}
button[ytype="clear"]{background-image:url(/images/remove.png);}
@@ -846,3 +859,20 @@ a.timer {
.lt_table td {
white-space: pre-wrap;
}
+
+/* screenshots */
+#screenshot_header {
+ height: 30px;
+}
+td.shot {
+ vertical-align: top;
+}
+img#shot {
+ width: 100%;
+ background-color: #ffffff;
+ border: 1px solid #f5f5f5;
+ margin: 10px 0;
+}
+img#shot:hover {
+ cursor: pointer;
+}
diff --git a/src/nhttpd/web/Y_Menue.yhtm b/src/nhttpd/web/Y_Menue.yhtm
index b2965a68d..0ba6a9ad0 100644
--- a/src/nhttpd/web/Y_Menue.yhtm
+++ b/src/nhttpd/web/Y_Menue.yhtm
@@ -120,7 +120,7 @@ function vlc() {
-
+
diff --git a/src/nhttpd/web/Y_Settings_nhttpd.yhtm b/src/nhttpd/web/Y_Settings_nhttpd.yhtm
index 655e54b5b..5418e22a4 100644
--- a/src/nhttpd/web/Y_Settings_nhttpd.yhtm
+++ b/src/nhttpd/web/Y_Settings_nhttpd.yhtm
@@ -99,7 +99,7 @@ function do_submit()
{=if-not-equal:{=global-var-get:boxtype=}~coolstream~
{=L:set.nhttpd.ips_without_keep_alive=} {=L:set.nhttpd.ips_without_keep_alive_desc=}
-
+
=}
diff --git a/src/nhttpd/web/Y_Tools_Rcsim.yhtm b/src/nhttpd/web/Y_Tools_Rcsim.yhtm
index ff2157ed7..cad052b82 100644
--- a/src/nhttpd/web/Y_Tools_Rcsim.yhtm
+++ b/src/nhttpd/web/Y_Tools_Rcsim.yhtm
@@ -18,6 +18,12 @@ function rcsim(_key)
-{=include-block:Y_Blocks.txt;remote=}
+
+
+ {=var-set:help_url==}{=var-set:menu={=L:bc.menue.remote=}=}{=include-block:Y_Blocks.txt;work_menu=}
+
+ {=include-block:Y_Blocks.txt;remote=}
+
+