1 #ifndef YINPUT_H
2 #define YINPUT_H
3 
4 #include "ytimer.h"
5 #include "yaction.h"
6 #include "ypopup.h"
7 #include "ystring.h"
8 
9 class YMenu;
10 class YInputLine;
11 class YInputMenu;
12 class YWideString;
13 
14 class YInputListener {
15 public:
16     virtual void inputReturn(YInputLine* input) = 0;
17     virtual void inputEscape(YInputLine* input) = 0;
18     virtual void inputLostFocus(YInputLine* input) = 0;
19 protected:
~YInputListener()20     virtual ~YInputListener() {}
21 };
22 
23 class YInputLine:
24     public YWindow,
25     private YTimerListener,
26     private YActionListener,
27     private YPopDownListener
28 {
29 public:
30     YInputLine(YWindow *parent = nullptr, YInputListener *listener = nullptr);
31     virtual ~YInputLine();
32 
33     void setText(mstring text, bool asMarked);
34     mstring getText();
getFont()35     YFont getFont() const { return inputFont; }
setListener(YInputListener * listener)36     void setListener(YInputListener* listener) { fListener = listener; }
37 
38     virtual void paint(Graphics &g, const YRect &r);
39     virtual bool handleKey(const XKeyEvent &key);
40     virtual void handleButton(const XButtonEvent &button);
41     virtual void handleMotion(const XMotionEvent &motion);
42     virtual void handleFocus(const XFocusChangeEvent &focus);
43     virtual void handleClickDown(const XButtonEvent &down, int count);
44     virtual void handleClick(const XButtonEvent &up, int count);
45     virtual void actionPerformed(YAction action, unsigned int modifiers);
46     virtual void handlePopDown(YPopupWindow *popup);
47     virtual void handleSelection(const XSelectionEvent &selection);
handleExpose(const XExposeEvent & expose)48     virtual void handleExpose(const XExposeEvent& expose) {}
49     virtual void configure(const YRect2& r);
50     virtual bool isFocusTraversable();
51     virtual void lostFocus();
52     virtual void gotFocus();
53     virtual void repaint();
54 
55     bool move(unsigned pos, bool extend);
hasSelection()56     bool hasSelection() const { return curPos != markPos; }
57     void replaceSelection(const char* str, int len);
58     bool deleteSelection();
59     bool deleteNextChar();
60     bool deletePreviousChar();
61     unsigned nextWord(unsigned pos, bool sep);
62     unsigned prevWord(unsigned pos, bool sep);
63     bool deleteNextWord();
64     bool deletePreviousWord();
65     bool deleteToEnd();
66     bool deleteToBegin();
67     void selectAll();
68     void unselectAll();
69     bool cutSelection();
70     bool copySelection();
71     void complete();
72 
73 private:
74     virtual bool handleTimer(YTimer *timer);
75     virtual bool handleAutoScroll(const XMotionEvent &mouse);
76 
77     void limit();
78     void autoScroll(int delta, const XMotionEvent *mouse);
79     unsigned offsetToPos(int offset);
80 
81     YWideString fText;
82     unsigned markPos;
83     unsigned curPos;
84     int leftOfs;
85     int fAutoScrollDelta;
86     bool fHasFocus;
87     bool fCursorVisible;
88     bool fSelecting;
89     const short fBlinkTime;
90     YInputListener* fListener;
91 
92     YFont inputFont;
93     YColorName inputBg;
94     YColorName inputFg;
95     YColorName inputSelectionBg;
96     YColorName inputSelectionFg;
97     lazy<YTimer> cursorBlinkTimer;
98     lazy<YInputMenu> inputMenu;
99 
100 private: // not-used
101     YInputLine(const YInputLine &);
102     YInputLine &operator=(const YInputLine &);
103 
104 };
105 
106 #endif
107 
108 // vim: set sw=4 ts=4 et:
109