Initial revision
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		
							
								
								
									
										161
									
								
								samples/layout/expt.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								samples/layout/expt.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -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;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user