From 163e480d38f5950db27281aa7a3a7cdcba6f2b9f Mon Sep 17 00:00:00 2001 From: konrad Date: Wed, 3 Oct 2007 16:10:53 +0000 Subject: [PATCH] intoduce event abstraction class git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@43 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33 --- src/event.cpp | 34 ++++++++++++++++++++++++++++++++++ src/event.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/eventedit.cpp | 7 +++++-- src/eventedit.h | 9 ++++++++- src/overview.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- src/overview.h | 8 ++++++++ src/smoke.pro | 6 ++++-- src/webrequest.cpp | 31 ++++++++++++++++++++++++++++++- src/webrequest.h | 11 +++++++++++ 9 files changed, 192 insertions(+), 9 deletions(-) create mode 100644 src/event.cpp create mode 100644 src/event.h diff --git a/src/event.cpp b/src/event.cpp new file mode 100644 index 0000000..a62b60a --- /dev/null +++ b/src/event.cpp @@ -0,0 +1,34 @@ +// +// C++ Implementation: event +// +// Description: +// +// +// Author: Konrad Rosenbaum , (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 index 0000000..396a179 --- /dev/null +++ b/src/event.h @@ -0,0 +1,45 @@ +// +// C++ Interface: event +// +// Description: +// +// +// Author: Konrad Rosenbaum , (C) 2007 +// +// Copyright: See README/COPYING files that come with this distribution +// +// + +#ifndef EVENT_H +#define EVENT_H + +#include + +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 diff --git a/src/eventedit.cpp b/src/eventedit.cpp index 322ff2c..45f3dd6 100644 --- a/src/eventedit.cpp +++ b/src/eventedit.cpp @@ -12,8 +12,11 @@ #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; + + } diff --git a/src/eventedit.h b/src/eventedit.h index 8001637..7951e58 100644 --- a/src/eventedit.h +++ b/src/eventedit.h @@ -15,10 +15,17 @@ #include +#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; }; diff --git a/src/overview.cpp b/src/overview.cpp index 4ab2795..e94bf2b 100644 --- a/src/overview.cpp +++ b/src/overview.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -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() +{ + QListevl=req->getAllEvents(); + eventmodel->clear(); + eventmodel->insertColumns(0,2); + eventmodel->insertRows(0,evl.size()); + eventmodel->setHorizontalHeaderLabels(QStringList()<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(); } diff --git a/src/overview.h b/src/overview.h index f3057e8..1c7bce0 100644 --- a/src/overview.h +++ b/src/overview.h @@ -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 diff --git a/src/smoke.pro b/src/smoke.pro index 2d18154..7ef77ae 100644 --- a/src/smoke.pro +++ b/src/smoke.pro @@ -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 diff --git a/src/webrequest.cpp b/src/webrequest.cpp index 9bc9989..f9fb699 100644 --- a/src/webrequest.cpp +++ b/src/webrequest.cpp @@ -260,10 +260,39 @@ bool MWebRequest::hasRole(QString r) roles< MWebRequest::getAllEvents() +{ + errstr=""; + if(!request("geteventlist"))return QList(); + //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(); + } + QDomElement root=doc.documentElement(); + QDomNodeList nl=root.elementsByTagName("Event"); + QListret; + for(int i=0;i #include #include +#include +#include /**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*/ + QListgetAllEvents(); + public slots: /**set how long to wait for a web request*/ void setTimeout(int); -- 1.7.2.5