#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 #include #include #include #include #include Builder::Builder(QDomDocument *xml_doc) : QObject() { // Assign root element from xml_doc this->xml_doc = xml_doc; QDomElement xml_elem = xml_doc->documentElement(); // Execute the recursive function with documentElement recurser(xml_elem, NULL); } Builder::~Builder() { } void Builder::recurser(QDomNode xml_node, QWidget *parent) { QWidget *widget = NULL; QDomElement xml_elem = xml_node.toElement(); 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); widget = window; } else if(xml_elem.tagName() == "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); widget = label; } else if(xml_elem.tagName() == "lineedit") { LineEdit *lineedit = new LineEdit(xml_elem); widgets.push_back(lineedit); widget = lineedit; } else if(xml_elem.tagName() == "button") { PushButton *pushbutton = new PushButton(xml_elem); //connect(pushbutton, SIGNAL(act_continue()), main, SLOT(get_macro())); connect(pushbutton, SIGNAL(act_commit()), this, SLOT(commit())); connect(pushbutton, SIGNAL(act_reset()), this, SLOT(reset())); connect(pushbutton, SIGNAL(act_cancel()), this, SLOT(cancel())); connect(pushbutton, SIGNAL(act_continue()), this, SLOT(cont("fisk"))); widget = pushbutton; } else if(xml_elem.tagName() == "textedit") { TextEdit *textedit = new TextEdit(xml_elem); widgets.push_back(textedit); widget = textedit; } else if(xml_elem.tagName() == "checkbox") { CheckBox *checkbox = new CheckBox(xml_elem); widgets.push_back(checkbox); widget = checkbox; } 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(); for (int i=0; ilayout()->addWidget(widget); if(widget != NULL) widget->show(); } void Builder::commit() { // Check for, and count, errors on all entries before comitting int faulty = 0; // 0 initial errors QVector< Widget* >::iterator i=widgets.begin(); while (i != widgets.end()) { Widget* w = *i; if(!w->isValid()) faulty++; // Regexp check, returns valid if entry passed // All selectable entries return "none" if nothing is selected if(w->getValue() == "none") faulty++; // Faulty+1 if error detected i++; } // If all entries passed validation, continue commit if(faulty == 0) { printf("Builder -> committing...\n"); // Build the XML commit QString xml_string; xml_string.append("\n"); xml_string.append("\n"); xml_string.append(" \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(" getName() + "\" value=\"" + w->getValue() + "\"/>\n"); i++; } xml_string.append(" \n"); xml_string.append("\n"); // Print commit to stdout for debug purposes printf("%s\n", xml_string.toStdString().c_str()); // Convert the commit to Utf-8 charset QByteArray xml_array = xml_string.toUtf8(); QDomDocument xml_result; // Use setContent of QDomDocument to validate the xml commit if (!xml_result.setContent(xml_array)) { printf("Parse error: Invalid XML\n"); } // Commit the xml data to the server SendRecieve macro_commit; macro_commit.makeConnection(&xml_result); // Recieve answer from server whether successful or not QByteArray ba = macro_commit.getResult(); } else { QMessageBox::critical(NULL, "Fejl", "Makroen er ikke udfyldt korrekt, prøv igen.\n" , QMessageBox::Ok); } } void Builder::reset() { int ret = QMessageBox::warning(NULL, "Reset", tr("Du har valgt at nulstille de indtastede data.\n" "Er du sikker?"), QMessageBox::Yes | QMessageBox::Cancel); printf("Builder -> resetting...\n"); } void Builder::cancel() { printf("Builder -> cancelling...\n"); } void Builder::cont(QString name) { /* QVector< Widget* >::iterator i=widgets.begin(); while (i != widgets.end()) { Widget* w = *i; if(w->getName() xml_string.append(" getName() + "\" value=\"" + w->getValue() + "\"/>\n"); i++; } */ printf("%s : Builder -> continuing...\n", name.toStdString().c_str()); }