mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Moved several menu item classes from menu.c to menuitems.[hc] to make them available for plugins
This commit is contained in:
parent
b5e7c11178
commit
3c4010bb75
2
HISTORY
2
HISTORY
@ -2756,3 +2756,5 @@ Video Disk Recorder Revision History
|
|||||||
- Added some 3-letter language codes (thanks to Marcus Mönnig).
|
- Added some 3-letter language codes (thanks to Marcus Mönnig).
|
||||||
- Added language code handling to the subtitling descriptor in 'libsi' (thanks to
|
- Added language code handling to the subtitling descriptor in 'libsi' (thanks to
|
||||||
Pekka Virtanen).
|
Pekka Virtanen).
|
||||||
|
- Moved several menu item classes from menu.c to menuitems.[hc] to make them
|
||||||
|
available for plugins.
|
||||||
|
326
menu.c
326
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.297 2004/03/14 13:24:02 kls Exp $
|
* $Id: menu.c 1.298 2004/03/28 09:17:15 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -37,330 +37,6 @@
|
|||||||
|
|
||||||
#define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1)
|
#define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1)
|
||||||
|
|
||||||
// --- cMenuEditChanItem -----------------------------------------------------
|
|
||||||
|
|
||||||
class cMenuEditChanItem : public cMenuEditIntItem {
|
|
||||||
protected:
|
|
||||||
virtual void Set(void);
|
|
||||||
public:
|
|
||||||
cMenuEditChanItem(const char *Name, int *Value);
|
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
};
|
|
||||||
|
|
||||||
cMenuEditChanItem::cMenuEditChanItem(const char *Name, int *Value)
|
|
||||||
:cMenuEditIntItem(Name, Value, 1, Channels.MaxNumber())
|
|
||||||
{
|
|
||||||
Set();
|
|
||||||
}
|
|
||||||
|
|
||||||
void cMenuEditChanItem::Set(void)
|
|
||||||
{
|
|
||||||
char buf[255];
|
|
||||||
cChannel *channel = Channels.GetByNumber(*value);
|
|
||||||
snprintf(buf, sizeof(buf), "%d %s", *value, channel ? channel->Name() : "");
|
|
||||||
SetValue(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
eOSState cMenuEditChanItem::ProcessKey(eKeys Key)
|
|
||||||
{
|
|
||||||
int delta = 1;
|
|
||||||
|
|
||||||
switch (Key) {
|
|
||||||
case kLeft|k_Repeat:
|
|
||||||
case kLeft: delta = -1;
|
|
||||||
case kRight|k_Repeat:
|
|
||||||
case kRight:
|
|
||||||
{
|
|
||||||
cChannel *channel = Channels.GetByNumber(*value + delta, delta);
|
|
||||||
if (channel) {
|
|
||||||
*value = channel->Number();
|
|
||||||
Set();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default : return cMenuEditIntItem::ProcessKey(Key);
|
|
||||||
}
|
|
||||||
return osContinue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cMenuEditTranItem -----------------------------------------------------
|
|
||||||
|
|
||||||
class cMenuEditTranItem : public cMenuEditChanItem {
|
|
||||||
private:
|
|
||||||
int number;
|
|
||||||
int transponder;
|
|
||||||
public:
|
|
||||||
cMenuEditTranItem(const char *Name, int *Value);
|
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
};
|
|
||||||
|
|
||||||
cMenuEditTranItem::cMenuEditTranItem(const char *Name, int *Value)
|
|
||||||
:cMenuEditChanItem(Name, Value)
|
|
||||||
{
|
|
||||||
number = 0;
|
|
||||||
transponder = *Value;
|
|
||||||
cChannel *channel = Channels.First();
|
|
||||||
while (channel) {
|
|
||||||
if (!channel->GroupSep() && ISTRANSPONDER(channel->Frequency(), *Value)) {
|
|
||||||
number = channel->Number();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
channel = (cChannel *)channel->Next();
|
|
||||||
}
|
|
||||||
*Value = number;
|
|
||||||
Set();
|
|
||||||
*Value = transponder;
|
|
||||||
}
|
|
||||||
|
|
||||||
eOSState cMenuEditTranItem::ProcessKey(eKeys Key)
|
|
||||||
{
|
|
||||||
*value = number;
|
|
||||||
eOSState state = cMenuEditChanItem::ProcessKey(Key);
|
|
||||||
number = *value;
|
|
||||||
cChannel *channel = Channels.GetByNumber(*value);
|
|
||||||
if (channel)
|
|
||||||
transponder = channel->Frequency();
|
|
||||||
*value = transponder;
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cMenuEditDayItem ------------------------------------------------------
|
|
||||||
|
|
||||||
class cMenuEditDayItem : public cMenuEditIntItem {
|
|
||||||
protected:
|
|
||||||
static int days[];
|
|
||||||
int d;
|
|
||||||
virtual void Set(void);
|
|
||||||
public:
|
|
||||||
cMenuEditDayItem(const char *Name, int *Value);
|
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
};
|
|
||||||
|
|
||||||
int cMenuEditDayItem::days[] ={ cTimer::ParseDay("M------"),
|
|
||||||
cTimer::ParseDay("-T-----"),
|
|
||||||
cTimer::ParseDay("--W----"),
|
|
||||||
cTimer::ParseDay("---T---"),
|
|
||||||
cTimer::ParseDay("----F--"),
|
|
||||||
cTimer::ParseDay("-----S-"),
|
|
||||||
cTimer::ParseDay("------S"),
|
|
||||||
cTimer::ParseDay("MTWTF--"),
|
|
||||||
cTimer::ParseDay("MTWTFS-"),
|
|
||||||
cTimer::ParseDay("MTWTFSS"),
|
|
||||||
cTimer::ParseDay("-----SS"),
|
|
||||||
0 };
|
|
||||||
|
|
||||||
cMenuEditDayItem::cMenuEditDayItem(const char *Name, int *Value)
|
|
||||||
:cMenuEditIntItem(Name, Value, -INT_MAX, 31)
|
|
||||||
{
|
|
||||||
d = -1;
|
|
||||||
if (*value < 0) {
|
|
||||||
int n = 0;
|
|
||||||
while (days[n]) {
|
|
||||||
if (days[n] == *value) {
|
|
||||||
d = n;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Set();
|
|
||||||
}
|
|
||||||
|
|
||||||
void cMenuEditDayItem::Set(void)
|
|
||||||
{
|
|
||||||
SetValue(cTimer::PrintDay(*value));
|
|
||||||
}
|
|
||||||
|
|
||||||
eOSState cMenuEditDayItem::ProcessKey(eKeys Key)
|
|
||||||
{
|
|
||||||
switch (Key) {
|
|
||||||
case kLeft|k_Repeat:
|
|
||||||
case kLeft: if (d > 0)
|
|
||||||
*value = days[--d];
|
|
||||||
else if (d == 0) {
|
|
||||||
*value = 31;
|
|
||||||
d = -1;
|
|
||||||
}
|
|
||||||
else if (*value == 1) {
|
|
||||||
d = sizeof(days) / sizeof(int) - 2;
|
|
||||||
*value = days[d];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return cMenuEditIntItem::ProcessKey(Key);
|
|
||||||
Set();
|
|
||||||
break;
|
|
||||||
case kRight|k_Repeat:
|
|
||||||
case kRight: if (d >= 0) {
|
|
||||||
*value = days[++d];
|
|
||||||
if (*value == 0) {
|
|
||||||
*value = 1;
|
|
||||||
d = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (*value == 31) {
|
|
||||||
d = 0;
|
|
||||||
*value = days[d];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return cMenuEditIntItem::ProcessKey(Key);
|
|
||||||
Set();
|
|
||||||
break;
|
|
||||||
default : return cMenuEditIntItem::ProcessKey(Key);
|
|
||||||
}
|
|
||||||
return osContinue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cMenuEditDateItem -----------------------------------------------------
|
|
||||||
|
|
||||||
class cMenuEditDateItem : public cMenuEditItem {
|
|
||||||
protected:
|
|
||||||
time_t *value;
|
|
||||||
virtual void Set(void);
|
|
||||||
public:
|
|
||||||
cMenuEditDateItem(const char *Name, time_t *Value);
|
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
};
|
|
||||||
|
|
||||||
cMenuEditDateItem::cMenuEditDateItem(const char *Name, time_t *Value)
|
|
||||||
:cMenuEditItem(Name)
|
|
||||||
{
|
|
||||||
value = Value;
|
|
||||||
Set();
|
|
||||||
}
|
|
||||||
|
|
||||||
void cMenuEditDateItem::Set(void)
|
|
||||||
{
|
|
||||||
#define DATEBUFFERSIZE 32
|
|
||||||
char buf[DATEBUFFERSIZE];
|
|
||||||
if (*value) {
|
|
||||||
struct tm tm_r;
|
|
||||||
localtime_r(value, &tm_r);
|
|
||||||
strftime(buf, DATEBUFFERSIZE, "%Y-%m-%d ", &tm_r);
|
|
||||||
strcat(buf, WeekDayName(tm_r.tm_wday));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*buf = 0;
|
|
||||||
SetValue(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
eOSState cMenuEditDateItem::ProcessKey(eKeys Key)
|
|
||||||
{
|
|
||||||
eOSState state = cMenuEditItem::ProcessKey(Key);
|
|
||||||
|
|
||||||
if (state == osUnknown) {
|
|
||||||
if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
|
||||||
*value -= SECSINDAY;
|
|
||||||
if (*value < time(NULL))
|
|
||||||
*value = 0;
|
|
||||||
}
|
|
||||||
else if (NORMALKEY(Key) == kRight) {
|
|
||||||
if (!*value)
|
|
||||||
*value = cTimer::SetTime(time(NULL), 0);
|
|
||||||
*value += SECSINDAY;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return state;
|
|
||||||
Set();
|
|
||||||
state = osContinue;
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cMenuEditTimeItem -----------------------------------------------------
|
|
||||||
|
|
||||||
class cMenuEditTimeItem : public cMenuEditItem {
|
|
||||||
protected:
|
|
||||||
int *value;
|
|
||||||
int hh, mm;
|
|
||||||
int pos;
|
|
||||||
virtual void Set(void);
|
|
||||||
public:
|
|
||||||
cMenuEditTimeItem(const char *Name, int *Value);
|
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
|
||||||
};
|
|
||||||
|
|
||||||
cMenuEditTimeItem::cMenuEditTimeItem(const char *Name, int *Value)
|
|
||||||
:cMenuEditItem(Name)
|
|
||||||
{
|
|
||||||
value = Value;
|
|
||||||
hh = *value / 100;
|
|
||||||
mm = *value % 100;
|
|
||||||
pos = 0;
|
|
||||||
Set();
|
|
||||||
}
|
|
||||||
|
|
||||||
void cMenuEditTimeItem::Set(void)
|
|
||||||
{
|
|
||||||
char buf[10];
|
|
||||||
switch (pos) {
|
|
||||||
case 1: snprintf(buf, sizeof(buf), "%01d-:--", hh / 10); break;
|
|
||||||
case 2: snprintf(buf, sizeof(buf), "%02d:--", hh); break;
|
|
||||||
case 3: snprintf(buf, sizeof(buf), "%02d:%01d-", hh, mm / 10); break;
|
|
||||||
default: snprintf(buf, sizeof(buf), "%02d:%02d", hh, mm);
|
|
||||||
}
|
|
||||||
SetValue(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
eOSState cMenuEditTimeItem::ProcessKey(eKeys Key)
|
|
||||||
{
|
|
||||||
eOSState state = cMenuEditItem::ProcessKey(Key);
|
|
||||||
|
|
||||||
if (state == osUnknown) {
|
|
||||||
if (k0 <= Key && Key <= k9) {
|
|
||||||
if (fresh || pos > 3) {
|
|
||||||
pos = 0;
|
|
||||||
fresh = false;
|
|
||||||
}
|
|
||||||
int n = Key - k0;
|
|
||||||
switch (pos) {
|
|
||||||
case 0: if (n <= 2) {
|
|
||||||
hh = n * 10;
|
|
||||||
mm = 0;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1: if (hh + n <= 23) {
|
|
||||||
hh += n;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2: if (n <= 5) {
|
|
||||||
mm += n * 10;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3: if (mm + n <= 59) {
|
|
||||||
mm += n;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
|
||||||
if (--mm < 0) {
|
|
||||||
mm = 59;
|
|
||||||
if (--hh < 0)
|
|
||||||
hh = 23;
|
|
||||||
}
|
|
||||||
fresh = true;
|
|
||||||
}
|
|
||||||
else if (NORMALKEY(Key) == kRight) {
|
|
||||||
if (++mm > 59) {
|
|
||||||
mm = 0;
|
|
||||||
if (++hh > 23)
|
|
||||||
hh = 0;
|
|
||||||
}
|
|
||||||
fresh = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return state;
|
|
||||||
*value = hh * 100 + mm;
|
|
||||||
Set();
|
|
||||||
state = osContinue;
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cMenuEditCaItem -------------------------------------------------------
|
// --- cMenuEditCaItem -------------------------------------------------------
|
||||||
|
|
||||||
class cMenuEditCaItem : public cMenuEditIntItem {
|
class cMenuEditCaItem : public cMenuEditIntItem {
|
||||||
|
279
menuitems.c
279
menuitems.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menuitems.c 1.15 2004/02/24 12:38:43 kls Exp $
|
* $Id: menuitems.c 1.16 2004/03/28 09:17:51 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menuitems.h"
|
#include "menuitems.h"
|
||||||
@ -555,6 +555,283 @@ eOSState cMenuTextItem::ProcessKey(eKeys Key)
|
|||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditChanItem -----------------------------------------------------
|
||||||
|
|
||||||
|
cMenuEditChanItem::cMenuEditChanItem(const char *Name, int *Value)
|
||||||
|
:cMenuEditIntItem(Name, Value, 1, Channels.MaxNumber())
|
||||||
|
{
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuEditChanItem::Set(void)
|
||||||
|
{
|
||||||
|
char buf[255];
|
||||||
|
cChannel *channel = Channels.GetByNumber(*value);
|
||||||
|
snprintf(buf, sizeof(buf), "%d %s", *value, channel ? channel->Name() : "");
|
||||||
|
SetValue(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditChanItem::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
int delta = 1;
|
||||||
|
|
||||||
|
switch (Key) {
|
||||||
|
case kLeft|k_Repeat:
|
||||||
|
case kLeft: delta = -1;
|
||||||
|
case kRight|k_Repeat:
|
||||||
|
case kRight:
|
||||||
|
{
|
||||||
|
cChannel *channel = Channels.GetByNumber(*value + delta, delta);
|
||||||
|
if (channel) {
|
||||||
|
*value = channel->Number();
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default : return cMenuEditIntItem::ProcessKey(Key);
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditTranItem -----------------------------------------------------
|
||||||
|
|
||||||
|
cMenuEditTranItem::cMenuEditTranItem(const char *Name, int *Value)
|
||||||
|
:cMenuEditChanItem(Name, Value)
|
||||||
|
{
|
||||||
|
number = 0;
|
||||||
|
transponder = *Value;
|
||||||
|
cChannel *channel = Channels.First();
|
||||||
|
while (channel) {
|
||||||
|
if (!channel->GroupSep() && ISTRANSPONDER(channel->Frequency(), *Value)) {
|
||||||
|
number = channel->Number();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
channel = (cChannel *)channel->Next();
|
||||||
|
}
|
||||||
|
*Value = number;
|
||||||
|
Set();
|
||||||
|
*Value = transponder;
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditTranItem::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
*value = number;
|
||||||
|
eOSState state = cMenuEditChanItem::ProcessKey(Key);
|
||||||
|
number = *value;
|
||||||
|
cChannel *channel = Channels.GetByNumber(*value);
|
||||||
|
if (channel)
|
||||||
|
transponder = channel->Frequency();
|
||||||
|
*value = transponder;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditDayItem ------------------------------------------------------
|
||||||
|
|
||||||
|
int cMenuEditDayItem::days[] ={ cTimer::ParseDay("M------"),
|
||||||
|
cTimer::ParseDay("-T-----"),
|
||||||
|
cTimer::ParseDay("--W----"),
|
||||||
|
cTimer::ParseDay("---T---"),
|
||||||
|
cTimer::ParseDay("----F--"),
|
||||||
|
cTimer::ParseDay("-----S-"),
|
||||||
|
cTimer::ParseDay("------S"),
|
||||||
|
cTimer::ParseDay("MTWTF--"),
|
||||||
|
cTimer::ParseDay("MTWTFS-"),
|
||||||
|
cTimer::ParseDay("MTWTFSS"),
|
||||||
|
cTimer::ParseDay("-----SS"),
|
||||||
|
0 };
|
||||||
|
|
||||||
|
cMenuEditDayItem::cMenuEditDayItem(const char *Name, int *Value)
|
||||||
|
:cMenuEditIntItem(Name, Value, -INT_MAX, 31)
|
||||||
|
{
|
||||||
|
d = -1;
|
||||||
|
if (*value < 0) {
|
||||||
|
int n = 0;
|
||||||
|
while (days[n]) {
|
||||||
|
if (days[n] == *value) {
|
||||||
|
d = n;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuEditDayItem::Set(void)
|
||||||
|
{
|
||||||
|
SetValue(cTimer::PrintDay(*value));
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditDayItem::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
switch (Key) {
|
||||||
|
case kLeft|k_Repeat:
|
||||||
|
case kLeft: if (d > 0)
|
||||||
|
*value = days[--d];
|
||||||
|
else if (d == 0) {
|
||||||
|
*value = 31;
|
||||||
|
d = -1;
|
||||||
|
}
|
||||||
|
else if (*value == 1) {
|
||||||
|
d = sizeof(days) / sizeof(int) - 2;
|
||||||
|
*value = days[d];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return cMenuEditIntItem::ProcessKey(Key);
|
||||||
|
Set();
|
||||||
|
break;
|
||||||
|
case kRight|k_Repeat:
|
||||||
|
case kRight: if (d >= 0) {
|
||||||
|
*value = days[++d];
|
||||||
|
if (*value == 0) {
|
||||||
|
*value = 1;
|
||||||
|
d = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (*value == 31) {
|
||||||
|
d = 0;
|
||||||
|
*value = days[d];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return cMenuEditIntItem::ProcessKey(Key);
|
||||||
|
Set();
|
||||||
|
break;
|
||||||
|
default : return cMenuEditIntItem::ProcessKey(Key);
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditDateItem -----------------------------------------------------
|
||||||
|
|
||||||
|
cMenuEditDateItem::cMenuEditDateItem(const char *Name, time_t *Value)
|
||||||
|
:cMenuEditItem(Name)
|
||||||
|
{
|
||||||
|
value = Value;
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuEditDateItem::Set(void)
|
||||||
|
{
|
||||||
|
#define DATEBUFFERSIZE 32
|
||||||
|
char buf[DATEBUFFERSIZE];
|
||||||
|
if (*value) {
|
||||||
|
struct tm tm_r;
|
||||||
|
localtime_r(value, &tm_r);
|
||||||
|
strftime(buf, DATEBUFFERSIZE, "%Y-%m-%d ", &tm_r);
|
||||||
|
strcat(buf, WeekDayName(tm_r.tm_wday));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*buf = 0;
|
||||||
|
SetValue(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditDateItem::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
eOSState state = cMenuEditItem::ProcessKey(Key);
|
||||||
|
|
||||||
|
if (state == osUnknown) {
|
||||||
|
if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
||||||
|
*value -= SECSINDAY;
|
||||||
|
if (*value < time(NULL))
|
||||||
|
*value = 0;
|
||||||
|
}
|
||||||
|
else if (NORMALKEY(Key) == kRight) {
|
||||||
|
if (!*value)
|
||||||
|
*value = cTimer::SetTime(time(NULL), 0);
|
||||||
|
*value += SECSINDAY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return state;
|
||||||
|
Set();
|
||||||
|
state = osContinue;
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditTimeItem -----------------------------------------------------
|
||||||
|
|
||||||
|
cMenuEditTimeItem::cMenuEditTimeItem(const char *Name, int *Value)
|
||||||
|
:cMenuEditItem(Name)
|
||||||
|
{
|
||||||
|
value = Value;
|
||||||
|
hh = *value / 100;
|
||||||
|
mm = *value % 100;
|
||||||
|
pos = 0;
|
||||||
|
Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuEditTimeItem::Set(void)
|
||||||
|
{
|
||||||
|
char buf[10];
|
||||||
|
switch (pos) {
|
||||||
|
case 1: snprintf(buf, sizeof(buf), "%01d-:--", hh / 10); break;
|
||||||
|
case 2: snprintf(buf, sizeof(buf), "%02d:--", hh); break;
|
||||||
|
case 3: snprintf(buf, sizeof(buf), "%02d:%01d-", hh, mm / 10); break;
|
||||||
|
default: snprintf(buf, sizeof(buf), "%02d:%02d", hh, mm);
|
||||||
|
}
|
||||||
|
SetValue(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditTimeItem::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
eOSState state = cMenuEditItem::ProcessKey(Key);
|
||||||
|
|
||||||
|
if (state == osUnknown) {
|
||||||
|
if (k0 <= Key && Key <= k9) {
|
||||||
|
if (fresh || pos > 3) {
|
||||||
|
pos = 0;
|
||||||
|
fresh = false;
|
||||||
|
}
|
||||||
|
int n = Key - k0;
|
||||||
|
switch (pos) {
|
||||||
|
case 0: if (n <= 2) {
|
||||||
|
hh = n * 10;
|
||||||
|
mm = 0;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1: if (hh + n <= 23) {
|
||||||
|
hh += n;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: if (n <= 5) {
|
||||||
|
mm += n * 10;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3: if (mm + n <= 59) {
|
||||||
|
mm += n;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly?
|
||||||
|
if (--mm < 0) {
|
||||||
|
mm = 59;
|
||||||
|
if (--hh < 0)
|
||||||
|
hh = 23;
|
||||||
|
}
|
||||||
|
fresh = true;
|
||||||
|
}
|
||||||
|
else if (NORMALKEY(Key) == kRight) {
|
||||||
|
if (++mm > 59) {
|
||||||
|
mm = 0;
|
||||||
|
if (++hh > 23)
|
||||||
|
hh = 0;
|
||||||
|
}
|
||||||
|
fresh = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return state;
|
||||||
|
*value = hh * 100 + mm;
|
||||||
|
Set();
|
||||||
|
state = osContinue;
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cMenuSetupPage --------------------------------------------------------
|
// --- cMenuSetupPage --------------------------------------------------------
|
||||||
|
|
||||||
cMenuSetupPage::cMenuSetupPage(void)
|
cMenuSetupPage::cMenuSetupPage(void)
|
||||||
|
49
menuitems.h
49
menuitems.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menuitems.h 1.6 2004/02/24 11:55:14 kls Exp $
|
* $Id: menuitems.h 1.7 2004/03/28 09:16:24 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __MENUITEMS_H
|
#ifndef __MENUITEMS_H
|
||||||
@ -119,6 +119,53 @@ public:
|
|||||||
virtual eOSState ProcessKey(eKeys Key);
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class cMenuEditChanItem : public cMenuEditIntItem {
|
||||||
|
protected:
|
||||||
|
virtual void Set(void);
|
||||||
|
public:
|
||||||
|
cMenuEditChanItem(const char *Name, int *Value);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cMenuEditTranItem : public cMenuEditChanItem {
|
||||||
|
private:
|
||||||
|
int number;
|
||||||
|
int transponder;
|
||||||
|
public:
|
||||||
|
cMenuEditTranItem(const char *Name, int *Value);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cMenuEditDayItem : public cMenuEditIntItem {
|
||||||
|
protected:
|
||||||
|
static int days[];
|
||||||
|
int d;
|
||||||
|
virtual void Set(void);
|
||||||
|
public:
|
||||||
|
cMenuEditDayItem(const char *Name, int *Value);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cMenuEditDateItem : public cMenuEditItem {
|
||||||
|
protected:
|
||||||
|
time_t *value;
|
||||||
|
virtual void Set(void);
|
||||||
|
public:
|
||||||
|
cMenuEditDateItem(const char *Name, time_t *Value);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cMenuEditTimeItem : public cMenuEditItem {
|
||||||
|
protected:
|
||||||
|
int *value;
|
||||||
|
int hh, mm;
|
||||||
|
int pos;
|
||||||
|
virtual void Set(void);
|
||||||
|
public:
|
||||||
|
cMenuEditTimeItem(const char *Name, int *Value);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
class cPlugin;
|
class cPlugin;
|
||||||
|
|
||||||
class cMenuSetupPage : public cOsdMenu {
|
class cMenuSetupPage : public cOsdMenu {
|
||||||
|
Loading…
Reference in New Issue
Block a user