#include "mainwindow.h"
-#include <appsettings.h>
#include <QTreeView>
#include <QFile>
+#include <QNetworkProxy>
#include <sqlengine.h>
#include "mapwindow.h"
#include <tabcontainer.h>
+#include <appsettings.h>
+
+const QString PROXY_USERNAME;
+const QString PROXY_PASSWD;
MainWindow::MainWindow(int aEventId, QWidget *aParent)
: QMainWindow(aParent)
{
setupUi(this);
- // Sanity check for existence of any Conference in the DB
- // it AppSettings::confId() is 0, but there are any Conference(s) in the DB
- // set the confId in the AppSettings for the ID of the first conference in the DB
- QList<Conference> confs = Conference::getAll();
- if(!confs.count()) // no conference(s) in the DB
- {
- AppSettings::setConfId(0); // no conference in the DB
- }
- else
- {
- if(AppSettings::confId() == 0)
- AppSettings::setConfId(confs[0].id());
+ qDebug() << "Setting-up proxy: " << AppSettings::proxyAddress() << ":" << AppSettings::proxyPort();
+ QNetworkProxy proxy(
+ AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy,
+ AppSettings::proxyAddress(),
+ AppSettings::proxyPort(),
+ PROXY_USERNAME,
+ PROXY_PASSWD);
+ QNetworkProxy::setApplicationProxy(proxy);
- setWindowTitle(confs[0].title());
- }
+ 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(favsTabContainer, 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)));
-
+ connect(dayTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
+ connect(favsTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
+ connect(tracksTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
+ connect(roomsTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
+ connect(nowTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
+ connect(searchTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
// event conference map button clicked
connect(showMapButton, SIGNAL(clicked()), SLOT(conferenceMapClicked()));
connect(tabWidget, SIGNAL(infoIconClicked()), SLOT(aboutApp()));
- if(Conference::getAll().count()) // no conference(s) in the DB
+ selectConference->setDuplicatesEnabled(false);
+ int confCount = Conference::getAll().count();
+ if(confCount)
+ {
+ initTabs();
+ fillAndShowConferenceHeader();
+ setWindowTitle(Conference::getById(confId).title());
+
+ if(confCount==1) // don't have to show 'selectConference' widget, if there is only one conference in the DB
+ selectConferenceWidget->hide();
+ else
+ {
+ // have to fill comboBox with available conferences
+ QList<Conference> confs = Conference::getAll();
+ QListIterator<Conference> i(confs);
+ while(i.hasNext())
+ {
+ Conference conf = i.next();
+ selectConference->addItem(conf.title(),conf.id());
+ }
+ int idx = selectConference->findText(Conference::getById(Conference::activeConference()).title());
+ selectConference->setCurrentIndex(idx);
+ }
+ connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
+ }
+ else
{
- QDate startDate = Conference::getById(AppSettings::confId()).start();
- QDate endDate = Conference::getById(AppSettings::confId()).end();
- //
- dayTabContainer->setDates(startDate, endDate);
- tracksTabContainer->setDates(startDate, endDate);
- roomsTabContainer->setDates(startDate, endDate);
- favsTabContainer->setDates(startDate, endDate);
- searchTabContainer->setDates(startDate, endDate);
- //
- conferenceTitle->setText(Conference::getById(AppSettings::confId()).title());
- conferenceSubtitle->setText(Conference::getById(AppSettings::confId()).subtitle());
- conferenceWhere->setText(Conference::getById(AppSettings::confId()).city() + ", " + Conference::getById(AppSettings::confId()).venue());
- conferenceWhen->setText(
- Conference::getById(AppSettings::confId()).start().toString("dd-MM-yyyy")
- + ", " +
- Conference::getById(AppSettings::confId()).end().toString("dd-MM-yyyy"));
+ conferenceHeader->hide();
+ selectConferenceWidget->hide();
+ // go to the 'conferenceTab', so the user can import the schedule
+ tabWidget->setCurrentIndex(6); // 6 - conference tab
}
// open dialog for given Event ID
{
Q_UNUSED(aConfId);
- QList<Conference> confs = Conference::getAll();
- if(!confs.count()) // no conference(s) in the DB
+ Conference conf = Conference::getById(aConfId);
+ if( selectConference->findText(conf.title()) < 0 ) // item doesn't exist
{
- AppSettings::setConfId(0); // no conference in the DB
+ disconnect(selectConference, SIGNAL(currentIndexChanged(int)), this, SLOT(conferenceChanged(int)));
+ selectConference->addItem(conf.title(),conf.id());
+ connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
}
- else
+ int confCount = Conference::getAll().count();
+ if(confCount)
{
- if(AppSettings::confId() == 0)
- AppSettings::setConfId(confs[0].id());
-
- // 'dayNavigator' emits signal 'dateChanged' after setting valid START:END dates
- QDate startDate = Conference::getById(AppSettings::confId()).start();
- QDate endDate = Conference::getById(AppSettings::confId()).end();
- dayTabContainer->setDates(startDate, endDate);
- tracksTabContainer->setDates(startDate, endDate);
- roomsTabContainer->setDates(startDate, endDate);
- favsTabContainer->setDates(startDate, endDate);
+ int idx = selectConference->findText(conf.title());
+ selectConference->setCurrentIndex(idx);
+
+ if(confCount>1)
+ selectConferenceWidget->show();
+
+ conferenceChanged(idx);
}
}
window.exec();
}
-void MainWindow::eventHasChanged(int aEventId)
+void MainWindow::eventHasChanged(int aEventId, bool aReloadModel)
{
dayTabContainer->updateTreeViewModel(aEventId);
- favsTabContainer->updateTreeViewModel(aEventId);
+ favsTabContainer->updateTreeViewModel(aEventId,aReloadModel);
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);
+ searchTabContainer->searchAgainClicked();
+ nowTabContainer->updateTreeView(QDate::currentDate());
+}
+
+void MainWindow::conferenceChanged(int aIndex)
+{
+ Conference::getById(Conference::activeConference()).update("active",0);
+ Conference::getById(selectConference->itemData(aIndex).toInt()).update("active",1);
+
+ initTabs();
+ fillAndShowConferenceHeader();
+ setWindowTitle(Conference::getById(Conference::activeConference()).title());
+}
+