summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2003-01-19 14:59:46 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2003-01-19 14:59:46 +0100
commit413b22dc636dbd78f7acd0dd816cde933fe6a78d (patch)
treeecedee45e76a4de00196c01743160910ce3a6403
parentc1dcc3e5a597f6feb470c83577e4684a188dff1a (diff)
downloadvdr-413b22dc636dbd78f7acd0dd816cde933fe6a78d.tar.gz
vdr-413b22dc636dbd78f7acd0dd816cde933fe6a78d.tar.bz2
Implemented actual user input for CAM enquiry menus
-rw-r--r--HISTORY3
-rw-r--r--MANUAL4
-rw-r--r--menu.c12
-rw-r--r--menu.h3
-rw-r--r--menuitems.c56
-rw-r--r--menuitems.h13
6 files changed, 84 insertions, 7 deletions
diff --git a/HISTORY b/HISTORY
index 296ab15b..221eb197 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1917,7 +1917,8 @@ Video Disk Recorder Revision History
EPG data, that string is now limited in length when used in a recording's
file name.
-2003-01-12: Version 1.1.22
+2003-01-19: Version 1.1.22
- Added 'Hrvatska radiotelevizija' and 'RTV Slovenija' to ca.conf (thanks to
Paul Gohn).
+- Implemented actual user input for CAM enquiry menus.
diff --git a/MANUAL b/MANUAL
index 3c0504e7..e4af8d1c 100644
--- a/MANUAL
+++ b/MANUAL
@@ -23,6 +23,10 @@ Video Disk Recorder User's Manual
Blue - Stop/Resume Mark On/Off(1) - Summary Stop
0..9 Ch select - - - Numeric inp. Exec cmd(2) Editing
+ In a numerical input field (like the response to a CAM enquiry) the keys 0..9
+ are used to enter the data, and the Left key can be used to delete the last
+ entered digit.
+
If your remote control provides additional keys, they can be used for the
following functions:
diff --git a/menu.c b/menu.c
index e3a4c182..081a4ba1 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.231 2003/01/06 16:13:53 kls Exp $
+ * $Id: menu.c 1.232 2003/01/19 14:59:46 kls Exp $
*/
#include "menu.h"
@@ -1572,11 +1572,15 @@ eOSState cMenuCam::ProcessKey(eKeys Key)
//XXX this is just quick and dirty - make this a separate display object
cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry)
-:cOsdMenu("")
+:cOsdMenu("", 10)
{
ciEnquiry = CiEnquiry;
+ int Length = ciEnquiry->ExpectedLength();
+ input = MALLOC(char, Length + 1);
+ *input = 0;
replied = false;
SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM");
+ Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind()));
Display();
}
@@ -1584,12 +1588,14 @@ cMenuCamEnquiry::~cMenuCamEnquiry()
{
if (!replied)
ciEnquiry->Cancel();
+ free(input);
delete ciEnquiry;
}
eOSState cMenuCamEnquiry::Reply(void)
{
- ciEnquiry->Reply("1234");//XXX implement actual user input
+ //XXX check length???
+ ciEnquiry->Reply(input);
replied = true;
return osEnd;
}
diff --git a/menu.h b/menu.h
index e886f180..43a0d8f9 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 1.52 2003/01/06 10:04:05 kls Exp $
+ * $Id: menu.h 1.53 2003/01/12 14:54:05 kls Exp $
*/
#ifndef __MENU_H
@@ -73,6 +73,7 @@ public:
class cMenuCamEnquiry : public cOsdMenu {
private:
cCiEnquiry *ciEnquiry;
+ char *input;
bool replied;
eOSState Reply(void);
public:
diff --git a/menuitems.c b/menuitems.c
index c92d5318..56b91995 100644
--- a/menuitems.c
+++ b/menuitems.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menuitems.c 1.11 2002/12/15 11:05:19 kls Exp $
+ * $Id: menuitems.c 1.12 2003/01/18 13:34:40 kls Exp $
*/
#include "menuitems.h"
@@ -109,6 +109,60 @@ void cMenuEditBoolItem::Set(void)
SetValue(buf);
}
+// --- cMenuEditNumItem ------------------------------------------------------
+
+cMenuEditNumItem::cMenuEditNumItem(const char *Name, char *Value, int Length, bool Blind)
+:cMenuEditItem(Name)
+{
+ value = Value;
+ length = Length;
+ blind = Blind;
+ Set();
+}
+
+void cMenuEditNumItem::Set(void)
+{
+ if (blind) {
+ char buf[length + 1];
+ int i;
+ for (i = 0; i < length && value[i]; i++)
+ buf[i] = '*';
+ buf[i] = 0;
+ SetValue(buf);
+ }
+ else
+ SetValue(value);
+}
+
+eOSState cMenuEditNumItem::ProcessKey(eKeys Key)
+{
+ eOSState state = cMenuEditItem::ProcessKey(Key);
+
+ if (state == osUnknown) {
+ Key = NORMALKEY(Key);
+ switch (Key) {
+ case kLeft: {
+ int l = strlen(value);
+ if (l > 0)
+ value[l - 1] = 0;
+ }
+ break;
+ case k0 ... k9: {
+ int l = strlen(value);
+ if (l < length) {
+ value[l] = Key - k0 + '0';
+ value[l + 1] = 0;
+ }
+ }
+ break;
+ default: return state;
+ }
+ Set();
+ state = osContinue;
+ }
+ return state;
+}
+
// --- cMenuEditChrItem ------------------------------------------------------
cMenuEditChrItem::cMenuEditChrItem(const char *Name, char *Value, const char *Allowed)
diff --git a/menuitems.h b/menuitems.h
index 4752d4bb..f9b2ff30 100644
--- a/menuitems.h
+++ b/menuitems.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menuitems.h 1.4 2002/08/15 11:28:26 kls Exp $
+ * $Id: menuitems.h 1.5 2003/01/12 15:06:23 kls Exp $
*/
#ifndef __MENUITEMS_H
@@ -42,6 +42,17 @@ public:
cMenuEditBoolItem(const char *Name, int *Value, const char *FalseString = NULL, const char *TrueString = NULL);
};
+class cMenuEditNumItem : public cMenuEditItem {
+protected:
+ char *value;
+ int length;
+ bool blind;
+ virtual void Set(void);
+public:
+ cMenuEditNumItem(const char *Name, char *Value, int Length, bool Blind = false);
+ virtual eOSState ProcessKey(eKeys Key);
+ };
+
class cMenuEditChrItem : public cMenuEditItem {
private:
char *value;