diff options
Diffstat (limited to 'client/macro.cc')
-rw-r--r-- | client/macro.cc | 117 |
1 files changed, 73 insertions, 44 deletions
diff --git a/client/macro.cc b/client/macro.cc index 7f8ea27..82c68a4 100644 --- a/client/macro.cc +++ b/client/macro.cc @@ -3,8 +3,8 @@ * 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 + * Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen + * deva@aasimon.org and elsenator@gmail.com ****************************************************************************/ /* @@ -30,28 +30,78 @@ #include <QDomDocument> #include <QApplication> -#define MY_EVENT_ID 65432 +#define MACRO_EVENT_ID 65432 extern QString cpr; extern QString user; extern QString host; extern quint16 port; -class MyEvent : public QEvent { +/** + * Macro Event used to trigger the creation of a new macro + */ +class MacroEvent : public QEvent { public: - MyEvent(QString macro) : QEvent((QEvent::Type)MY_EVENT_ID) - { - this->macro = macro; - } + MacroEvent(QString course, QString macro) : + QEvent((QEvent::Type)MACRO_EVENT_ID), + macro(macro), + course(course) {} QString macro; + QString course; +}; + +/** + * Macro Event Filter used to catch the Macro Events. + */ +class MacroEventFilter : public QObject { +protected: + bool eventFilter( QObject *o, QEvent *e ); }; -static QDomDocument xml_request(QString name); +/** + * The single global macro event filter. + * It is created the first time new_macro is called. + */ +MacroEventFilter *macro_event_filter = NULL; + +/** + * This function sends a request to the praco server, and returns the + * parsed answer. + */ +static QDomDocument xml_request(QString course, QString macro) +{ + // Create the xml request array + QByteArray xml_array; + printf("course: %s, macro: %s, cpr: %s, user: %s\n", + course.toStdString().c_str(), + macro.toStdString().c_str(), + cpr.toStdString().c_str(), + user.toStdString().c_str()); + xml_array.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + xml_array.append("<pracro version=\"1.0\" cpr=\"" + cpr + "\" user=\"" + user + "\">\n"); + xml_array.append(" <request course=\"" + course + "\" macro=\"" + macro + "\"/>\n"); + xml_array.append("</pracro>"); + + // Print to stdout for debug purposes + char *test = xml_array.data(); + printf("%s\n", test); + + // Parse the XML document using setContent of QDomDocument + QDomDocument xml_req; + if (!xml_req.setContent(xml_array)) { + printf("Error: Invalid XML found in request\n"); + } + + return xml_req; +} -void create_macro(QString name) +/** + * Create the new macro + */ +static void create_macro(QString course, QString macro) { // Build the XML request - QDomDocument xml_req = xml_request(name); + QDomDocument xml_req = xml_request(course, macro); // Fetch the XML document SendRecieve xml_acquire(host, port); @@ -70,50 +120,29 @@ void create_macro(QString name) } // Initiate the macro builder with the xml document + // FIXME: This should be done in some other way, to prevent the memory leak. new Builder(&xml_doc); - //Builder *builder = new Builder(&xml_doc); } -bool MyEventHandler::eventFilter( QObject *, QEvent *e ) +bool MacroEventFilter::eventFilter( QObject *, QEvent *e ) { - if ( e->type() == MY_EVENT_ID ) { - MyEvent *event = (MyEvent*)e; - create_macro(event->macro); - // ... DO SOMETHING WITH EVENT + if ( e->type() == MACRO_EVENT_ID ) { + MacroEvent *event = (MacroEvent*)e; + create_macro(event->course, event->macro); return TRUE; // eat event } else { - // standard event processing return FALSE; } } -void new_macro(QString macro) -{ - MyEvent *event = new MyEvent(macro); - qApp->postEvent(qApp, event); - qApp->processEvents(); /* To prevent QT from closing when - no windows are present */ -} - -static QDomDocument xml_request(QString name) +void new_macro(QString course, QString macro) { - // Create the xml request array - QByteArray xml_array; - printf("macro: %s, cpr: %s, user: %s\n", name.toStdString().c_str(), cpr.toStdString().c_str(), user.toStdString().c_str()); - xml_array.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - xml_array.append("<pracro version=\"1.0\" cpr=\"" + cpr + "\" user=\"" + user + "\">\n"); - xml_array.append(" <request course=\"example2\" macro=\"" + name + "\"/>\n"); - xml_array.append("</pracro>"); - - // Print to stdout for debug purposes - char *test = xml_array.data(); - printf("%s\n", test); - - // Parse the XML document using setContent of QDomDocument - QDomDocument xml_req; - if (!xml_req.setContent(xml_array)) { - printf("Error: Invalid XML found in request\n"); + if(macro_event_filter == NULL) { + macro_event_filter = new MacroEventFilter(); + qApp->installEventFilter( macro_event_filter ); } - return xml_req; + MacroEvent *event = new MacroEvent(course, macro); + qApp->postEvent(qApp, event); + qApp->processEvents(); // To prevent QT from closing when no windows are present } |