intoduce event abstraction class
authorkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Wed, 3 Oct 2007 16:10:53 +0000 (16:10 +0000)
committerkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Wed, 3 Oct 2007 16:10:53 +0000 (16:10 +0000)
git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@43 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33

src/event.cpp [new file with mode: 0644]
src/event.h [new file with mode: 0644]
src/eventedit.cpp
src/eventedit.h
src/overview.cpp
src/overview.h
src/smoke.pro
src/webrequest.cpp
src/webrequest.h

diff --git a/src/event.cpp b/src/event.cpp
new file mode 100644 (file)
index 0000000..a62b60a
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// C++ Implementation: event
+//
+// Description: 
+//
+//
+// Author: Konrad Rosenbaum <konrad@silmor.de>, (C) 2007
+//
+// Copyright: See README/COPYING files that come with this distribution
+//
+//
+
+#include "event.h"
+#include "webrequest.h"
+
+MEvent::MEvent(MWebRequest*r,int id)
+{
+       req=r;
+       eventid=id;
+       if(id>=0){
+               req->request("geteventdata",QString::number(id).toAscii());
+       }
+}
+
+MEvent::~MEvent()
+{}
+
+void MEvent::save()
+{
+}
+
+QString MEvent::title()
+{
+}
\ No newline at end of file
diff --git a/src/event.h b/src/event.h
new file mode 100644 (file)
index 0000000..396a179
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// C++ Interface: event
+//
+// Description: 
+//
+//
+// Author: Konrad Rosenbaum <konrad@silmor.de>, (C) 2007
+//
+// Copyright: See README/COPYING files that come with this distribution
+//
+//
+
+#ifndef EVENT_H
+#define EVENT_H
+
+#include <QString>
+
+class MWebRequest;
+
+class MEvent
+{
+       public:
+               MEvent(MWebRequest*,int);
+               ~MEvent();
+               
+               void save();
+               
+               QString title();
+       private:
+               MWebRequest*req;
+               int eventid;
+               //display data
+               QString m_title,m_artist,m_description;
+               //timing and location
+               int m_starttime,m_endtime;
+               QString m_roomid;
+               //initially a copy from room, can be adjusted
+               int m_capacity;
+               //default pricing in cents
+               int m_defaultprice;
+               //if not null/empty: event has been cancelled
+               QString m_cancelreason;
+};
+
+#endif
index 322ff2c..45f3dd6 100644 (file)
 
 #include "eventedit.h"
 
-MEventEditor::MEventEditor(QWidget*w,qint32 id)
-       :QDialog(w)
+MEventEditor::MEventEditor(QWidget*w,MWebRequest*r,qint32 id)
+       :QDialog(w),event(r,id)
 {
        setWindowTitle("Event Editor");
+       req=r;
+       
+       
 }
index 8001637..7951e58 100644 (file)
 
 #include <QDialog>
 
+#include "event.h"
+
+class MWebRequest;
+
 class MEventEditor:public QDialog
 {
        public:
-               MEventEditor(QWidget*,qint32 id=-1);
+               MEventEditor(QWidget*,MWebRequest*,qint32 id=-1);
+       private:
+               MWebRequest*req;
+               MEvent event;
 };
 
 
index 4ab2795..e94bf2b 100644 (file)
@@ -23,6 +23,7 @@
 #include <QBoxLayout>
 #include <QPushButton>
 #include <QTableView>
+#include <QStandardItemModel>
 #include <QLabel>
 #include <QTextEdit>
 #include <QFrame>
@@ -42,6 +43,7 @@ MOverview::MOverview(MWebRequest*mw,QString pk)
        m->addAction(tr("&Close Session"),this,SLOT(close()));
        
        m=mb->addMenu(tr("&Event"));
+       m->addAction(tr("&Update Event List"),this,SLOT(updateEvents()))->setEnabled(req->hasRole("geteventlist"));
        m->addAction(tr("&Show details..."));
        m->addAction(tr("&New Event..."),this,SLOT(newEvent()))->setEnabled(req->hasRole("createevent"));
        m->addAction(tr("&Cancel Event..."));
@@ -64,14 +66,19 @@ MOverview::MOverview(MWebRequest*mw,QString pk)
        tab->addTab(eventtab=new QWidget,tr("Events"));
        QVBoxLayout*vl;QHBoxLayout*hl;
        eventtab->setLayout(hl=new QHBoxLayout);
-       hl->addWidget(new QTableView,10);
+       hl->addWidget(eventtable=new QTableView,10);
+       eventtable->setModel(eventmodel=new QStandardItemModel(this));
+       eventtable->setSelectionMode(QAbstractItemView::SingleSelection);
+       eventtable->setEditTriggers(QAbstractItemView::NoEditTriggers);
        hl->addSpacing(5);
        hl->addLayout(vl=new QVBoxLayout,0);
        QPushButton*p;
        vl->addWidget(p=new QPushButton(tr("New Event...")),0);
        connect(p,SIGNAL(clicked()),this,SLOT(newEvent()));
        p->setEnabled(req->hasRole("createevent"));
-       vl->addWidget(new QPushButton(tr("Details...")),0);
+       vl->addWidget(p=new QPushButton(tr("Details...")),0);
+       connect(p,SIGNAL(clicked()),this,SLOT(editEvent()));
+       p->setEnabled(req->hasRole("geteventdata"));
        vl->addSpacing(15);
        vl->addWidget(new QPushButton(tr("Order Ticket...")),0);
        vl->addStretch(10);
@@ -112,6 +119,29 @@ MOverview::MOverview(MWebRequest*mw,QString pk)
        
        //status bar
        statusBar()->setSizeGripEnabled(true);
+       
+       //fill tables
+       if(req->hasRole("geteventlist")){
+               updateEvents();
+       }else{
+               eventtab->setEnabled(false);
+       }
+}
+
+void MOverview::updateEvents()
+{
+       QList<MWebRequest::Eventlet>evl=req->getAllEvents();
+       eventmodel->clear();
+       eventmodel->insertColumns(0,2);
+       eventmodel->insertRows(0,evl.size());
+       eventmodel->setHorizontalHeaderLabels(QStringList()<<tr("Start Time")<<tr("Title"));
+       for(int i=0;i<evl.size();i++){
+               eventmodel->setData(eventmodel->index(i,0),evl[i].id,Qt::UserRole);
+               eventmodel->setData(eventmodel->index(i,0),evl[i].start.toString(tr("ddd MMMM d yyyy, h:mm ap","time format")));
+               eventmodel->setData(eventmodel->index(i,1),evl[i].title);
+       }
+       eventtable->resizeColumnToContents(0);
+       eventtable->resizeColumnToContents(1);
 }
 
 void MOverview::closeEvent(QCloseEvent*ce)
@@ -138,6 +168,20 @@ void MOverview::relogin()
 
 void MOverview::newEvent()
 {
-       MEventEditor ed(this);
+       MEventEditor ed(this,req);
+       ed.exec();
+       updateEvents();
+}
+
+void MOverview::editEvent()
+{
+       int id;
+       QModelIndexList ilst=eventtable->selectionModel()->selectedIndexes();
+       if(ilst.size()<1)return;
+       QModelIndex idx=eventmodel->index(ilst[0].row(),0);
+       id=eventmodel->data(idx,Qt::UserRole).toInt();
+       if(id<0)return;
+       MEventEditor ed(this,req,id);
        ed.exec();
+       updateEvents();
 }
index f3057e8..1c7bce0 100644 (file)
@@ -17,6 +17,8 @@
 
 class MWebRequest;
 class QTabWidget;
+class QTableView;
+class QStandardItemModel;
 
 /**Main Overview Window*/
 class MOverview:public QMainWindow
@@ -34,6 +36,10 @@ class MOverview:public QMainWindow
                void relogin();
                /**create a new event*/
                void newEvent();
+               /**edit existing event*/
+               void editEvent();
+               /**update list of events*/
+               void updateEvents();
        private:
                //my session object
                MWebRequest*req;
@@ -42,6 +48,8 @@ class MOverview:public QMainWindow
                //widgets
                QTabWidget*tab;
                QWidget*eventtab,*carttab;
+               QTableView*eventtable;
+               QStandardItemModel*eventmodel;
 };
 
 #endif
index 2d18154..7ef77ae 100644 (file)
@@ -22,14 +22,16 @@ SOURCES = \
        code39.cpp \
        webrequest.cpp \
        overview.cpp \
-       eventedit.cpp
+       eventedit.cpp \
+       event.cpp
 HEADERS = \
        keygen.h \
        mainwindow.h \
        hmac.h \
        webrequest.h \
        overview.h \
-       eventedit.h
+       eventedit.h \
+       event.h
 
 RESOURCES += files.qrc
 
index 9bc9989..f9fb699 100644 (file)
@@ -260,10 +260,39 @@ bool MWebRequest::hasRole(QString r)
                        roles<<rl;
                }
                //if none: put in a dummy to avoid asking again
-               if(roles.size()==0)roles<<"__none__";
+               if(roles.size()==0)roles<<" __ none __ ";
        }
        //check whether we are admin
        if(roles.contains("_admin"))return true;
        //check whether we have role
        return roles.contains(r.toLower());
 }
+
+QList<MWebRequest::Eventlet> MWebRequest::getAllEvents()
+{
+       errstr="";
+       if(!request("geteventlist"))return QList<Eventlet>();
+       //parse return document
+       QDomDocument doc;
+       QString msg;int ln,cl;
+       if(!doc.setContent(rspdata,&msg,&ln,&cl)){
+               errstr=tr("Error parsing EventList XML data (line %1 column %2): %3").arg(ln).arg(cl).arg(msg);
+               return QList<Eventlet>();
+       }
+       QDomElement root=doc.documentElement();
+       QDomNodeList nl=root.elementsByTagName("Event");
+       QList<Eventlet>ret;
+       for(int i=0;i<nl.size();i++){
+               QDomElement el=nl.at(i).toElement();
+               if(el.isNull())continue;
+               Eventlet ev;
+               ev.title=el.text();
+               bool b;
+               ev.id=el.attribute("id").toInt(&b);
+               if(!b || ev.id<0)continue;
+               ev.start=QDateTime::fromTime_t(el.attribute("start").toInt(&b));
+               if(!b)continue;
+               ret.append(ev);
+       }
+       return ret;
+}
index 72f0281..50a7a30 100644 (file)
@@ -19,6 +19,8 @@
 #include <QPointer>
 #include <QHttp>
 #include <QUrl>
+#include <QList>
+#include <QDateTime>
 
 /**abstraction of requests to the web server, handles sessions and all data transfer*/
 class MWebRequest:public QObject
@@ -37,6 +39,15 @@ class MWebRequest:public QObject
                /**returns whether the user has a specific role/right*/
                bool hasRole(QString);
                
+               /**represents the minimal info about an event that comes from a getAllEvents*/
+               struct Eventlet{
+                       int id;
+                       QString title;
+                       QDateTime start;
+               };
+               /**returns a list of all events*/
+               QList<Eventlet>getAllEvents();
+               
        public slots:
                /**set how long to wait for a web request*/
                void setTimeout(int);