TEMPLATE = subdirs
-SUBDIRS = orm mvc sql gui app test
+SUBDIRS = orm mvc sql gui app
+#SUBDIRS += test
CONFIG += ordered
}
// draw Controls
- painter->drawImage(mControls[FavouriteControl]->drawPoint(option.rect),*mControls[FavouriteControl]->image());
- painter->drawImage(mControls[AlarmControl]->drawPoint(option.rect),*mControls[AlarmControl]->image());
+ if(static_cast<Event*>(index.internalPointer())->isFavourite())
+ painter->drawImage(mControls[FavouriteControlOn]->drawPoint(option.rect),*mControls[FavouriteControlOn]->image());
+ else
+ painter->drawImage(mControls[FavouriteControlOff]->drawPoint(option.rect),*mControls[FavouriteControlOff]->image());
+ painter->drawImage(mControls[AlarmControlOn]->drawPoint(option.rect),*mControls[AlarmControlOn]->image());
painter->drawImage(mControls[MapControl]->drawPoint(option.rect),*mControls[MapControl]->image());
}
else // doesn't have parent - time-groups' elements (top items)
void Delegate::defineControls()
{
Control *control;
- // FAVOURITE ICON
- control = new Control(FavouriteControl,QString(":icons/favourite-on.png"));
+ // FAVOURITE ICONs
+ // on
+ control = new Control(FavouriteControlOn,QString(":icons/favourite-on.png"));
control->setDrawPoint(QPoint(-control->image()->width()-SPACER,SPACER));
- mControls.insert(FavouriteControl,control);
-
- // ALARM ICON
- control = new Control(AlarmControl,QString(":icons/alarm-on.png"));
- control->setDrawPoint(QPoint(-mControls[FavouriteControl]->image()->width()-control->image()->width()-2*SPACER,SPACER));
- mControls.insert(AlarmControl,control);
+ mControls.insert(FavouriteControlOn,control);
+ // off
+ control = new Control(FavouriteControlOff,QString(":icons/favourite-off.png"));
+ control->setDrawPoint(QPoint(-control->image()->width()-SPACER,SPACER));
+ mControls.insert(FavouriteControlOff,control);
+
+ // ALARM ICONs
+ // on
+ control = new Control(AlarmControlOn,QString(":icons/alarm-on.png"));
+ control->setDrawPoint(QPoint(-mControls[FavouriteControlOn]->image()->width()-control->image()->width()-2*SPACER,SPACER));
+ mControls.insert(AlarmControlOn,control);
+ // off
+ control = new Control(AlarmControlOff,QString(":icons/alarm-off.png"));
+ control->setDrawPoint(QPoint(-mControls[FavouriteControlOff]->image()->width()-control->image()->width()-2*SPACER,SPACER));
+ mControls.insert(AlarmControlOff,control);
// MAP ICON
control = new Control(MapControl,QString(":icons/compass.png"));
- control->setDrawPoint(QPoint(-mControls[AlarmControl]->image()->width()-control->image()->width()
- -mControls[FavouriteControl]->image()->width()-3*SPACER,SPACER));
+ control->setDrawPoint(QPoint(-mControls[AlarmControlOn]->image()->width()-control->image()->width()
+ -mControls[FavouriteControlOn]->image()->width()-3*SPACER,SPACER));
mControls.insert(MapControl,control);
}
enum ControlId
{
ControlNone = 0,
- FavouriteControl,
- AlarmControl,
+ FavouriteControlOn,
+ FavouriteControlOff,
+ AlarmControlOn,
+ AlarmControlOff,
MapControl
};
<< QSqlField("duration", QVariant::Int)
<< QSqlField("xid_activity", QVariant::Int)
<< QSqlField("type", QVariant::String)
- << QSqlField("language", QVariant::String));
+ << QSqlField("language", QVariant::String)
+ << QSqlField("favourite", QVariant::Bool));
QString const Event::sTableName = QString("event");
return load(query);
}
+
#include <ormrecord.h>
-
/**
NoSuchEventException is thrown when required event does not exist.
*/
int activityId() const { return value("xid_activity").toInt(); }
QString type() const { return value("type").toString(); }
QString language() const { return value("language").toString(); }
+ bool isFavourite() const { return value("favourite").toBool(); }
void setId(int id) { setValue("id", id); }
void setConferenceId(int conferenceId) { setValue("xid_conference", conferenceId); }
void setActivityId(int activityId) { setValue("xid_activity", activityId); }
void setType(const QString& type) { setValue("type", type); }
void setLanguage(const QString& language) { setValue("language", language); }
+ void setFavourite(bool favourite) { setValue("favourite", favourite); }
friend class EventTest;
};
-
-
#endif // EVENT_H
+
#include "treeview.h"
#include "delegate.h"
+#include "event.h"
#include <QDebug>
Delegate *delegate = static_cast<Delegate*>(itemDelegate(aIndex));
switch(delegate->whichControlClicked(aIndex,aPoint))
{
- case Delegate::FavouriteControl:
+ case Delegate::FavouriteControlOn:
+ case Delegate::FavouriteControlOff:
{
// handle Favourite Control clicked
- qDebug() << "FAVOURITE CLICKED: " << qVariantValue<QString>(aIndex.data());
+ Event event = Event::getById(aIndex.data().toInt(),1);
+ if(event.isFavourite())
+ {
+ static_cast<Event*>(aIndex.internalPointer())->setFavourite(false); // list of events
+ event.setFavourite(false); // update DB
+ }
+ else
+ {
+ static_cast<Event*>(aIndex.internalPointer())->setFavourite(true); // list of events
+ event.setFavourite(true);
+ }
+ qDebug() << " FAVOURITE [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.isFavourite();
+ event.update("favourite");
+ // TODO: since the Favourite icon has changed, update TreeView accordingly
+ // not really working solution is the following
+ // maybe the call to MainWindow->update() fix the problem ???
+ QTreeView::update();
+ update();
}
break;
- case Delegate::AlarmControl:
+ case Delegate::AlarmControlOn:
+ case Delegate::AlarmControlOff:
{
// handle Alarm Control clicked
qDebug() << "ALARM CLICKED: " << qVariantValue<QString>(aIndex.data());
public:
OrmRecord();
static T hydrate(const QSqlRecord& record);
+ void update(QString col, QVariant value = QVariant()); // updates specified column 'col'
protected:
QVariant value(QString col) const;
// auxiliary methods
static QString columnsForSelect(const QString& prefix = QString());
static QString selectQuery();
+ static QString updateQuery();
static QSqlRecord toRecord(const QList<QSqlField> & columnList);
static QVariant convertToC(QVariant value, QVariant::Type colType);
return object;
}
+// updates specified column 'col'
+// if the value is not specified as an argument,
+// it's taken from the reford itself
+// see also: setValue() method for more details
+template <typename T>
+void OrmRecord<T>::update(QString col, QVariant value)
+{
+ QSqlQuery query;
+ query.prepare(QString(updateQuery() + "SET %1 = :col WHERE id = :id").arg(col));
+ if(value.isValid()) // take 'col' value from the method's arguments
+ query.bindValue(":col", value);
+ else // take 'col' value from the record; see setValue()
+ query.bindValue(":col", convertToDb(this->value(col), this->value(col).type()));
+ query.bindValue(":id", this->value("id"));
+ //query.bindValue(":id", convertToDb(value("id"), QVariant::Int));
+ query.exec();
+}
+
template <typename T>
QVariant OrmRecord<T>::value(QString col) const
{
{
if (!query.exec())
{
- //TODO Palo: exception handling !
- QString start = "START\n";
- QString end = "\nEND\n";
- QString message = start + query.lastError().text() + end;
- const char *data = message.toLatin1().data();
- qDebug(data);
throw new OrmSqlException(query.lastError().text());
}
}
return QString("SELECT %1 FROM %2 ").arg(columnsForSelect(), T::sTableName);
}
+template <typename T>
+QString OrmRecord<T>::updateQuery()
+{
+ return QString("UPDATE %1 ").arg(T::sTableName);
+}
+
template <typename T>
QSqlRecord OrmRecord<T>::toRecord(const QList<QSqlField> & columnList)
{
// The items of the Event are divided into the two tables EVENT and VIRTUAL_EVENT
// VIRTUAL_EVENT is for Full-Text-Serach Support
QDateTime startDateTime = QDateTime(QDate::fromString(aEvent["date"],DATE_FORMAT),QTime::fromString(aEvent["start"],TIME_FORMAT));
- QString values = QString("'%1', '%2', '%3', '%4', '%5', '%6', '%7'") \
+ QString values = QString("'%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8'") \
.arg(aEvent["conference_id"]) \
.arg(aEvent["id"]) \
.arg(QString::number(startDateTime.toTime_t())) \
.arg(-QTime::fromString(aEvent["duration"],TIME_FORMAT).secsTo(QTime(0,0))) \
.arg("123456") \
.arg(aEvent["type"]) \
- .arg(aEvent["language"]);
+ .arg(aEvent["language"]) \
+ .arg("0"); // not favourite when added
- QString query = QString("INSERT INTO EVENT (xid_conference, id, start, duration, xid_activity, type, language) VALUES (%1)").arg(values);
+ QString query = QString("INSERT INTO EVENT (xid_conference, id, start, duration, xid_activity, type, language, favourite) VALUES (%1)").arg(values);
QSqlQuery result (query, db);
//LOG_AUTOTEST(query);
xid_activity INTEGER NOT NULL REFERENCES ACTIVITY(id), \
type VARCHAR, \
language VARCHAR, \
+ favourite INTEGER DEFAULT 0, \
PRIMARY KEY (xid_conference,id), \
FOREIGN KEY(xid_conference) REFERENCES CONFERENCE(id) \
FOREIGN KEY(xid_activity) REFERENCES ACTIVITY(id))");