1 #include "mainwindow.h"
9 #include <eventmodel.h>
12 #include <conference.h>
15 #include <QMessageBox>
17 #include <eventdialog.h>
18 #include "daynavigatorwidget.h"
19 #include "importschedulewidget.h"
20 #include "mapwindow.h"
22 #include <tabcontainer.h>
24 MainWindow::MainWindow(int aEventId, QWidget *aParent)
25 : QMainWindow(aParent)
29 int confId = Conference::activeConference();
31 connect(importScheduleWidget, SIGNAL(scheduleImported(int)), SLOT(scheduleImported(int)));
33 // event details have changed
34 connect(dayTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
35 connect(favsTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
36 connect(tracksTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
37 connect(roomsTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
38 connect(nowTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
39 connect(searchTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
41 // event conference map button clicked
42 connect(showMapButton, SIGNAL(clicked()), SLOT(conferenceMapClicked()));
44 connect(tabWidget, SIGNAL(infoIconClicked()), SLOT(aboutApp()));
46 selectConference->setDuplicatesEnabled(false);
47 int confCount = Conference::getAll().count();
51 fillAndShowConferenceHeader();
52 setWindowTitle(Conference::getById(confId).title());
54 if(confCount==1) // don't have to show 'selectConference' widget, if there is only one conference in the DB
55 selectConferenceWidget->hide();
58 // have to fill comboBox with available conferences
59 QList<Conference> confs = Conference::getAll();
60 QListIterator<Conference> i(confs);
63 Conference conf = i.next();
64 selectConference->addItem(conf.title(),conf.id());
66 int idx = selectConference->findText(Conference::getById(Conference::activeConference()).title());
67 selectConference->setCurrentIndex(idx);
69 connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
73 conferenceHeader->hide();
74 selectConferenceWidget->hide();
75 // go to the 'conferenceTab', so the user can import the schedule
76 tabWidget->setCurrentIndex(6); // 6 - conference tab
79 // open dialog for given Event ID
80 // this is used in case Alarm Dialog request application to start
85 EventDialog dialog(aEventId,this);
88 catch(OrmNoObjectException&) {} // just start application
89 catch(...) {} // just start application
93 void MainWindow::scheduleImported(int aConfId)
97 Conference conf = Conference::getById(aConfId);
98 if( selectConference->findText(conf.title()) < 0 ) // item doesn't exist
100 disconnect(selectConference, SIGNAL(currentIndexChanged(int)), this, SLOT(conferenceChanged(int)));
101 selectConference->addItem(conf.title(),conf.id());
102 connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
104 int confCount = Conference::getAll().count();
107 int idx = selectConference->findText(conf.title());
108 selectConference->setCurrentIndex(idx);
111 selectConferenceWidget->show();
113 conferenceChanged(idx);
117 void MainWindow::aboutApp()
119 QDialog dialog(this);
125 void MainWindow::conferenceMapClicked()
127 QString mapPath = QString(":/maps/campus.png");
128 if(!QFile::exists(mapPath))
129 mapPath = QString(":/maps/rooms/not-available.png");
133 QPixmap map(mapPath);
134 MapWindow window(map,roomName,this);
138 void MainWindow::eventHasChanged(int aEventId, bool aReloadModel)
140 dayTabContainer->updateTreeViewModel(aEventId);
141 favsTabContainer->updateTreeViewModel(aEventId,aReloadModel);
142 tracksTabContainer->updateTreeViewModel(aEventId);
143 nowTabContainer->updateTreeViewModel(aEventId);
144 roomsTabContainer->updateTreeViewModel(aEventId);
145 searchTabContainer->updateTreeViewModel(aEventId);
148 void MainWindow::fillAndShowConferenceHeader()
150 int confId = Conference::activeConference();
151 conferenceTitle->setText(Conference::getById(confId).title());
152 conferenceSubtitle->setText(Conference::getById(confId).subtitle());
153 conferenceWhere->setText(Conference::getById(confId).city() + ", " + Conference::getById(confId).venue());
154 conferenceWhen->setText(
155 Conference::getById(confId).start().toString("dd-MM-yyyy")
157 Conference::getById(confId).end().toString("dd-MM-yyyy"));
158 conferenceHeader->show();
161 void MainWindow::initTabs()
163 int confId = Conference::activeConference();
164 QDate startDate = Conference::getById(confId).start();
165 QDate endDate = Conference::getById(confId).end();
167 // 'dayNavigator' emits signal 'dateChanged' after setting valid START:END dates
168 dayTabContainer->setDates(startDate, endDate);
169 tracksTabContainer->setDates(startDate, endDate);
170 roomsTabContainer->setDates(startDate, endDate);
171 favsTabContainer->setDates(startDate, endDate);
172 searchTabContainer->setDates(startDate, endDate);
173 searchTabContainer->searchAgainClicked();
174 nowTabContainer->updateTreeView(QDate::currentDate());
177 void MainWindow::conferenceChanged(int aIndex)
179 Conference::getById(Conference::activeConference()).update("active",0);
180 Conference::getById(selectConference->itemData(aIndex).toInt()).update("active",1);
183 fillAndShowConferenceHeader();
184 setWindowTitle(Conference::getById(Conference::activeConference()).title());