]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/layout/expt.cpp
Initial revision
[wxWidgets.git] / samples / layout / expt.cpp
diff --git a/samples/layout/expt.cpp b/samples/layout/expt.cpp
new file mode 100644 (file)
index 0000000..af2c089
--- /dev/null
@@ -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;
+}