git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * 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;
 | |
| }
 |