searchTreeView->setModel(new EventModel());
searchTreeView->setItemDelegate(new Delegate(searchTreeView));
+ // event details have changed
+ connect(dayTreeView, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+ connect(favTreeView, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+ connect(trackTreeView, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+ connect(searchTreeView, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+
// event clicked
connect(dayTreeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &)));
connect(favTreeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &)));
connect(searchTreeView, SIGNAL(requestForWarning(const QModelIndex &)), SLOT(displayWarning(const QModelIndex &)));
// event search button clicked
connect(searchButton, SIGNAL(clicked()), SLOT(searchClicked()));
-
- // TESTING: load some 'fav' data
- if(Conference::getAll().count()) // no conference(s) in the DB
- {
- static_cast<EventModel*>(favTreeView->model())->loadFavEvents(Conference::getById(AppSettings::confId()).start(),AppSettings::confId());
- favTreeView->reset();
- }
+ //
+ connect(tabWidget, SIGNAL(currentChanged(int)), SLOT(tabHasChanged(int)));
if(!Conference::getAll().count()) // no conference(s) in the DB
{
Conference::getById(AppSettings::confId()).end().toString("dd-MM-yyyy"));
}
- connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateTab(int)));
-
searchTreeView->hide();
searchDayNavigator->hide();
dayNavigator->show();
}
-void MainWindow::updateTab(const int aIndex)
-{
- switch(aIndex)
- {
- case 0://index 0 of tabWidget: dayViewTab
- {
- updateDayView(dayNavigator->getCurrentDate());
- }
- break;
- case 1: //index 1 of tabWidget: favouritesTab
- {
- updateFavouritesView(favouriteDayNavigator->getCurrentDate());
- }
- break;
- case 2: //index 2 of tabWidget: activitiesTab
- {
- updateTracksView(trackDayNavigator->getCurrentDate());
- }
- break;
- case 3: //index 3 of tabWidget: searchTab
- {
- updateSearchView( searchDayNavigator->getCurrentDate() );
- }
- break;
- default:
- {
-
- }
- };
-}
-
void MainWindow::updateTracksView(const QDate &aDate)
{
static_cast<EventModel*>(trackTreeView->model())->loadEventsByTrack(aDate, AppSettings::confId());
tr("This event happens at the same time than another one of your favourites.") );
}
+void MainWindow::eventHasChanged(int aEventId)
+{
+ static_cast<EventModel*>(dayTreeView->model())->updateModel(aEventId);
+ static_cast<EventModel*>(favTreeView->model())->updateModel(aEventId);
+ static_cast<EventModel*>(trackTreeView->model())->updateModel(aEventId);
+ static_cast<EventModel*>(searchTreeView->model())->updateModel(aEventId);
+}
+
+void MainWindow::tabHasChanged(int aIndex)
+{
+ Q_UNUSED(aIndex);
+
+ updateFavouritesView(favouriteDayNavigator->getCurrentDate());
+}
+
void importSchedule();
void aboutApp();
void updateDayView(const QDate &aDate);
- void updateTab(const int n);
void updateTracksView(const QDate &aDate);
void updateFavouritesView(const QDate &aDate);
void updateSearchView(const QDate &aDate);
void displayMap(const QModelIndex &aIndex);
void displayWarning(const QModelIndex &aIndex);
void searchClicked();
+ void tabHasChanged(int aIndex);
+ void eventHasChanged(int aEventId);
private:
SqlEngine *mSqlEngine;
};
#include "eventmodel.h"
+#include <appsettings.h>
#include <conference.h>
#include <track.h>
createTrackGroups();
}
-void EventModel::emitDataChangedSignal(const QModelIndex &aTopLeft, const QModelIndex &aBottomRight)
+void EventModel::updateModel(int aEventId)
{
- emit(dataChanged(aTopLeft,aBottomRight));
+ for(int i=0; i<mEvents.count(); i++)
+ {
+ if(mEvents[i].id() == aEventId)
+ mEvents[i] = Event::getById(aEventId,AppSettings::confId());
+ }
+
+ // find the ModelIndex for given aEventId
+ for(int i=0; i<mGroups.count(); i++)
+ {
+ QModelIndex groupIndex = index(i,0,QModelIndex());
+ for(int j=0; j<mGroups[i].mChildCount; j++)
+ {
+ QModelIndex eventIndex = index(j,0,groupIndex);
+ if(static_cast<Event*>(eventIndex.internalPointer())->id() == aEventId)
+ {
+ emit(dataChanged(eventIndex,eventIndex));
+ }
+ }
+ }
}
void loadFavEvents(const QDate &aDate, int aConferenceId); // loads Favourite events from the DB
void loadEventsByTrack(const QDate &aDate, int aConferenceId); // loads Events grouped by Track from the DB
int loadSearchResultEvents(const QDate &aDate, int aConferenceId);
- // a method to force 'EventModel' emit signal 'dataChanged()'
- // a 'view', eg. 'TreeView' listens for this signal and redraws changed items(indexes)
- void emitDataChangedSignal(const QModelIndex &aTopLeft, const QModelIndex &aBottomRight);
private:
struct Group
void createTrackGroups();
void clearModel();
+public slots:
+ void updateModel(int aEventId);
+
private:
QList<Event> mEvents;
QList<Group> mGroups;
# module dependencies
LIBS += -L$$DESTDIR -lorm
-INCLUDEPATH += ../orm
+INCLUDEPATH += ../orm ../app
DEPENDPATH += . ../orm
TARGETDEPS += $$DESTDIR/liborm.a
// handle Favourite Control clicked
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
- }
+ event.setFavourite(false);
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");
- // since the Favourite icon has changed, update TreeView accordingly
- static_cast<EventModel*>(model())->emitDataChangedSignal(aIndex,aIndex);
+ qDebug() << " FAVOURITE [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.isFavourite();
+ // since the Favourite icon has changed, update TreeViews accordingly
+ // all TreeViews have to listen on this signal
+ emit(eventHasChanged(event.id()));
handled = true;
}
break;
Event event = Event::getById(aIndex.data().toInt(),1);
if(event.hasAlarm())
{
- static_cast<Event*>(aIndex.internalPointer())->setHasAlarm(false); // list of events
event.setHasAlarm(false); // update DB
#ifdef MAEMO
// remove alarm from the 'alarmd' alrms list
}
else
{
- static_cast<Event*>(aIndex.internalPointer())->setHasAlarm(true); // list of events
event.setHasAlarm(true);
#ifdef MAEMO
// add alarm to the 'alarmd'
qDebug() << "cookie: " << cookie;
#endif /* MAEMO */
}
- qDebug() << " ALARM [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.hasAlarm();
event.update("alarm");
+ qDebug() << " ALARM [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.hasAlarm();
// since the Alarm icon has changed, update TreeView accordingly
- static_cast<EventModel*>(model())->emitDataChangedSignal(aIndex,aIndex);
+ // all TreeViews have to listen on this signal
+ emit(eventHasChanged(event.id()));
handled = true;
}
break;
signals:
void requestForMap(const QModelIndex &aIndex);
void requestForWarning(const QModelIndex &aIndex);
+ void eventHasChanged(int aEventId); // emited when user changes some event details, eg. sets it Favourite
};
#endif /* TREEVIEW_H */