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