From 07ff9de80d37dc0cd33feb027628eb95c1fccd35 Mon Sep 17 00:00:00 2001
From: senator <senator>
Date: Tue, 11 Sep 2007 12:28:05 +0000
Subject: xml request and retrieval functioning; basic macro layout recursing
 functioning

---
 client/builder.cc    | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++
 client/builder.h     |  51 ++++++++++++++++++
 client/macro.cc      |  74 +++++++++++++++++++++++++++
 client/macro.h       |  34 ++++++++++++
 client/main.cc       |  42 +++++++++++++++
 client/xmlacquire.cc | 136 ++++++++++++++++++++++++++++++++++++++++++++++++
 client/xmlacquire.h  |  68 ++++++++++++++++++++++++
 7 files changed, 547 insertions(+)
 create mode 100644 client/builder.cc
 create mode 100644 client/builder.h
 create mode 100644 client/macro.cc
 create mode 100644 client/macro.h
 create mode 100644 client/main.cc
 create mode 100644 client/xmlacquire.cc
 create mode 100644 client/xmlacquire.h

(limited to 'client')

diff --git a/client/builder.cc b/client/builder.cc
new file mode 100644
index 0000000..d868f12
--- /dev/null
+++ b/client/builder.cc
@@ -0,0 +1,142 @@
+#include "builder.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/frame.h"
+#include "widgets/radiobutton.h"
+#include "widgets/checkbox.h"
+#include "widgets/window.h"
+//#include <QApplication>
+#include <QVBoxLayout>
+#include <QDomDocument>
+#include <QDomElement>
+#include <QDomNode>
+#include <vector>
+
+std::vector< Widget* > widgets;
+
+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);
+  
+  /*
+  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()
+{
+}
+
+void Builder::recurser(QDomNode xml_node, QWidget *parent)
+{
+  QWidget *widget = NULL;
+  QDomElement xml_elem = xml_node.toElement();
+  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;
+  } 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);
+    widgets.push_back(lineedit);
+    widget = lineedit;
+  } else if(xml_elem.tagName() == "button") {
+    PushButton *pushbutton = new PushButton(xml_elem);
+    widgets.push_back(pushbutton);
+    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() == "radiobutton") {
+    RadioButton *radiobutton = new RadioButton(xml_elem);
+    widgets.push_back(radiobutton);
+    widget = radiobutton;
+  }
+  QDomNodeList children = xml_node.childNodes();
+
+  for (int i=0; i<children.count();i++) {
+    QDomNode child = children.at(i);
+    recurser(child, widget);
+  }
+
+  if(parent != NULL && widget != NULL) parent->layout()->addWidget(widget);
+  if(widget != NULL) widget->show();
+}
diff --git a/client/builder.h b/client/builder.h
new file mode 100644
index 0000000..6c0577d
--- /dev/null
+++ b/client/builder.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            builder.h
+ *
+ *  Fri Aug 31 12:27:45 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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.
+ */
+
+#ifndef _BUILDER_H
+#define _BUILDER_H
+
+#include <QDomDocument>
+#include <QWidget>
+#include <QDomNode>
+#include <QObject>
+
+class Builder : public QObject
+{
+  Q_OBJECT
+public:
+  Builder(QDomDocument *xml_doc);
+  ~Builder();
+
+  public slots:
+
+private:
+  void recurser(QDomNode xml_node, QWidget *parent);
+  QDomDocument *xml_doc;
+
+};
+
+#endif
diff --git a/client/macro.cc b/client/macro.cc
new file mode 100644
index 0000000..853b343
--- /dev/null
+++ b/client/macro.cc
@@ -0,0 +1,74 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            macro.cc
+ *
+ *  Fri Aug 31 13:40:17 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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 "macro.h"
+#include "builder.h"
+#include "xmlacquire.h"
+#include <QDomDocument>
+
+static QDomDocument xml_request(QString name);
+
+void macro(QString name)
+{
+  // Build the XML request
+  QDomDocument xml_req = xml_request(name);
+
+  // Fetch the XML document
+  XmlAcquire xml_acquire;
+  xml_acquire.makeConnection(&xml_req);
+  QByteArray ba = xml_acquire.getResult();
+
+  char *test = ba.data();
+  printf("%s\n", test);
+
+  // Parse the XML document
+  QDomDocument xml_doc;
+  if (!xml_doc.setContent(ba)) {
+    printf("ERROR: Invalid XML recieved!\n");
+  }
+
+  Builder builder(&xml_doc);
+}
+
+static QDomDocument xml_request(QString name)
+{
+  // Create the xml request document here
+  QByteArray xml_array;
+  xml_array.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+  xml_array.append("<pracro version=\"1.0\" cpr=\"1505050505\">\n");
+  xml_array.append("  <request macro=\"example\"/>\n");
+  xml_array.append("</pracro>");
+
+  char *test = xml_array.data();
+  printf("%s\n", test);
+
+  QDomDocument xml_req;
+  if (!xml_req.setContent(xml_array)) {
+    printf("Error: Invalid XML found in request\n");
+  }
+
+  return xml_req;
+}
diff --git a/client/macro.h b/client/macro.h
new file mode 100644
index 0000000..36f4f4f
--- /dev/null
+++ b/client/macro.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            macro.h
+ *
+ *  Fri Aug 31 13:40:17 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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.
+ */
+#ifndef __PRACRO_MACRO_H__
+#define __PRACRO_MACRO_H__
+
+#include <QString>
+
+void macro(QString name);
+
+#endif/*__PRACRO_MACRO_H__*/
diff --git a/client/main.cc b/client/main.cc
new file mode 100644
index 0000000..84701c8
--- /dev/null
+++ b/client/main.cc
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            main.cc
+ *
+ *  Fri Jul 13 12:38:45 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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 "macro.h"
+#include "xmlacquire.h"
+#include <QApplication>
+#include <QDomDocument>
+#include <QXmlSimpleReader>
+
+int main(int argc, char *argv[])
+{
+  QApplication app(argc, argv);
+
+  macro("example");
+
+  return app.exec();
+}
+
diff --git a/client/xmlacquire.cc b/client/xmlacquire.cc
new file mode 100644
index 0000000..2938832
--- /dev/null
+++ b/client/xmlacquire.cc
@@ -0,0 +1,136 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            xmlacquire.cc
+ *
+ *  Fri Jul 13 12:38:45 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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 "xmlacquire.h"
+
+#include <stdio.h>
+#include <QApplication>
+#include <QTcpSocket>
+#include <QDomDocument>
+#include <QByteArray>
+
+XmlAcquire::XmlAcquire()
+  : QObject()
+{
+  has_result = false;
+}
+
+void XmlAcquire::tcpConnect()
+{
+    tcpsocket->connectToHost("localhost", atoi("12345")); 
+    tcpConnected = TCP_CONNECTING;
+}
+
+void XmlAcquire::tcpDisconnect()
+{
+  tcpsocket->disconnectFromHost();
+  while(tcpConnected != TCP_DISCONNECTED) {
+    if(tcpConnected == TCP_ERROR) {
+      tcpConnected = TCP_DISCONNECTED;
+      return;
+    }
+    usleep(5000);
+    printf("PLUP!\n");
+    qApp->processEvents();
+  }
+}
+
+int XmlAcquire::tcpStatus()
+{
+  return tcpConnected;
+}
+
+void XmlAcquire::makeConnection(QDomDocument *xml_req)
+{
+  this->xml_req = xml_req;
+
+  tcpsocket = new QTcpSocket;
+  connect(tcpsocket, SIGNAL(hostFound()), this, SLOT(myHostFound()));
+  connect(tcpsocket, SIGNAL(readyRead()), this, SLOT(myReadyReadHandler()));
+  connect(tcpsocket, SIGNAL(connected()), this, SLOT(myConnected()));
+  connect(tcpsocket, SIGNAL(disconnected()), this, SLOT(myDisconnected()));
+  connect(tcpsocket, SIGNAL(error(QAbstractSocket::SocketError)), 
+          this, SLOT(myError(QAbstractSocket::SocketError)));
+  tcpConnect();
+}
+
+void XmlAcquire::myTcpWrite(char *msg, int len)
+{
+  if(tcpConnected == TCP_CONNECTED) 
+    tcpsocket->write(msg, len);
+  else 
+    printf("TCP socket not initialized!\n");
+}
+
+void XmlAcquire::myHostFound() // slot
+{
+  printf("Host Found!\n");
+}
+
+void XmlAcquire::myConnected() // slot
+{
+  tcpConnected = TCP_CONNECTED;
+  printf("TCP Connected!\n");
+
+  QByteArray ba = xml_req->toByteArray();
+  char *request = ba.data();
+  myTcpWrite(request, ba.length());
+}
+
+void XmlAcquire::myDisconnected() // slot
+{
+  tcpConnected = TCP_DISCONNECTED;
+  printf("TCP Disconnected!\n");
+
+  // Convert recieved data into an XML document
+  //xml_doc.setContent(ba_all);
+  has_result = true;
+
+  //char *test = ba_all.data();
+  //printf("%s\n", test);
+}
+
+void XmlAcquire::myError(QAbstractSocket::SocketError) // slot
+{
+  tcpConnected = TCP_ERROR;
+}
+
+void XmlAcquire::myReadyReadHandler()
+{
+  QByteArray ba;
+
+  ba = tcpsocket->readAll();
+  ba_all.append(ba);
+}
+
+QByteArray XmlAcquire::getResult()
+{
+  while(has_result == false) {
+    qApp->processEvents();
+  }
+  return ba_all;
+}
diff --git a/client/xmlacquire.h b/client/xmlacquire.h
new file mode 100644
index 0000000..a466f50
--- /dev/null
+++ b/client/xmlacquire.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            xmlacquire.h
+ *
+ *  Fri Jul 13 12:38:45 CEST 2007
+ *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup
+ *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk
+ ****************************************************************************/
+
+/*
+ *  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.
+ */
+
+#ifndef _XMLACQUIRE_H
+#define _XMLACQUIRE_H
+
+#include <QObject>
+#include <QTcpSocket>
+#include <QDomDocument>
+
+#define TCP_CONNECTED 1
+#define TCP_DISCONNECTED 2
+#define TCP_CONNECTING 3
+#define TCP_ERROR -1
+#define TCP_ERROR_SERVER_NOT_FOUND -2
+
+class XmlAcquire : public QObject
+{
+  Q_OBJECT
+public:
+  XmlAcquire();
+  void makeConnection(QDomDocument *xml_req);
+  QByteArray getResult();
+
+public slots:
+  void tcpConnect();
+  void tcpDisconnect();
+  int tcpStatus();
+  void myTcpWrite(char *msg, int len);
+  void myHostFound();
+  void myConnected();
+  void myDisconnected();
+  void myError(QAbstractSocket::SocketError);
+  void myReadyReadHandler();
+
+private:
+  QTcpSocket *tcpsocket;
+  int tcpConnected;
+  QByteArray ba_all;
+  bool has_result;
+  QDomDocument *xml_req;
+};
+
+#endif
-- 
cgit v1.2.3