Browse Source

Add form layouts

Neal Wilson 5 years ago
parent
commit
619b5d1653
Signed by: Neal Wilson <neal@typica.us> GPG Key ID: 2A0BDDE701E66EB9
1 changed files with 49 additions and 0 deletions
  1. 49
    0
      src/typica.w

+ 49
- 0
src/typica.w View File

4682
                     QStack<QLayout *> *layoutStack);
4682
                     QStack<QLayout *> *layoutStack);
4683
 void populateStackedLayout(QDomElement element, QStack<QWidget *> *widgetStack,
4683
 void populateStackedLayout(QDomElement element, QStack<QWidget *> *widgetStack,
4684
                            QStack<QLayout *> *layoutStack);
4684
                            QStack<QLayout *> *layoutStack);
4685
+void populateFormLayout(QDomElement element, QStack<QWidget *> *widgetStack,@|
4686
+                        QStack<QLayout *> *layoutStack);
4685
 void addTemperatureDisplayToSplitter(QDomElement element,@|
4687
 void addTemperatureDisplayToSplitter(QDomElement element,@|
4686
                                      QStack<QWidget *> *widgetStack,
4688
                                      QStack<QWidget *> *widgetStack,
4687
                                      QStack<QLayout *> *layoutStack);
4689
                                      QStack<QLayout *> *layoutStack);
5026
     layoutStack->push(layout);
5028
     layoutStack->push(layout);
5027
     populateStackedLayout(element, widgetStack, layoutStack);
5029
     populateStackedLayout(element, widgetStack, layoutStack);
5028
 }
5030
 }
5031
+else if(layoutType == "form")
5032
+{
5033
+    layout = new QFormLayout;
5034
+    layoutStack->push(layout);
5035
+    populateFormLayout(element, widgetStack, layoutStack);
5036
+}
5029
 if(element.hasAttribute("id"))
5037
 if(element.hasAttribute("id"))
5030
 {
5038
 {
5031
     layout->setObjectName(element.attribute("id"));
5039
     layout->setObjectName(element.attribute("id"));
5040
     layout->setContentsMargins(m, m, m, m);
5048
     layout->setContentsMargins(m, m, m, m);
5041
 }
5049
 }
5042
 
5050
 
5051
+@ Any direct child of a form layout must be a {\tt <row>} element to specify
5052
+the label for the given row. The field for the given row will always be a
5053
+|QVBoxLayout| containing whatever is specified by children of the {\tt <row>}.
5054
+
5055
+@<Functions for scripting@>=
5056
+void populateFormLayout(QDomElement element, QStack<QWidget *> *widgetStack,
5057
+                        QStack<QLayout *> *layoutStack)
5058
+{
5059
+    QDomNodeList children = element.childNodes();
5060
+    QFormLayout *layout = qobject_cast<QFormLayout *>(layoutStack->top());
5061
+    for(int i = 0; i < children.count(); i++)
5062
+    {
5063
+        QDomNode current;
5064
+        QDomElement currentElement;
5065
+        current = children.at(i);
5066
+        if(current.isElement())
5067
+        {
5068
+            currentElement = current.toElement();
5069
+            if(currentElement.tagName() == "row")
5070
+            {
5071
+                QString label = QString();
5072
+                if(currentElement.hasAttribute("label"))
5073
+                {
5074
+                    label = currentElement.attribute("label");
5075
+                }
5076
+                QVBoxLayout *childLayout = new QVBoxLayout;
5077
+                layoutStack->push(childLayout);
5078
+                populateBoxLayout(currentElement, widgetStack, layoutStack);
5079
+                if(label.isEmpty())
5080
+                {
5081
+                    layout->addRow(childLayout);
5082
+                }
5083
+                else
5084
+                {
5085
+                    layout->addRow(label, childLayout);
5086
+                }
5087
+            }
5088
+        }
5089
+    }
5090
+}
5091
+
5043
 @ Stacked layouts are a bit different from the other types. A stacked layout has
5092
 @ Stacked layouts are a bit different from the other types. A stacked layout has
5044
 an arbitrary number of {\tt <page>} children which are just a |QWidget| which
5093
 an arbitrary number of {\tt <page>} children which are just a |QWidget| which
5045
 can have the same child elements as {\tt <widget>} elements elsewhere. Only the
5094
 can have the same child elements as {\tt <widget>} elements elsewhere. Only the

Loading…
Cancel
Save