TDME2  1.9.200
GUITableRowNode.cpp
Go to the documentation of this file.
2 
3 #include <tdme/tdme.h>
18 #include <tdme/gui/GUI.h>
19 #include <tdme/math/Math.h>
21 
23 
38 using tdme::gui::GUI;
39 using tdme::math::Math;
41 
42 GUITableRowNode::GUITableRowNode(
43  GUIScreenNode* screenNode,
44  GUIParentNode* parentNode,
45  const string& id,
46  GUINode_Flow* flow,
47  GUIParentNode_Overflow* overflowX,
48  GUIParentNode_Overflow* overflowY,
49  const GUINode_Alignments& alignments,
50  const GUINode_RequestedConstraints& requestedConstraints,
51  const GUIColor& backgroundColor,
52  const string& backgroundImage,
53  const GUINode_Scale9Grid& backgroundImageScale9Grid,
54  const GUIColor& backgroundImageEffectColorMul,
55  const GUIColor& backgroundImageEffectColorAdd,
56  const GUINode_Border& border,
57  const GUINode_Padding& padding,
58  const GUINodeConditions& showOn,
59  const GUINodeConditions& hideOn,
60  const string& tooltip
61 ):
62  GUIParentNode(screenNode, parentNode, id, flow, overflowX, overflowY, alignments, requestedConstraints, backgroundColor, backgroundImage, backgroundImageScale9Grid, backgroundImageEffectColorMul, backgroundImageEffectColorAdd, border, padding, showOn, hideOn, tooltip)
63 {
64 }
65 
67 {
68  return "table-row";
69 }
70 
72 {
73  return false;
74 }
75 
77 {
78  auto width = 0;
79  for (auto i = 0; i < subNodes.size(); i++) {
80  auto guiSubNode = subNodes[i];
81  if (guiSubNode->conditionsMet == false) continue;
82  if (guiSubNode->flow == GUINode_Flow::FLOATING) {
83  continue;
84  }
85  width += guiSubNode->getAutoWidth();
86  }
87  width += border.left + border.right;
88  width += padding.left + padding.right;
89  return width;
90 }
91 
93 {
94  auto height = 0;
95  for (auto i = 0; i < subNodes.size(); i++) {
96  auto guiSubNode = subNodes[i];
97  if (guiSubNode->conditionsMet == false) continue;
98  if (guiSubNode->flow == GUINode_Flow::FLOATING) {
99  continue;
100  }
101  auto contentHeight = guiSubNode->getAutoHeight();
102  if (contentHeight > height) {
103  height = contentHeight;
104  }
105  }
106  height += border.top + border.bottom;
107  height += padding.top + padding.bottom;
108  return height;
109 }
110 
112 {
114  if (conditionsMet == false) return;
115  GUITableNode* guiTableNode = required_dynamic_cast<GUITableNode*>(parentNode);
116  if (tableRowNodeIdx == -1) {
117  tableRowNodeIdx = 0;
118  for (auto guiTableNowChild: guiTableNode->subNodes) {
119  if (this == guiTableNowChild) break;
120  tableRowNodeIdx++;
121  }
122  }
123  auto tableCellMaxHeight = guiTableNode->getTableCellMaxHeight(tableRowNodeIdx);
124  {
125  auto starCount = 0;
127  auto nodesWidth = 0;
128  auto finalNodesWidth = 0;
129  for (auto i = 0; i < subNodes.size(); i++) {
130  auto guiSubNode = subNodes[i];
131  if (guiSubNode->conditionsMet == false) continue;
132  if (guiSubNode->flow == GUINode_Flow::FLOATING) {
133  continue;
134  }
135  if (guiSubNode->requestedConstraints.widthType == GUINode_RequestedConstraints_RequestedConstraintsType::STAR) {
136  starCount++;
137  } else {
138  nodesWidth += guiSubNode->computedConstraints.width;
139  finalNodesWidth += guiSubNode->computedConstraints.width;
140  }
141  }
142 
143  auto horizontalStarPixelRest = 0.0f;
144  for (auto i = 0; i < subNodes.size(); i++) {
145  auto guiSubNode = subNodes[i];
146  if (guiSubNode->conditionsMet == false) continue;
147 
148  if (guiSubNode->requestedConstraints.widthType == GUINode_RequestedConstraints_RequestedConstraintsType::TABLECELL) {
149  auto tableCellMaxWidth = guiTableNode->getTableCellMaxWidth(i);
150  guiSubNode->requestedConstraints.widthType = GUINode_RequestedConstraints_RequestedConstraintsType::TABLECELL;
151  guiSubNode->requestedConstraints.width = tableCellMaxWidth;
152  guiSubNode->computedConstraints.width = tableCellMaxWidth;
153  finalNodesWidth += guiSubNode->computedConstraints.width;
154  }
155 
156  if (guiSubNode->requestedConstraints.heightType == GUINode_RequestedConstraints_RequestedConstraintsType::TABLECELL) {
157  guiSubNode->requestedConstraints.height = tableCellMaxHeight;
158  guiSubNode->computedConstraints.height = tableCellMaxHeight;
159  }
160 
161  if (dynamic_cast<GUIParentNode*>(guiSubNode) != nullptr) {
162  required_dynamic_cast<GUIParentNode*>(guiSubNode)->layoutSubNodes();
163  }
164  }
165 
167  for (auto i = 0; i < subNodes.size(); i++) {
168  auto guiSubNode = subNodes[i];
169  if (guiSubNode->conditionsMet == false) continue;
170  guiSubNode->computedConstraints.alignmentLeft = Math::max(0, border.left + padding.left);
171  }
172  } else
174  for (auto i = 0; i < subNodes.size(); i++) {
175  auto guiSubNode = subNodes[i];
176  if (guiSubNode->conditionsMet == false) continue;
177  guiSubNode->computedConstraints.alignmentLeft = Math::max(0, border.left + padding.left + ((width - finalNodesWidth) / 2));
178  }
179  } else
181  for (auto i = 0; i < subNodes.size(); i++) {
182  auto guiSubNode = subNodes[i];
183  if (guiSubNode->conditionsMet == false) continue;
184  guiSubNode->computedConstraints.alignmentLeft = Math::max(0, (width - finalNodesWidth));
185  }
186  }
187 
189  }
190 
191  for (auto i = 0; i < subNodes.size(); i++) {
192  auto guiSubNode = subNodes[i];
193  guiSubNode->computeContentAlignment();
194  }
197 }
198 
200 {
204  for (auto i = 0; i < subNodes.size(); i++) {
205  auto guiSubNode = subNodes[i];
206  if (guiSubNode->conditionsMet == false) continue;
207  guiSubNode->setTop(top);
208  continue;
209  top += guiSubNode->computedConstraints.height;
210  }
211 }
212 
214 {
218  for (auto i = 0; i < subNodes.size(); i++) {
219  auto guiSubNode = subNodes[i];
220  if (guiSubNode->conditionsMet == false) continue;
221  guiSubNode->setLeft(left);
222  if (guiSubNode->flow == GUINode_Flow::FLOATING) {
223  continue;
224  }
225  left += guiSubNode->computedConstraints.width;
226  }
227 }
228 
229 
230 GUINode_RequestedConstraints GUITableRowNode::createRequestedConstraints(const string& left, const string& top, const string& width, const string& height, int factor)
231 {
232  GUINode_RequestedConstraints constraints;
234  constraints.left = getRequestedConstraintsValue(StringTools::trim(left), 0);
236  constraints.top = getRequestedConstraintsValue(StringTools::trim(top), 0);
238  constraints.width = getRequestedConstraintsValue(StringTools::trim(width), -1);
240  constraints.height = getRequestedConstraintsValue(StringTools::trim(height), -1);
241  if (constraints.leftType == GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) constraints.left*= factor;
242  if (constraints.topType == GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) constraints.top*= factor;
243  if (constraints.widthType == GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) constraints.width*= factor;
244  if (constraints.heightType == GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) constraints.height*= factor;
245  return constraints;
246 }
GUI module class.
Definition: GUI.h:64
GUI element node conditions.
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * RIGHT
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * CENTER
static STATIC_DLL_IMPEXT GUINode_AlignmentHorizontal * LEFT
static STATIC_DLL_IMPEXT GUINode_Flow * FLOATING
Definition: GUINode_Flow.h:31
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * TABLECELL
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * STAR
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * NONE
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * PIXEL
static STATIC_DLL_IMPEXT GUINode_RequestedConstraints_RequestedConstraintsType * AUTO
GUI node base class.
Definition: GUINode.h:64
static GUINode_RequestedConstraints_RequestedConstraintsType * getRequestedConstraintsType(const string &constraint, GUINode_RequestedConstraints_RequestedConstraintsType *defaultConstraintsType)
Get requested constraints type.
Definition: GUINode.cpp:288
GUINode_Border border
Definition: GUINode.h:160
virtual void setLeft(int left)
Set computed left.
Definition: GUINode.cpp:179
GUIParentNode * parentNode
Definition: GUINode.h:148
GUINode_ComputedConstraints computedConstraints
Definition: GUINode.h:152
GUINode_Padding padding
Definition: GUINode.h:159
virtual void setTop(int top)
Set computed top.
Definition: GUINode.cpp:185
GUINode_RequestedConstraints requestedConstraints
Definition: GUINode.h:151
GUINode_Alignments alignments
Definition: GUINode.h:150
static int getRequestedConstraintsValue(const string &constraint, int defaultConstraintsValue)
Get requested constraints value.
Definition: GUINode.cpp:306
GUI parent node base class thats supporting child nodes.
Definition: GUIParentNode.h:42
virtual void layoutSubNodes()
Layout sub nodes.
vector< GUINode * > subNodes
Definition: GUIParentNode.h:62
virtual void computeVerticalChildrenAlignment()
Compute vertical children alignment.
GUI screen node that represents a screen that can be rendered via GUI system.
Definition: GUIScreenNode.h:72
const string getNodeType() override
void setTop(int top) override
Set computed top.
void setLeft(int left) override
Set computed left.
static GUINode_RequestedConstraints createRequestedConstraints(const string &left, const string &top, const string &width, const string &height, int factor)
Create requested constraints.
void layoutSubNodes() override
Layout sub nodes.
Standard math functions.
Definition: Math.h:19
String tools class.
Definition: StringTools.h:22
GUINode_AlignmentHorizontal * horizontal
GUI node border entity.
GUI node padding entity.
GUINode_RequestedConstraints_RequestedConstraintsType * topType
GUINode_RequestedConstraints_RequestedConstraintsType * widthType
GUINode_RequestedConstraints_RequestedConstraintsType * leftType
GUINode_RequestedConstraints_RequestedConstraintsType * heightType
GUI node scale 9 grid entity.