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)(); public: LookFrame(Value (*look)()) : look(look) {} }; Value EditFieldEdge(); Value ViewEdge(); void EditFieldEdge_Write(Value); void ViewEdge_Write(Value); CtrlFrame& EditFieldFrame(); CtrlFrame& ViewFrame(); class EditField : public Ctrl { public: virtual void Layout(); virtual void Paint(Draw& draw); virtual void LeftDown(Point p, dword keyflags); virtual void MouseMove(Point p, dword keyflags); virtual void LeftDouble(Point p, dword keyflags); virtual void RightDown(Point p, dword keyflags); virtual Image CursorImage(Point p, dword keyflags); 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(); protected: WString text; int sc; int cursor, anchor; WString undotext; int undocursor, undoanchor; CharFilter filter; const Convert *convert; Font font; WString nulltext; Color nullink; int maxlen; int autosize; byte charset; bool password:1; bool autoformat:1; bool initcaps:1; bool keep_selection:1; bool clickselect:1; bool nobg:1; int GetTextCx(const wchar *text, int n, bool password); void Paints(Draw& w, int& x, int fcy, const wchar *&txt, Color ink, Color paper, int n, bool pwd); int GetStringCx(const wchar *text, int n); int GetCaret(int cursor); int GetCursor(int posx); void Finish(bool refresh = true); void SaveUndo(); void DoAutoFormat(); bool HasBorder(); int GetTy(); void Undo(); void Cut(); void Paste(); void Erase(); void SelectAll(); void MenuBar(Bar& menu); public: static int GetViewHeight(Font font = StdFont()); static int GetStdHeight(Font font = StdFont()); int Insert(int pos, const WString& text); int Insert(int pos, const String& text) { return Insert(pos, text.ToWString()); } int Insert(int pos, const char *text) { return Insert(pos, WString(text)); } void Remove(int pos, int n); void Insert(const WString& text); void Insert(const String& text) { return Insert(text.ToWString()); } void Insert(const char *text) { return Insert(WString(text)); } void Insert(int chr); void Move(int newpos, bool select); void SetSelection(int l = 0, int h = INT_MAX); bool GetSelection(int& l, int& h) const; bool IsSelection() const; bool RemoveSelection(); void Copy(); void SetText(const WString& text); void SetText(const String& t) { SetText(t.ToWString()); } void SetText(const char *t) { SetText(WString(t)); } const WString& GetText() const { return text; } operator const WString&() const { return text; } operator String() const { return text.ToString(); } void operator=(const WString& s) { SetText(s); } int GetLength() const { return text.GetLength(); } void Clear(); void Reset(); EditField& Password(bool pwd = true) { password = pwd; Finish(); return *this; } EditField& SetFilter(int (*f)(int)) { filter = f; return *this; } EditField& SetConvert(const Convert& c) { convert = &c; return *this; } EditField& AutoFormat(bool b = true) { autoformat = b; return *this; } EditField& NoAutoFormat() { return AutoFormat(false); } EditField& SetCharset(byte cs) { charset = cs; return *this; } EditField& SetFont(Font _font); EditField& ClickSelect(bool b = true) { clickselect = b; return *this; } EditField& InitCaps(bool b = true) { initcaps = b; return *this; } EditField& NullText(const char *text = t_("(default)"), Color ink = Brown); EditField& MaxChars(int mc) { maxlen = mc; return *this; } EditField& AutoSize(int maxcx = INT_MAX) { autosize = maxcx; Finish(); return *this; } EditField& NoBackground(bool b = true) { nobg = b; Transparent(); Refresh(); return *this; } CharFilter GetFilter() const { return filter; } const Convert& GetConvert() const { return *convert; } Font GetFont() const { return font; } typedef EditField CLASSNAME; EditField(); virtual ~EditField(); }; template class EditValue : public EditField, public Cv { public: EditValue& operator=(const DataType& t) { SetData(t); return *this; } operator DataType() const { return GetData(); } EditValue() { SetConvert(*this); } }; template class EditMinMax : public EditValue { public: EditMinMax& operator=(const DataType& t) { SetData(t); return *this; } EditMinMax() {} EditMinMax(DataType min, DataType max) { Cv::MinMax(min, max); } EditMinMax& Min(DataType min) { Cv::Min(min); return *this; } EditMinMax& Max(DataType max) { Cv::Max(max); return *this; } EditMinMax& NotNull(bool nn = true) { Cv::NotNull(nn); return *this; } }; template class EditMinMaxNotNull : public EditValue { public: EditMinMaxNotNull& operator=(const DataType& t) { SetData(t); return *this; } EditMinMaxNotNull() { Cv::NotNull(); } EditMinMaxNotNull(DataType min, DataType max) { Cv::NotNull(); Cv::MinMax(min, max); } EditMinMaxNotNull& Min(DataType min) { Cv::Min(min); return *this; } EditMinMaxNotNull& Max(DataType max) { Cv::Max(max); return *this; } EditMinMaxNotNull& NotNull(bool nn = true) { Cv::NotNull(nn); return *this; } }; typedef EditMinMax EditInt; typedef EditMinMax EditDouble; typedef EditMinMax EditDate; typedef EditMinMax EditTime; typedef EditMinMaxNotNull EditIntNotNull; typedef EditMinMaxNotNull EditDoubleNotNull; typedef EditMinMaxNotNull EditDateNotNull; typedef EditMinMaxNotNull EditTimeNotNull; class EditString : public EditValue { public: operator const WString&() const { return GetText(); } EditString& operator=(const WString& data) { SetData(data); return *this; } EditString& operator=(const String& data) { SetData(data); return *this; } EditString() {} EditString(int maxlen) { MaxLen(maxlen); } EditString& MaxLen(int maxlen) { ConvertString::MaxLen(maxlen); return *this; } EditString& NotNull(bool nn = true) { ConvertString::NotNull(nn); return *this; } }; class EditStringNotNull : public EditString { public: EditStringNotNull& operator=(const WString& data) { SetData(data); return *this; } EditStringNotNull& operator=(const String& data) { SetData(data); return *this; } EditStringNotNull() { NotNull(); } EditStringNotNull(int maxlen) { NotNull(); MaxLen(maxlen); } }; class EditIntSpin : public EditInt { public: virtual void MouseWheel(Point p, int zdelta, dword keyflags); virtual bool Key(dword key, int repcnt); protected: SpinButtons sb; void Inc(); void Dec(); void Init(); public: EditIntSpin& ShowSpin(bool s = true) { sb.Show(s); return *this; } EditIntSpin(); EditIntSpin(int min, int max); virtual ~EditIntSpin(); }; class EditDoubleSpin : public EditDouble { public: virtual void MouseWheel(Point p, int zdelta, dword keyflags); virtual bool Key(dword key, int repcnt); protected: void Inc(); void Dec(); void Init(); private: SpinButtons spin; double inc; public: typedef EditDoubleSpin CLASSNAME; EditDoubleSpin(double inc = 0.1); EditDoubleSpin(double min, double max, double inc = 0.1); virtual ~EditDoubleSpin(); EditDoubleSpin& SetInc(double _inc = 0.1) { inc = _inc; return *this; } double GetInc() const { return inc; } EditDoubleSpin& ShowSpin(bool s = true) { spin.Show(s); return *this; } }; class EditDoubleNotNullSpin : public EditDoubleSpin { public: EditDoubleNotNullSpin(double inc = 0.1) : EditDoubleSpin(inc) { NotNull(); } EditDoubleNotNullSpin(double min, double max, double inc = 0.1) : EditDoubleSpin(min, max, inc) { NotNull(); } };