X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1b66e7e5ab419c5f91fc799c50addc42ef36e23b..c801d85f158c4cba50b588807daabdcbd0ed3853:/samples/layout/expt.cpp?ds=inline diff --git a/samples/layout/expt.cpp b/samples/layout/expt.cpp new file mode 100644 index 0000000000..af2c089b84 --- /dev/null +++ b/samples/layout/expt.cpp @@ -0,0 +1,161 @@ +/* + * Experimental code to use operators for constraint specification. + * In the end, the syntax didn't look much clearer than + * the original, so abandoned. + + Example: + + wxConstrain(frame->panel, + + ( leftOf (frame->panel) = leftOf (frame), + topOf (frame->panel) = topOf (frame), + rightOf (frame->panel) = rightOf (frame), + heightOf (frame->panel) = 50 % heightOf (frame) + ) + ); + */ + +// Operator experiments +#define wxCONSTRAINT_OP_REL 1 +#define wxCONSTRAINT_OP_PERCENT 2 +#define wxCONSTRAINT_OP_EDGE 3 +#define wxCONSTRAINT_OP_ABS 4 +#define wxCONSTRAINT_OP_AND 5 + +class wxConstraintOp: public wxObject +{ + public: + int opType; + wxEdge edge; + wxRelationship relationship; + wxWindow *win; + int value; + int margin; + wxConstraintOp *lhs; + wxConstraintOp *rhs; + wxConstraintOp(int typ) + { + opType = typ; + edge = wxLeft; + win = NULL; + value = 0; + margin = 0; + relationship = wxSameAs; + lhs = 0; rhs = 0; + } + wxConstraintOp(const wxConstraintOp& op) + { + opType = op.opType; + edge = op.edge; + relationship = op.relationship; + win = op.win; + value = op.value; + margin = op.margin; + if (op.lhs) + lhs = new wxConstraintOp(*op.lhs); + else + lhs = NULL; + if (op.rhs) + rhs = new wxConstraintOp(*op.rhs); + else + rhs = NULL; + } + ~wxConstraintOp(void) + { + if (lhs) + delete lhs; + if (rhs) + delete rhs; + } + + wxConstraintOp operator = (const wxConstraintOp& arg2); + wxConstraintOp operator = (const int value); + + friend wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2); + friend wxConstraintOp operator + (wxConstraintOp& arg1, int margin); + friend wxConstraintOp operator - (wxConstraintOp& arg1, int margin); + friend wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2); +}; + +wxConstraintOp leftOf(wxWindow *win) +{ + wxConstraintOp thing(wxCONSTRAINT_OP_EDGE); + thing.win = win; + thing.edge = wxLeft; + return thing; +} + +wxConstraintOp topOf(wxWindow *win) +{ + wxConstraintOp thing(wxCONSTRAINT_OP_EDGE); + thing.win = win; + thing.edge = wxTop; + return thing; +} + +wxConstraintOp widthOf(wxWindow *win) +{ + wxConstraintOp thing(wxCONSTRAINT_OP_EDGE); + thing.win = win; + thing.edge = wxWidth; + return thing; +} + +wxConstraintOp wxConstraintOp::operator = (const wxConstraintOp& arg2) +{ + wxConstraintOp op3(wxCONSTRAINT_OP_REL); + op3.relationship = wxPercentOf; + op3.value = 100; + if ((op3.relationship == wxPercentOf) && (op3.value > 0)) + op3.value = this->value; + op3.lhs = new wxConstraintOp(*this); + op3.rhs = new wxConstraintOp(arg2); + + return op3; +} + +wxConstraintOp wxConstraintOp::operator = (const int value) +{ + wxConstraintOp op3(wxCONSTRAINT_OP_REL); + op3.relationship = wxAbsolute; + + op3.lhs = new wxConstraintOp(*this); + op3.rhs = new wxConstraintOp(wxCONSTRAINT_OP_ABS); + op3.value = value; + + return op3; +} + +wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2) +{ + wxConstraintOp op3(arg2); + op3.opType = wxCONSTRAINT_OP_EDGE; + op3.value = perCent; + if (op3.value > 0) + op3.value = arg2.value; + + return op3; +} + +wxConstraintOp operator + (wxConstraintOp& arg1, int margin) +{ + wxConstraintOp op3(arg1); + op3.margin = margin; + return op3; +} + +wxConstraintOp operator - (wxConstraintOp& arg1, int margin) +{ + wxConstraintOp op3(arg1); + op3.margin = - margin; + return op3; +} + +wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2) +{ + wxConstraintOp op3(wxCONSTRAINT_OP_AND); + op3.lhs = new wxConstraintOp(arg1); + op3.rhs = new wxConstraintOp(arg2); + + return op3; +}