diff options
Diffstat (limited to 'client/widgetbuilder.cc')
-rw-r--r-- | client/widgetbuilder.cc | 114 |
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; +} |