]> ToastFreeware Gitweb - toast/confclerk.git/blobdiff - src/gui/mainwindow.cpp
conference tab header is hidden if there isn't active conference
[toast/confclerk.git] / src / gui / mainwindow.cpp
index b2f091c277b5ad7cf03cc9b2b870568a03002c8a..b5882d64abe389d468d998a6be4227f5034c8a24 100644 (file)
 #include "mainwindow.h"
 
 #include <QTreeView>
-#include <QDirModel>
+#include <QFile>
 
+#include <sqlengine.h>
+
+#include <track.h>
 #include <eventmodel.h>
 #include <delegate.h>
 
-MainWindow::MainWindow(QWidget *parent)
-    : QMainWindow(parent)
-{
-    // open database connection
-    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
-    db.setDatabaseName("fosdem-test.sqlite");
-    db.open();
+#include <conference.h>
+
+#include <QDialog>
+#include <QMessageBox>
+#include "ui_about.h"
+#include <eventdialog.h>
+#include "daynavigatorwidget.h"
+#include "importschedulewidget.h"
+#include "mapwindow.h"
 
+#include <tabcontainer.h>
+
+MainWindow::MainWindow(int aEventId, QWidget *aParent)
+    : QMainWindow(aParent)
+{
     setupUi(this);
-    //TODO Palo: continue
-    treeView->setHeaderHidden(true);
-    treeView->setRootIsDecorated(false);
-    treeView->setIndentation(0);
-    treeView->setAnimated(true);
-    treeView->setModel(new EventModel());
-    treeView->setItemDelegate(new Delegate(treeView));
+
+    int confId = Conference::activeConference();
+
+    connect(importScheduleWidget, SIGNAL(scheduleImported(int)), SLOT(scheduleImported(int)));
+
+    // event details have changed
+    connect(dayTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+    connect(favsTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+    connect(tracksTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+    connect(roomsTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+    connect(nowTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+    connect(searchTabContainer, SIGNAL(eventHasChanged(int)), SLOT(eventHasChanged(int)));
+
+    // event conference map button clicked
+    connect(showMapButton, SIGNAL(clicked()), SLOT(conferenceMapClicked()));
+
+    connect(tabWidget, SIGNAL(infoIconClicked()), SLOT(aboutApp()));
+
+    if(Conference::getAll().count())
+    {
+        initTabs();
+        fillAndShowConferenceHeader();
+        setWindowTitle(Conference::getById(confId).title());
+    }
+    else
+    {
+        conferenceHeader->hide();
+    }
+
+    // open dialog for given Event ID
+    // this is used in case Alarm Dialog request application to start
+    if(aEventId)
+    {
+        try
+        {
+            EventDialog dialog(aEventId,this);
+            dialog.exec();
+        }
+        catch(OrmNoObjectException&) {} // just start application
+        catch(...) {} // just start application
+    }
+}
+
+void MainWindow::scheduleImported(int aConfId)
+{
+    Q_UNUSED(aConfId);
+
+    QList<Conference> confs = Conference::getAll();
+    if(confs.count())
+    {
+        initTabs();
+        fillAndShowConferenceHeader();
+        setWindowTitle(Conference::getById(Conference::activeConference()).title());
+    }
+}
+
+void MainWindow::aboutApp()
+{
+    QDialog dialog(this);
+    Ui::AboutDialog ui;
+    ui.setupUi(&dialog);
+    dialog.exec();
+}
+
+void MainWindow::conferenceMapClicked()
+{
+    QString mapPath = QString(":/maps/campus.png");
+    if(!QFile::exists(mapPath))
+        mapPath = QString(":/maps/rooms/not-available.png");
+
+    QString roomName;
+
+    QPixmap map(mapPath);
+    MapWindow window(map,roomName,this);
+    window.exec();
+}
+
+void MainWindow::eventHasChanged(int aEventId)
+{
+    dayTabContainer->updateTreeViewModel(aEventId);
+    favsTabContainer->updateTreeViewModel(aEventId);
+    tracksTabContainer->updateTreeViewModel(aEventId);
+    nowTabContainer->updateTreeViewModel(aEventId);
+    roomsTabContainer->updateTreeViewModel(aEventId);
+    searchTabContainer->updateTreeViewModel(aEventId);
+}
+
+void MainWindow::fillAndShowConferenceHeader()
+{
+    int confId = Conference::activeConference();
+    conferenceTitle->setText(Conference::getById(confId).title());
+    conferenceSubtitle->setText(Conference::getById(confId).subtitle());
+    conferenceWhere->setText(Conference::getById(confId).city() + ", " + Conference::getById(confId).venue());
+    conferenceWhen->setText(
+            Conference::getById(confId).start().toString("dd-MM-yyyy")
+            + ", " +
+            Conference::getById(confId).end().toString("dd-MM-yyyy"));
+    conferenceHeader->show();
+}
+
+void MainWindow::initTabs()
+{
+    int confId = Conference::activeConference();
+    QDate startDate = Conference::getById(confId).start();
+    QDate endDate = Conference::getById(confId).end();
+
+    // 'dayNavigator' emits signal 'dateChanged' after setting valid START:END dates
+    dayTabContainer->setDates(startDate, endDate);
+    tracksTabContainer->setDates(startDate, endDate);
+    roomsTabContainer->setDates(startDate, endDate);
+    favsTabContainer->setDates(startDate, endDate);
+    searchTabContainer->setDates(startDate, endDate);
+    nowTabContainer->updateTreeView(QDate::currentDate());
 }