Habe mal auf die Schnelle einen Patch gemacht, welcher die Symbole rot (=Sendung ist zur Aufnahme vorgemerkt) und gelb (=eine andere Sendung wird zu dieser Zeit aufgenommen) verwendet. Bei rot erscheint in der Hinweisleiste anstatt dem 'rot Aufnehmen' ein 'rot Löschen'. Damit kann der betreffende Timer gelöscht werden.
Das ganze wird nur angezeigt, wenn Aufnahme aktiviert ist UND in der Tastaturbelegung 'Aufnahme-Timer hinzufügen' definiert ist.
Wenn jemand Lust hat kann er ja mal testen ob es irgendwelche Probleme gibt (auch die Geschwindkeit bei vielen Timern mal testen).
Als Symbole könnte man ev. noch aussagekräftigerere designen (Designer vor!). Auch andere Verbesserungsvorschläge sind (wie immer )herzlich willkommen.
Wenn es keine Probleme gibt, würde ich das ganze noch ein wenig code-technisch aufarbeiten und einstellen.
Günther
PS: Keine Sorge, um die Altlasten kümmere ich mich die Tage auch noch
Code: Alles auswählen
### Eclipse Workspace Patch 1.0
#P work
Index: apps/tuxbox/neutrino/src/gui/eventlist.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/gui/eventlist.cpp,v
retrieving revision 1.107
diff -u -r1.107 eventlist.cpp
--- apps/tuxbox/neutrino/src/gui/eventlist.cpp 6 Jul 2007 21:07:23 -0000 1.107
+++ apps/tuxbox/neutrino/src/gui/eventlist.cpp 4 Sep 2007 16:42:07 -0000
@@ -114,6 +114,8 @@
y=(((g_settings.screen_EndY- g_settings.screen_StartY)-height) / 2) + g_settings.screen_StartY;
liststart = 0;
sort_mode = 0;
+
+ UpdateTimerList();
}
@@ -121,6 +123,37 @@
{
}
+void EventList::UpdateTimerList(void)
+{
+ if ((g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) &&
+ (g_settings.key_channelList_addrecord != (int)CRCInput::RC_nokey))
+ {
+ //CTimerdClient timerdclient;
+ //if(timerdclient.isTimerdAvailable())
+ timerlist.clear();
+ Timer.getTimerList (timerlist);
+ }
+}
+
+// return event if exact timer found
+// return -1 if no timer found
+// return -2 if any timer was found
+int EventList::isTimer(time_t starttime,time_t endtime,event_id_t epgid)
+{
+ if ((g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) &&
+ (g_settings.key_channelList_addrecord != (int)CRCInput::RC_nokey))
+ {
+ for(unsigned int i= 0; i < timerlist.size(); i++)
+ {
+ if(timerlist[i].epgID == epgid)
+ return timerlist[i].eventID;
+ if(timerlist[i].stopTime > starttime &&
+ timerlist[i].alarmTime < endtime)
+ return -2;
+ }
+ }
+ return -1;
+}
void EventList::readEvents(const t_channel_id channel_id)
{
@@ -276,6 +309,12 @@
paint();
else
paintItem(selected - liststart);
+
+ if ((g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) &&
+ (g_settings.key_channelList_addrecord != (int)CRCInput::RC_nokey))
+ {
+ showFunctionBar(true);
+ }
}
else if ((msg==CRCInput::RC_down || msg==(neutrino_msg_t)g_settings.key_channelList_pagedown))
{
@@ -295,6 +334,12 @@
paint();
else
paintItem(selected - liststart);
+
+ if ((g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) &&
+ (g_settings.key_channelList_addrecord != (int)CRCInput::RC_nokey))
+ {
+ showFunctionBar(true);
+ }
}
else if (msg == (neutrino_msg_t)g_settings.key_channelList_sort)
{
@@ -341,7 +386,8 @@
if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF)
{
CTimerdClient timerdclient;
- if(timerdclient.isTimerdAvailable())
+ int timerID = isTimer(evtlist[selected].startTime,evtlist[selected].startTime + evtlist[selected].duration,evtlist[selected].eventID);
+ if(timerdclient.isTimerdAvailable() && timerID < 0)
{
std::string recDir = g_settings.recording_dir[0];
if (g_settings.recording_choose_direct_rec_dir)
@@ -378,9 +424,17 @@
} else {
ShowLocalizedMessage(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw");
}
+ UpdateTimerList();
+ paintItem(selected - liststart);
}
-
-
+ }
+ else if (timerdclient.isTimerdAvailable() )
+ {
+ // Timer already available in Timerlist, remove now
+ printf("remove timer\n");
+ timerdclient.removeTimerEvent(timerID);
+ UpdateTimerList();
+ paintItem(selected - liststart);
}
else
printf("timerd not available\n");
@@ -543,6 +597,15 @@
g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMSMALL]->RenderString(x+width-fwidth2-5- 20, ypos+ fheight1+3, fwidth2, duration_str, color, 0, true); // UTF-8
// 2nd line
g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMLARGE]->RenderString(x+ 20, ypos+ fheight, width- 25- 20, evtlist[liststart+pos].description, color);
+ int timerID = isTimer(evtlist[liststart+pos].startTime,evtlist[liststart+pos].startTime + evtlist[liststart+pos].duration,evtlist[liststart+pos].eventID);
+ if(timerID == -2)
+ {
+ frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_YELLOW, x+1, ypos+ fheight1+2);
+ }
+ else if(timerID >= 0)
+ {
+ frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_RED, x+1, ypos+ fheight1+2);
+ }
}
}
@@ -621,7 +684,11 @@
{
keyhelper.get(&key, &icon, g_settings.key_channelList_addrecord);
frameBuffer->paintIcon(icon, bx+8+cellwidth*pos, by+h_offset);
- g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(bx+bdx+cellwidth*pos, by+bh-h_offset, bw-30, g_Locale->getText(LOCALE_EVENTLISTBAR_RECORDEVENT), COL_INFOBAR, 0, true); // UTF-8
+ int timerID = isTimer(evtlist[selected].startTime,evtlist[selected].startTime + evtlist[selected].duration,evtlist[selected].eventID);
+ if(timerID >= 0)
+ g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(bx+bdx+cellwidth*pos, by+bh-h_offset, bw-30, g_Locale->getText(LOCALE_TIMERLIST_DELETE), COL_INFOBAR, 0, true); // UTF-8
+ else
+ g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(bx+bdx+cellwidth*pos, by+bh-h_offset, bw-30, g_Locale->getText(LOCALE_EVENTLISTBAR_RECORDEVENT), COL_INFOBAR, 0, true); // UTF-8
pos++;
}