- add overwrite support
[enigma2.git] / lib / gui / einput.h
1 #ifndef __lib_gui_einput_h
2 #define __lib_gui_einput_h
3
4 #include <lib/gui/elabel.h>
5 #include <lib/python/connections.h>
6
7 class eInputContent;
8
9 class eInput: public eLabel
10 {
11 public:
12         eInput(eWidget *parent);
13         virtual ~eInput();
14         PSignal0<void> changed;
15
16         int m_cursor;
17         
18         enum InputActions {
19                 moveLeft, 
20                 moveRight, 
21                 moveHome, 
22                 moveEnd,
23                 deleteForward,
24                 deleteBackward,
25                 toggleOverwrite
26         };
27         
28         void setContent(eInputContent *cnt);
29         
30         void setOverwriteMode(int o);
31         
32         int getNumber();
33 protected:
34         int m_mode;
35         ePtr<eInputContent> m_content;
36         int event(int event, void *data=0, void *data2=0);
37 };
38
39 class eInputContent: public iObject
40 {
41 public:
42                 /* management stuff */
43         void setInput(eInput *widget);
44                 /* display stuff */
45         virtual void getDisplay(std::string &res, int &cursor)=0;
46
47                 /* movement / user actions */
48         enum {
49                 dirLeft, dirRight,
50                 dirHome, dirEnd,
51                         /* contents can define their own directions */
52                 dirUser
53         };
54         virtual void moveCursor(int dir)=0;
55         
56         enum {
57                 deleteForward, deleteBackward
58         };
59         virtual void deleteChar(int dir)=0;
60         
61                 /* no movement keys except stuff like '.' or so*/
62         virtual int haveKey(int code, int overwrite)=0;
63         
64         virtual int isValid()=0;
65 protected:
66         eInput *m_input;
67 };
68
69 class eInputContentNumber: public eInputContent
70 {
71         DECLARE_REF(eInputContentNumber);
72 public:
73         eInputContentNumber(int cur, int min, int max);
74
75         void getDisplay(std::string &res, int &cursor);
76         void moveCursor(int dir);
77         int haveKey(int code, int overwrite);
78         void deleteChar(int dir);
79         int isValid();
80         
81 private:
82         void recalcLen();
83         
84         void insertDigit(int pos, int dig);
85         
86         int m_value;
87         int m_cursor, m_len;
88         
89         int m_min, m_max;
90 };
91
92 #endif