1 #ifndef _LogPosCtrl_LogPosCtrl_h 2 #define _LogPosCtrl_LogPosCtrl_h 3 4 #include <CtrlLib/CtrlLib.h> 5 using namespace Upp; 6 7 #include <PopUpC/PopUpC.h> 8 #include <Gen/VTypes.h> 9 10 #define LAYOUTFILE <LogPosCtrl/LogPosPopUp.lay> 11 #include <CtrlCore/lay.h> 12 13 class LogPosPopUp : public WithLogPosPopUpLayout<WithCloserKeys<PopUpC> > { 14 public: 15 typedef LogPosPopUp CLASSNAME; 16 LogPosPopUp(); 17 18 static Rect CtrlRect(Ctrl::LogPos pos, Size sz); 19 static Rect CtrlRectZ(Ctrl::LogPos pos, Size sz); 20 static Ctrl::LogPos MakeLogPos(int ax, int ay, const Rect& r, Size sz); 21 static Ctrl::LogPos MakeLogPos(Ctrl::LogPos p, const Rect& r, Size sz); 22 static Ctrl::LogPos MakeLogPos(Ctrl::LogPos p, const Ctrl::LogPos& pos, Size sz); 23 static Ctrl::LogPos MakeLogPos(Ctrl::LogPos p, const Ctrl& c); 24 25 virtual void Updated(); 26 virtual Value GetData() const; 27 virtual void SetData(const Value& v); 28 29 Ctrl::LogPos Generate() const; //obsolete Get()30 Ctrl::LogPos Get() const { return pos; } 31 void Set(const Ctrl::LogPos& p); 32 33 using PopUpC::PopUp; PopUp(Ctrl * owner,const Ctrl::LogPos & p)34 void PopUp(Ctrl* owner, const Ctrl::LogPos& p) { Set(p); Update(); PopUpC::PopUp(owner); } 35 Serialize(Stream & s)36 virtual void Serialize(Stream& s) { s % pos; } 37 38 Callback WhenSizeChange; 39 Callback WhenAlignChange; 40 41 void XaCB(); 42 void XbCB(); 43 void YaCB(); 44 void YbCB(); 45 LRCB()46 void LRCB() { XAlign(); DoAlignAction(); } TBCB()47 void TBCB() { YAlign(); DoAlignAction(); } 48 LTCB()49 void LTCB() { l = true; r = false; t = true; b = false; XAlign(); YAlign(); DoAlignAction(); } RTCB()50 void RTCB() { l = false; r = true; t = true; b = false; XAlign(); YAlign(); DoAlignAction(); } LBCB()51 void LBCB() { l = true; r = false; t = false; b = true; XAlign(); YAlign(); DoAlignAction(); } RBCB()52 void RBCB() { l = false; r = true; t = false; b = true; XAlign(); YAlign(); DoAlignAction(); } 53 HCCB()54 void HCCB() { l = false; r = false; XAlign(); DoAlignAction(); } VCCB()55 void VCCB() { t = false; b = false; YAlign(); DoAlignAction(); } CCCB()56 void CCCB() { l = false; r = false; t = false; b = false; XAlign(); YAlign(); DoAlignAction(); } 57 HSCB()58 void HSCB() { l = true; r = true; XAlign(); DoAlignAction(); } VSCB()59 void VSCB() { t = true; b = true; YAlign(); DoAlignAction(); } SSCB()60 void SSCB() { l = true; r = true; t = true; b = true; XAlign(); YAlign(); DoAlignAction(); } 61 62 protected: 63 void XAlign(); 64 void YAlign(); DoAlignAction()65 void DoAlignAction() { WhenAlignChange(); UpdateAction(); } 66 67 Ctrl::LogPos pos; 68 }; 69 70 class LogPosCtrl : public StaticText 71 { 72 public: 73 typedef LogPosCtrl CLASSNAME; 74 LogPosCtrl(); 75 76 virtual void LeftDown(Point p, dword keyflags); 77 virtual void Updated(); 78 SetBaseSize(const Size & sz)79 void SetBaseSize(const Size& sz) { bsz = sz; } ClearBaseSize()80 void ClearBaseSize() { bsz = Null; } GetBaseSize()81 Size GetBaseSize() const { return bsz; } 82 83 virtual Value GetData() const; 84 virtual void SetData(const Value& v); 85 Get()86 Ctrl::LogPos Get() const { return pos; } 87 void Set(const Ctrl::LogPos& p, const Size& sz = Null) { pos = p; bsz = sz; Update(); } Set(Ctrl & c)88 void Set(Ctrl& c) { pos = c.GetPos(); bsz = c.GetParent() ? c.GetParent()->GetSize() : Null; Update(); } 89 void Drop(); 90 Serialize(Stream & s)91 virtual void Serialize(Stream& s) { s % pos; } 92 93 void OnReject(); 94 void OnAccept(); 95 void OnAction(); 96 void OnSizeChange(); 97 void OnAlignChange(); 98 99 LogPosPopUp lc; 100 101 protected: 102 Ctrl::LogPos pos; 103 bool push; 104 Size bsz; //base info, for recalculation 105 }; 106 107 #endif 108 109