- add pageUp/pageDown movements
[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         };
26         
27         void setContent(eInputContent *cnt);
28         
29         int getNumber();
30 protected:
31         ePtr<eInputContent> m_content;
32         int event(int event, void *data=0, void *data2=0);
33 };
34
35 class eInputContent: public iObject
36 {
37 public:
38                 /* management stuff */
39         void setInput(eInput *widget);
40                 /* display stuff */
41         virtual void getDisplay(std::string &res, int &cursor)=0;
42
43                 /* movement / user actions */
44         enum {
45                 dirLeft, dirRight,
46                 dirHome, dirEnd,
47                         /* contents can define their own directions */
48                 dirUser
49         };
50         virtual void moveCursor(int dir)=0;
51         
52         enum {
53                 deleteForward, deleteBackward
54         };
55         virtual void deleteChar(int dir)=0;
56         
57                 /* no movement keys except stuff like '.' or so*/
58         virtual int haveKey(int code)=0;
59         
60         virtual int isValid()=0;
61 protected:
62         eInput *m_input;
63 };
64
65 class eInputContentNumber: public eInputContent
66 {
67         DECLARE_REF(eInputContentNumber);
68 public:
69         eInputContentNumber(int cur, int min, int max);
70
71         void getDisplay(std::string &res, int &cursor);
72         void moveCursor(int dir);
73         int haveKey(int code);
74         void deleteChar(int dir);
75         int isValid();
76         
77 private:
78         void recalcLen();
79         
80         void insertDigit(int pos, int dig);
81         
82         int m_value;
83         int m_cursor, m_len;
84         
85         int m_min, m_max;
86 };
87
88 #endif