home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / samples / layout / expt.cpp next >
C/C++ Source or Header  |  1998-05-20  |  4KB  |  162 lines

  1. /*
  2.  * Experimental code to use operators for constraint specification.
  3.  * In the end, the syntax didn't look much clearer than
  4.  * the original, so abandoned.
  5.  
  6.  Example:
  7.  
  8.   wxConstrain(frame->panel,
  9.   
  10.     ( leftOf   (frame->panel) = leftOf   (frame),
  11.       topOf    (frame->panel) = topOf    (frame),
  12.       rightOf  (frame->panel) = rightOf  (frame),
  13.       heightOf (frame->panel) = 50 % heightOf (frame)
  14.     )
  15.   );
  16.  */
  17.  
  18. // Operator experiments
  19. #define wxCONSTRAINT_OP_REL   1
  20. #define wxCONSTRAINT_OP_PERCENT 2
  21. #define wxCONSTRAINT_OP_EDGE  3
  22. #define wxCONSTRAINT_OP_ABS   4
  23. #define wxCONSTRAINT_OP_AND   5
  24.  
  25. class wxConstraintOp: public wxObject
  26. {
  27.  public:
  28.    int opType;
  29.    wxEdge edge;
  30.    wxRelationship relationship;
  31.    wxWindow *win;
  32.    int value;
  33.    int margin;
  34.    wxConstraintOp *lhs;
  35.    wxConstraintOp *rhs;
  36.    wxConstraintOp(int typ)
  37.    {
  38.      opType = typ;
  39.      edge = wxLeft;
  40.      win = NULL;
  41.      value = 0;
  42.      margin = 0;
  43.      relationship = wxSameAs;
  44.      lhs = 0; rhs = 0;
  45.    }
  46.    wxConstraintOp(const wxConstraintOp& op)
  47.    {
  48.      opType = op.opType;
  49.      edge = op.edge;
  50.      relationship = op.relationship;
  51.      win = op.win;
  52.      value = op.value;
  53.      margin = op.margin;
  54.      if (op.lhs)
  55.        lhs = new wxConstraintOp(*op.lhs);
  56.      else
  57.        lhs = NULL;
  58.      if (op.rhs)
  59.        rhs = new wxConstraintOp(*op.rhs);
  60.      else
  61.        rhs = NULL;
  62.    }
  63.    ~wxConstraintOp(void)
  64.    {
  65.      if (lhs)
  66.        delete lhs;
  67.      if (rhs)
  68.        delete rhs;
  69.    }
  70.  
  71.   wxConstraintOp operator = (const wxConstraintOp& arg2);
  72.   wxConstraintOp operator = (const int value);
  73.   
  74.   friend wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2);
  75.   friend wxConstraintOp operator + (wxConstraintOp& arg1, int margin);
  76.   friend wxConstraintOp operator - (wxConstraintOp& arg1, int margin);
  77.   friend wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2);
  78. };
  79.  
  80. wxConstraintOp leftOf(wxWindow *win)
  81. {
  82.   wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
  83.   thing.win = win;
  84.   thing.edge = wxLeft;
  85.   return thing;
  86. }
  87.  
  88. wxConstraintOp topOf(wxWindow *win)
  89. {
  90.   wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
  91.   thing.win = win;
  92.   thing.edge = wxTop;
  93.   return thing;
  94. }
  95.  
  96. wxConstraintOp widthOf(wxWindow *win)
  97. {
  98.   wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
  99.   thing.win = win;
  100.   thing.edge = wxWidth;
  101.   return thing;
  102. }
  103.  
  104. wxConstraintOp wxConstraintOp::operator = (const wxConstraintOp& arg2)
  105. {
  106.   wxConstraintOp op3(wxCONSTRAINT_OP_REL);
  107.   op3.relationship = wxPercentOf;
  108.   op3.value = 100;
  109.   if ((op3.relationship == wxPercentOf) && (op3.value > 0))
  110.     op3.value = this->value;
  111.   op3.lhs = new wxConstraintOp(*this);
  112.   op3.rhs = new wxConstraintOp(arg2);
  113.  
  114.   return op3;
  115. }
  116.  
  117. wxConstraintOp wxConstraintOp::operator = (const int value)
  118. {
  119.   wxConstraintOp op3(wxCONSTRAINT_OP_REL);
  120.   op3.relationship = wxAbsolute;
  121.  
  122.   op3.lhs = new wxConstraintOp(*this);
  123.   op3.rhs = new wxConstraintOp(wxCONSTRAINT_OP_ABS);
  124.   op3.value = value;
  125.  
  126.   return op3;
  127. }
  128.  
  129. wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2)
  130. {
  131.   wxConstraintOp op3(arg2);
  132.   op3.opType = wxCONSTRAINT_OP_EDGE;
  133.   op3.value = perCent;
  134.   if (op3.value > 0)
  135.     op3.value = arg2.value;
  136.  
  137.   return op3;
  138. }
  139.  
  140. wxConstraintOp operator + (wxConstraintOp& arg1, int margin)
  141. {
  142.   wxConstraintOp op3(arg1);
  143.   op3.margin = margin;
  144.   return op3;
  145. }
  146.  
  147. wxConstraintOp operator - (wxConstraintOp& arg1, int margin)
  148. {
  149.   wxConstraintOp op3(arg1);
  150.   op3.margin = - margin;
  151.   return op3;
  152. }
  153.  
  154. wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2)
  155. {
  156.   wxConstraintOp op3(wxCONSTRAINT_OP_AND);
  157.   op3.lhs = new wxConstraintOp(arg1);
  158.   op3.rhs = new wxConstraintOp(arg2);
  159.  
  160.   return op3;
  161. }
  162.