summaryrefslogtreecommitdiff
path: root/client/widgetbuilder.cc
diff options
context:
space:
mode:
authordeva <deva>2008-06-18 11:03:34 +0000
committerdeva <deva>2008-06-18 11:03:34 +0000
commit8c3994b02e3a0cf81ead56c8dcfefb67be078328 (patch)
tree7bf98b5b9438e0f64725bfc12a34b98c20583116 /client/widgetbuilder.cc
parentb681594b7e4f9a5375b555b152d661581c600a96 (diff)
Restructured widget building, completed inital version of MultiList with format string parsing, db commiting and rereading.
Diffstat (limited to 'client/widgetbuilder.cc')
-rw-r--r--client/widgetbuilder.cc114
1 files changed, 114 insertions, 0 deletions
diff --git a/client/widgetbuilder.cc b/client/widgetbuilder.cc
new file mode 100644
index 0000000..8d23c0b
--- /dev/null
+++ b/client/widgetbuilder.cc
@@ -0,0 +1,114 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * widgetbuilder.cc
+ *
+ * Wed Jun 18 08:03:04 CEST 2008
+ * Copyright 2008 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of Pracro.
+ *
+ * Pracro is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Pracro is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Pracro; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "widgetbuilder.h"
+#include <QLayout>
+#include "widgets.h"
+
+QVector< Widget* > widgetBuilder(QDomNode xml_node, QWidget *parent, MacroWindow *macrowindow)
+{
+ QVector< Widget* > widgets;
+
+ QDomElement xml_elem = xml_node.toElement();
+
+ QWidget *widget = NULL;
+ if(xml_elem.tagName() == "frame") {
+ if(xml_elem.hasAttribute("caption")) {
+ GroupBox *frame = new GroupBox(xml_elem, macrowindow);
+ widget = frame;
+ } else {
+ Frame *frame = new Frame(xml_elem, macrowindow);
+ widget = frame;
+ }
+
+ } else if(xml_elem.tagName() == "label") {
+ Label *label = new Label(xml_elem, macrowindow);
+ widget = label;
+
+ } else if(xml_elem.tagName() == "lineedit") {
+ LineEdit *lineedit = new LineEdit(xml_elem, macrowindow);
+ widgets.push_back(lineedit);
+ widget = lineedit;
+
+ } else if(xml_elem.tagName() == "button") {
+ PushButton *pushbutton = new PushButton(xml_elem, macrowindow);
+ //macrowindow->connect(pushbutton, SIGNAL(act_continue()), main, SLOT(get_macro()));
+ macrowindow->connect(pushbutton, SIGNAL(act_commit()), macrowindow, SLOT(commit()));
+ macrowindow->connect(pushbutton, SIGNAL(act_reset()), macrowindow, SLOT(reset()));
+ macrowindow->connect(pushbutton, SIGNAL(act_cancel()), macrowindow, SLOT(cancel()));
+ macrowindow->connect(pushbutton, SIGNAL(act_continue(QString)), macrowindow, SLOT(cont(QString)));
+ widget = pushbutton;
+
+ } else if(xml_elem.tagName() == "textedit") {
+ TextEdit *textedit = new TextEdit(xml_elem, macrowindow);
+ widgets.push_back(textedit);
+ widget = textedit;
+
+ } else if(xml_elem.tagName() == "checkbox") {
+ CheckBox *checkbox = new CheckBox(xml_elem, macrowindow);
+ widgets.push_back(checkbox);
+ widget = checkbox;
+
+ } else if(xml_elem.tagName() == "radiobuttons") {
+ RadioButtons *radiobuttons = new RadioButtons(xml_elem, macrowindow);
+ widgets.push_back(radiobuttons);
+ widget = radiobuttons;
+ //return; // Don't iterate children
+
+ } else if(xml_elem.tagName() == "combobox") {
+ ComboBox *combobox = new ComboBox(xml_elem, macrowindow);
+ widgets.push_back(combobox);
+ widget = combobox;
+ //return; // Don't iterate children
+
+ } else if(xml_elem.tagName() == "listbox") {
+ ListBox *listbox = new ListBox(xml_elem, macrowindow);
+ widgets.push_back(listbox);
+ widget = listbox;
+ //return; // Don't iterate children
+ } else if(xml_elem.tagName() == "multilist") {
+ MultiList *multilist = new MultiList(xml_elem, macrowindow);
+ widgets.push_back(multilist);
+ widget = multilist;
+
+ if(parent != NULL && widget != NULL) parent->layout()->addWidget(widget);
+ if(widget != NULL) widget->show();
+
+ return widgets; // Don't iterate children
+ }
+
+ QDomNodeList children = xml_node.childNodes();
+
+ for (int i=0; i<children.count();i++) {
+ QDomNode child = children.at(i);
+ widgets += widgetBuilder(child, widget, macrowindow);
+ }
+
+ if(parent != NULL && widget != NULL) parent->layout()->addWidget(widget);
+ if(widget != NULL) widget->show();
+
+ return widgets;
+}