summaryrefslogtreecommitdiff
path: root/osdbase.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-06-12 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-06-12 18:00:00 +0200
commita616d4b8597cfb69af7a8f0e0a96da2143970ffe (patch)
treee6c64553b643803984d2d093cbbd01ff45dd3be8 /osdbase.c
parentf8367110245149a1333e47118c41827288c814c3 (diff)
downloadvdr-patch-lnbsharing-a616d4b8597cfb69af7a8f0e0a96da2143970ffe.tar.gz
vdr-patch-lnbsharing-a616d4b8597cfb69af7a8f0e0a96da2143970ffe.tar.bz2
Version 1.3.26vdr-1.3.26
- Updated the Estonian OSD texts (thanks to Arthur Konovalov). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Fixed handling 'summary.vdr' files with more than two empty lines (thanks to Christian Jacobsen for reporting this one). - Improved resetting CAM connections (thanks to Marco Schlüßler). - Implemented cVideoRepacker in remux.c to make sure every PES packet contains only data from one frame (thanks to Reinhard Nissl). NOTE: currently this doesn't work with MPEG1, so if you use MPEG1 you may want to change line 1158 in remux.c to ts2pes[numTracks++] = new cTS2PES(VPid, resultBuffer, IPACKS); as it was before. - EPG events without a title now display "No title" instead of "(null)" (thanks to Rolf Ahrenberg). - A device can now detach all receivers for a given PID, as is necessary, e.g., for the bitstreamout plugin (thanks to Werner Fink). - Added the year (two digits) to recording dates in LSTR, and thus also in menus (suggested by Jan Ekholm). - Fixed the call to Channels.Unlock() in cEITScanner::Process() (thanks to Reinhard Nissl). - Fixed handling timers with a day given as MTWTF--@6, i.e. a repeating timer with first day not as full date, but just day of month (thanks to Henrik Niehaus for reporting this one). - Removed an unnecessary #include from osd.c (thanks to Wolfgang Rohdewald). - Fixed dropping EPG events that have a zero start time or duration, in case it's an NVOD event (thanks to Chris Warren). - Fixed handling page up/down in menu lists in case there are several non selectable items in a row (thanks to Udo Richter for reporting this one). - Added cOsdMenu::SetCols() to allow adjusting the menu columns. - Modified cEITScanner::Process() so that it works on systems with only budget cards or a mix of DVB-S, DVB-C or DVB-T cards.
Diffstat (limited to 'osdbase.c')
-rw-r--r--osdbase.c82
1 files changed, 59 insertions, 23 deletions
diff --git a/osdbase.c b/osdbase.c
index ec04adb..7d03dbd 100644
--- a/osdbase.c
+++ b/osdbase.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.c 1.15 2005/01/07 16:16:41 kls Exp $
+ * $Id: osdbase.c 1.17 2005/06/12 10:44:22 kls Exp $
*/
#include "osdbase.h"
@@ -74,11 +74,7 @@ cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
hasHotkeys = false;
title = NULL;
SetTitle(Title);
- cols[0] = c0;
- cols[1] = c1;
- cols[2] = c2;
- cols[3] = c3;
- cols[4] = c4;
+ SetCols(c0, c1, c2, c3, c4);
first = 0;
current = marked = -1;
subMenu = NULL;
@@ -116,6 +112,15 @@ const char *cOsdMenu::hk(const char *s)
return s;
}
+void cOsdMenu::SetCols(int c0, int c1, int c2, int c3, int c4)
+{
+ cols[0] = c0;
+ cols[1] = c1;
+ cols[2] = c2;
+ cols[3] = c3;
+ cols[4] = c4;
+}
+
void cOsdMenu::SetHasHotkeys(void)
{
hasHotkeys = true;
@@ -258,7 +263,8 @@ void cOsdMenu::CursorUp(void)
{
if (current > 0) {
int tmpCurrent = current;
- while (--tmpCurrent >= 0 && !SelectableItem(tmpCurrent));
+ while (--tmpCurrent >= 0 && !SelectableItem(tmpCurrent))
+ ;
if (tmpCurrent < 0)
return;
if (tmpCurrent >= first)
@@ -282,7 +288,8 @@ void cOsdMenu::CursorDown(void)
if (current < last) {
int tmpCurrent = current;
- while (++tmpCurrent <= last && !SelectableItem(tmpCurrent));
+ while (++tmpCurrent <= last && !SelectableItem(tmpCurrent))
+ ;
if (tmpCurrent > last)
return;
if (tmpCurrent <= lastOnScreen)
@@ -306,33 +313,62 @@ void cOsdMenu::CursorDown(void)
void cOsdMenu::PageUp(void)
{
+ int oldCurrent = current;
+ int oldFirst = first;
current -= displayMenuItems;
first -= displayMenuItems;
+ int last = Count() - 1;
+ if (current < 0)
+ current = 0;
if (first < 0)
- first = current = 0;
- if (!SelectableItem(current)) {
- current -= (current > 0) ? 1 : -1;
- first = min(first, current - 1);
+ first = 0;
+ int tmpCurrent = current;
+ while (!SelectableItem(tmpCurrent) && --tmpCurrent >= 0)
+ ;
+ if (tmpCurrent < 0) {
+ tmpCurrent = current;
+ while (++tmpCurrent <= last && !SelectableItem(tmpCurrent))
+ ;
+ }
+ current = tmpCurrent <= last ? tmpCurrent : -1;
+ if (current >= 0) {
+ if (current < first)
+ first = current;
+ else if (current - first >= displayMenuItems)
+ first = current - displayMenuItems + 1;
+ }
+ if (current != oldCurrent || first != oldFirst) {
+ Display();
+ DisplayCurrent(true);
}
- Display();
- DisplayCurrent(true);
}
void cOsdMenu::PageDown(void)
{
+ int oldCurrent = current;
+ int oldFirst = first;
current += displayMenuItems;
first += displayMenuItems;
- int count = Count();
- if (current > count - 1) {
- current = count - 1;
- first = max(0, count - displayMenuItems);
+ int last = Count() - 1;
+ int tmpCurrent = current;
+ while (!SelectableItem(tmpCurrent) && ++tmpCurrent <= last)
+ ;
+ if (tmpCurrent > last) {
+ tmpCurrent = current;
+ while (--tmpCurrent >= 0 && !SelectableItem(tmpCurrent))
+ ;
}
- if (!SelectableItem(current)) {
- current += (current < count - 1) ? 1 : -1;
- first = max(first, current - displayMenuItems);
+ current = tmpCurrent > 0 ? tmpCurrent : -1;
+ if (current >= 0) {
+ if (current < first)
+ first = current;
+ else if (current - first >= displayMenuItems)
+ first = current - displayMenuItems + 1;
+ }
+ if (current != oldCurrent || first != oldFirst) {
+ Display();
+ DisplayCurrent(true);
}
- Display();
- DisplayCurrent(true);
}
void cOsdMenu::Mark(void)