/* * 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; }