diff options
-rw-r--r-- | client/builder.cc | 173 | ||||
-rw-r--r-- | client/builder.h | 11 |
2 files changed, 109 insertions, 75 deletions
diff --git a/client/builder.cc b/client/builder.cc index d868f12..48739a2 100644 --- a/client/builder.cc +++ b/client/builder.cc @@ -1,23 +1,25 @@ #include "builder.h" +#include "sendrecieve.h" #include "widgets/widget.h" #include "widgets/label.h" #include "widgets/lineedit.h" #include "widgets/textedit.h" #include "widgets/pushbutton.h" #include "widgets/combobox.h" +#include "widgets/listbox.h" #include "widgets/frame.h" +#include "widgets/groupbox.h" +#include "widgets/radiobuttons.h" #include "widgets/radiobutton.h" #include "widgets/checkbox.h" #include "widgets/window.h" -//#include <QApplication> #include <QVBoxLayout> #include <QDomDocument> #include <QDomElement> #include <QDomNode> +#include <QByteArray> #include <vector> -std::vector< Widget* > widgets; - Builder::Builder(QDomDocument *xml_doc) : QObject() { @@ -27,66 +29,6 @@ Builder::Builder(QDomDocument *xml_doc) // Execute the recursive function with documentElement recurser(xml_elem, NULL); - - /* - Window widget(window_elem); - - Frame *frame = new Frame(frame_elem); - - QVBoxLayout *layout = new QVBoxLayout(); - QVBoxLayout *window_layout = new QVBoxLayout(); - - Label *label = new Label(label_elem); - widgets.push_back(label); - LineEdit *lineedit = new LineEdit(lineedit_elem); - widgets.push_back(lineedit); - LineEdit *lineedit2 = new LineEdit(lineedit_elem); - widgets.push_back(lineedit2); - TextEdit *textedit = new TextEdit(textedit_elem); - widgets.push_back(textedit); - - ComboBox *combobox = new ComboBox(combobox_elem); - widgets.push_back(combobox); - - RadioButton *radiobutton1 = new RadioButton(radiobutton1_elem); - widgets.push_back(radiobutton1); - RadioButton *radiobutton2 = new RadioButton(radiobutton2_elem); - widgets.push_back(radiobutton2); - CheckBox *checkbox = new CheckBox(checkbox_elem); - widgets.push_back(checkbox); - PushButton *pushbutton1 = new PushButton(pushbutton1_elem); - widgets.push_back(pushbutton1); - PushButton *pushbutton2 = new PushButton(pushbutton2_elem); - widgets.push_back(pushbutton2); - PushButton *pushbutton3 = new PushButton(pushbutton3_elem); - widgets.push_back(pushbutton3); - - layout->addWidget(label); - layout->addWidget(lineedit); - layout->addWidget(lineedit2); - layout->addWidget(textedit); - //layout->addWidget(combobox); - layout->addWidget(radiobutton1); - layout->addWidget(radiobutton2); - layout->addWidget(checkbox); - layout->addWidget(pushbutton1); - layout->addWidget(pushbutton2); - layout->addWidget(pushbutton3); - - frame->setLayout(layout); - - window_layout->addWidget(frame); - - widget.setLayout(window_layout); - widget.show(); - - std::vector< Widget* >::iterator i=widgets.begin(); - while (i != widgets.end()) { - Widget* w = *i; - printf("%s = %s\n", w->getName().toStdString().c_str(), w->getValue().toStdString().c_str()); - i++; - } - */ } Builder::~Builder() @@ -97,17 +39,23 @@ void Builder::recurser(QDomNode xml_node, QWidget *parent) { QWidget *widget = NULL; QDomElement xml_elem = xml_node.toElement(); - if(xml_elem.tagName() == "window") { + if(xml_elem.tagName() == "macro") { + // Assign the macro name and version to QStrings for use when comitting + if(xml_elem.hasAttribute("name")) macro = xml_elem.attribute("name"); + if(xml_elem.hasAttribute("version")) version = xml_elem.attribute("version"); + } else if(xml_elem.tagName() == "window") { Window *window = new Window(xml_elem); - widgets.push_back(window); widget = window; } else if(xml_elem.tagName() == "frame") { - Frame *frame = new Frame(xml_elem); - widgets.push_back(frame); - widget = frame; + if(xml_elem.hasAttribute("caption")) { + GroupBox *frame = new GroupBox(xml_elem); + widget = frame; + } else { + Frame *frame = new Frame(xml_elem); + widget = frame; + } } else if(xml_elem.tagName() == "label") { Label *label = new Label(xml_elem); - widgets.push_back(label); widget = label; } else if(xml_elem.tagName() == "lineedit") { LineEdit *lineedit = new LineEdit(xml_elem); @@ -115,7 +63,9 @@ void Builder::recurser(QDomNode xml_node, QWidget *parent) widget = lineedit; } else if(xml_elem.tagName() == "button") { PushButton *pushbutton = new PushButton(xml_elem); - widgets.push_back(pushbutton); + connect(pushbutton, SIGNAL(act_commit()), this, SLOT(commit())); + connect(pushbutton, SIGNAL(act_reset()), this, SLOT(reset())); + connect(pushbutton, SIGNAL(act_cancel()), this, SLOT(cancel())); widget = pushbutton; } else if(xml_elem.tagName() == "textedit") { TextEdit *textedit = new TextEdit(xml_elem); @@ -125,10 +75,21 @@ void Builder::recurser(QDomNode xml_node, QWidget *parent) CheckBox *checkbox = new CheckBox(xml_elem); widgets.push_back(checkbox); widget = checkbox; - } else if(xml_elem.tagName() == "radiobutton") { - RadioButton *radiobutton = new RadioButton(xml_elem); - widgets.push_back(radiobutton); - widget = radiobutton; + } else if(xml_elem.tagName() == "radiobuttons") { + RadioButtons *radiobuttons = new RadioButtons(xml_elem); + widgets.push_back(radiobuttons); + widget = radiobuttons; + //return; // Don't iterate children + } else if(xml_elem.tagName() == "combobox") { + ComboBox *combobox = new ComboBox(xml_elem); + widgets.push_back(combobox); + widget = combobox; + //return; // Don't iterate children + } else if(xml_elem.tagName() == "listbox") { + ListBox *listbox = new ListBox(xml_elem); + widgets.push_back(listbox); + widget = listbox; + //return; // Don't iterate children } QDomNodeList children = xml_node.childNodes(); @@ -140,3 +101,67 @@ void Builder::recurser(QDomNode xml_node, QWidget *parent) if(parent != NULL && widget != NULL) parent->layout()->addWidget(widget); if(widget != NULL) widget->show(); } + +void Builder::commit() +{ + // Check for errors on all entries before comitting + int faulty = 0; + QVector< Widget* >::iterator i=widgets.begin(); + while (i != widgets.end()) { + Widget* w = *i; + if(!w->isValid()) faulty++; + + // All selectable entries return "none" if nothing is selected + if(w->getValue() == "none") faulty++; + i++; + } + // If all entries passed validation, continue commit + if(faulty == 0) { + printf("Builder -> committing...\n"); + + QString xml_string; + xml_string.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + xml_string.append("<pracro version=\"1.0\" cpr=\"1505050505\" user=\"tux\">\n"); + xml_string.append(" <commit macro=\"" + macro + "\" version=\"" + + version + "\">\n"); + + // Iterate the different entries, and append their results to the commit string + QVector< Widget* >::iterator i=widgets.begin(); + while (i != widgets.end()) { + Widget* w = *i; + + xml_string.append(" <field name=\"" + w->getName() + + "\" value=\"" + w->getValue() + "\"/>\n"); + i++; + } + + xml_string.append(" </commit>\n"); + xml_string.append("</pracro>\n"); + + //char *test = xml_array.data(); + printf("%s\n", xml_string.toStdString().c_str()); + + QByteArray xml_array = xml_string.toUtf8(); + QDomDocument xml_result; + //QDomDocument xml_req; + if (!xml_result.setContent(xml_array)) { + printf("Parse error: Invalid XML\n"); + } + + SendRecieve xml_acquire; + xml_acquire.makeConnection(&xml_result); + QByteArray ba = xml_acquire.getResult(); + } else { + printf("ERROR!!! Some entries contain errors, aborting commit...\n"); + } +} + +void Builder::reset() +{ + printf("Builder -> resetting...\n"); +} + +void Builder::cancel() +{ + printf("Builder -> cancelling...\n"); +} diff --git a/client/builder.h b/client/builder.h index 6c0577d..586370d 100644 --- a/client/builder.h +++ b/client/builder.h @@ -28,23 +28,32 @@ #ifndef _BUILDER_H #define _BUILDER_H +#include "widgets/widget.h" #include <QDomDocument> #include <QWidget> #include <QDomNode> #include <QObject> +#include <QVector> class Builder : public QObject { Q_OBJECT + public: Builder(QDomDocument *xml_doc); ~Builder(); - public slots: +public slots: + void commit(); + void reset(); + void cancel(); private: void recurser(QDomNode xml_node, QWidget *parent); QDomDocument *xml_doc; + QVector< Widget* > widgets; + QString macro; + QString version; }; |