struct TextArrayOps { virtual int GetLength() const = 0; virtual int GetChar(int i) const = 0; bool GetWordSelection(int c, int& sell, int& selh); int GetNextWord(int c); int GetPrevWord(int c); virtual ~TextArrayOps() {} }; class LookFrame : public CtrlFrame { public: virtual void FrameLayout(Rect& r); virtual void FramePaint(Draw& w, const Rect& r); virtual void FrameAddSize(Size& sz); private: Value (*look)(); Value lookv; Value Get() const { return look ? (*look)() : lookv; } public: void Set(const Value& v) { look = NULL; lookv = v; } void Set(Value (*l)()) { look = l; } LookFrame(Value (*look)()) : look(look) {} LookFrame(const Value& v) : lookv(v) { look = NULL; } LookFrame() { look = NULL; } }; Value EditFieldEdge(); Value ViewEdge(); void ViewEdge_Write(Value); CtrlFrame& EditFieldFrame(); CtrlFrame& ViewFrame(); class ActiveEdgeFrame : public CtrlFrame { public: virtual void FrameLayout(Rect& r); virtual void FramePaint(Draw& w, const Rect& r); virtual void FrameAddSize(Size& sz); private: const Value *edge; const Ctrl *ctrl; bool mousein; public: void Set(const Ctrl *ctrl, const Value *edge, bool active); void Mouse(bool in) { mousein = in; } ActiveEdgeFrame() { edge = NULL; mousein = false; } }; class EditField : public Ctrl, private TextArrayOps { public: virtual void Layout(); virtual void Paint(Draw& draw); virtual void LeftDown(Point p, dword keyflags); virtual void MiddleDown(Point p, dword keyflags); virtual void MouseMove(Point p, dword keyflags); virtual void LeftDouble(Point p, dword keyflags); virtual void LeftTriple(Point p, dword keyflags); virtual void LeftDrag(Point p, dword flags); virtual void LeftUp(Point p, dword flags); virtual void RightDown(Point p, dword keyflags); virtual void MouseEnter(Point p, dword keyflags); virtual void MouseLeave(); virtual Image CursorImage(Point p, dword keyflags); virtual void DragAndDrop(Point p, PasteClip& d); virtual void DragRepeat(Point p); virtual void DragLeave(); virtual bool Key(dword key, int rep); virtual void GotFocus(); virtual void LostFocus(); virtual Size GetMinSize() const; virtual void SetData(const Value& data); virtual Value GetData() const; virtual void CancelMode(); virtual String GetSelectionData(const String& fmt) const; public: struct Style : ChStyle