expt.cpp 3.6 KB

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