1 #include "mainwindow.h"
2 #include <appsettings.h>
10 #include <eventmodel.h>
13 #include <conference.h>
16 #include <QMessageBox>
18 #include <eventdialog.h>
19 #include "daynavigatorwidget.h"
20 #include "importschedulewidget.h"
21 #include "mapwindow.h"
23 #include <tabcontainer.h>
25 MainWindow::MainWindow(int aEventId, QWidget *aParent)
26 : QMainWindow(aParent)
30 // Sanity check for existence of any Conference in the DB
31 // it AppSettings::confId() is 0, but there are any Conference(s) in the DB
32 // set the confId in the AppSettings for the ID of the first conference in the DB
33 QList<Conference> confs = Conference::getAll();
34 if(!confs.count()) // no conference(s) in the DB
36 AppSettings::setConfId(0); // no conference in the DB
40 if(AppSettings::confId() == 0)
41 AppSettings::setConfId(confs[0].id());
43 setWindowTitle(confs[0].title());
46 dayTabContainer->setType(TabContainer::EContainerTypeDay);
47 favsTabContainer->setType(TabContainer::EContainerTypeFavs);
48 tracksTabContainer->setType(TabContainer::EContainerTypeTracks);
49 nowTabContainer->setType(TabContainer::EContainerTypeNow);
50 roomsTabContainer->setType(TabContainer::EContainerTypeRooms);
52 connect(importScheduleWidget, SIGNAL(scheduleImported(int)), SLOT(scheduleImported(int)));
54 connect(searchDayNavigator, SIGNAL(dateChanged(const QDate &)), SLOT(updateSearchView(const QDate &)));
57 searchTreeView->setHeaderHidden(true);
58 searchTreeView->setRootIsDecorated(false);
59 searchTreeView->setIndentation(0);
60 searchTreeView->setAnimated(true);
61 searchTreeView->setModel(new EventModel());
62 searchTreeView->setItemDelegate(new Delegate(searchTreeView));
64 // event details have changed
65 connect(dayTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
66 connect(favsTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
67 connect(favsTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
68 connect(roomsTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
69 connect(nowTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
71 connect(searchTreeView, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
74 connect(searchTreeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &)));
76 // event search button clicked
77 connect(searchButton, SIGNAL(clicked()), SLOT(searchClicked()));
78 connect(searchAgainButton, SIGNAL(clicked()), SLOT(searchAgainClicked()));
80 // event conference map button clicked
81 connect(showMapButton, SIGNAL(clicked()), SLOT(conferenceMapClicked()));
83 connect(tabWidget, SIGNAL(infoIconClicked()), SLOT(aboutApp()));
85 if(Conference::getAll().count()) // no conference(s) in the DB
87 QDate aStartDate = Conference::getById(AppSettings::confId()).start();
88 QDate aEndDate = Conference::getById(AppSettings::confId()).end();
89 searchDayNavigator->setDates(aStartDate, aEndDate);
91 dayTabContainer->setDates(aStartDate, aEndDate);
92 tracksTabContainer->setDates(aStartDate, aEndDate);
93 roomsTabContainer->setDates(aStartDate, aEndDate);
94 favsTabContainer->setDates(aStartDate, aEndDate);
96 conferenceTitle->setText(Conference::getById(AppSettings::confId()).title());
97 conferenceSubtitle->setText(Conference::getById(AppSettings::confId()).subtitle());
98 conferenceWhere->setText(Conference::getById(AppSettings::confId()).city() + ", " + Conference::getById(AppSettings::confId()).venue());
99 conferenceWhen->setText(
100 Conference::getById(AppSettings::confId()).start().toString("dd-MM-yyyy")
102 Conference::getById(AppSettings::confId()).end().toString("dd-MM-yyyy"));
105 searchTreeView->hide();
106 searchVerticalWidget->hide();
109 // open dialog for given Event ID
110 // this is used in case Alarm Dialog request application to start
115 EventDialog dialog(aEventId,this);
118 catch(OrmNoObjectException&) {} // just start application
119 catch(...) {} // just start application
123 void MainWindow::scheduleImported(int aConfId)
127 QList<Conference> confs = Conference::getAll();
128 if(!confs.count()) // no conference(s) in the DB
130 AppSettings::setConfId(0); // no conference in the DB
134 if(AppSettings::confId() == 0)
135 AppSettings::setConfId(confs[0].id());
137 // 'dayNavigator' emits signal 'dateChanged' after setting valid START:END dates
138 QDate startDate = Conference::getById(AppSettings::confId()).start();
139 QDate endDate = Conference::getById(AppSettings::confId()).end();
140 dayTabContainer->setDates(startDate, endDate);
141 tracksTabContainer->setDates(startDate, endDate);
142 roomsTabContainer->setDates(startDate, endDate);
143 favsTabContainer->setDates(startDate, endDate);
147 void MainWindow::aboutApp()
149 QDialog dialog(this);
155 void MainWindow::updateSearchView(const QDate &aDate)
157 qDebug() << "MainWindow::updateSearchView(), aDate: " << aDate.toString() ;
158 searchTreeView->reset();
159 int eventsCount = static_cast<EventModel*>(searchTreeView->model())->loadSearchResultEvents(aDate,AppSettings::confId());
161 searchDayNavigator->getCurrentDate() != Conference::getById(AppSettings::confId()).start() ){
162 searchVerticalWidget->show();
163 //searchAgainButton->show();
164 searchTreeView->show();
168 searchTreeView->hide();
169 searchVerticalWidget->hide();
174 void MainWindow::searchClicked()
176 QHash<QString,QString> columns;
178 if( searchTitle->isChecked() )
179 columns.insertMulti("EVENT", "title");
180 if( searchAbstract->isChecked() )
181 columns.insertMulti("EVENT", "abstract");
182 if( searchTag->isChecked() )
183 columns.insertMulti("EVENT", "tag");
184 if( searchSpeaker->isChecked() )
185 columns["PERSON"] = "name";
186 if( searchRoom->isChecked() )
187 columns["ROOM"] = "name";
189 QString keyword = searchEdit->text().replace( QString("%"), QString("\\%") );
190 qDebug() << "\nKeyword to search: " << keyword;
191 SqlEngine::searchEvent( AppSettings::confId(), columns, keyword );
193 QDate aStartDate = Conference::getById(AppSettings::confId()).start();
194 QDate aEndDate = Conference::getById(AppSettings::confId()).end();
195 searchDayNavigator->setDates(aStartDate, aEndDate);
196 updateSearchView( Conference::getById(AppSettings::confId()).start() );
199 void MainWindow::searchAgainClicked()
202 //searchAgainButton->hide();
203 searchVerticalWidget->hide();
204 searchTreeView->hide();
207 void MainWindow::conferenceMapClicked()
209 QString mapPath = QString(":/maps/campus.png");
210 if(!QFile::exists(mapPath))
211 mapPath = QString(":/maps/rooms/not-available.png");
215 QPixmap map(mapPath);
216 MapWindow window(map,roomName,this);
220 void MainWindow::eventHasChanged(int aEventId)
222 dayTabContainer->updateTreeViewModel(aEventId);
223 favsTabContainer->updateTreeViewModel(aEventId);
224 tracksTabContainer->updateTreeViewModel(aEventId);
225 nowTabContainer->updateTreeViewModel(aEventId);
226 roomsTabContainer->updateTreeViewModel(aEventId);
228 static_cast<EventModel*>(searchTreeView->model())->updateModel(aEventId);