/* * Copyright (C) 2010 Ixonos Plc. * * This file is part of fosdem-schedule. * * fosdem-schedule is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * * fosdem-schedule is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * fosdem-schedule. If not, see . */ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include "ui_about.h" #include #include "daynavigatorwidget.h" #include "importschedulewidget.h" #include "mapwindow.h" #include "settingsdialog.h" #include #include const QString PROXY_USERNAME; const QString PROXY_PASSWD; MainWindow::MainWindow(int aEventId, QWidget *aParent) : QMainWindow(aParent) { setupUi(this); #ifdef N810 tabWidget->setTabText(1,"Favs"); //tabWidget->setTabText(2,"Day"); #endif // first time run aplication: -> let's have it direct connection in this case if(!AppSettings::contains("proxyIsDirectConnection")) AppSettings::setDirectConnection(true); if(AppSettings::isDirectConnection()) { 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); int confId = Conference::activeConference(); connect(importScheduleWidget, SIGNAL(scheduleImported(int)), SLOT(scheduleImported(int))); connect(importScheduleWidget, SIGNAL(scheduleDeleted(const QString&)), SLOT(scheduleDeleted(const QString&))); // event details have changed 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(aboutAction, SIGNAL(triggered()), SLOT(aboutApp())); connect(settingsAction, SIGNAL(triggered()), SLOT(setup())); 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 confs = Conference::getAll(); QListIterator 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 { 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 // 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); Conference conf = Conference::getById(aConfId); if( selectConference->findText(conf.title()) < 0 ) // item doesn't exist { disconnect(selectConference, SIGNAL(currentIndexChanged(int)), this, SLOT(conferenceChanged(int))); selectConference->addItem(conf.title(),conf.id()); connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int))); } int confCount = Conference::getAll().count(); if(confCount) { int idx = selectConference->findText(conf.title()); selectConference->setCurrentIndex(idx); if(confCount>1) selectConferenceWidget->show(); conferenceChanged(idx); } } void MainWindow::scheduleDeleted(const QString& title) { int idx = selectConference->findText(title); if (idx == -1) { // should not happen qWarning() << __PRETTY_FUNCTION__ << "removed non-existent item:" << title; } else { // will it signal "changed"? selectConference->removeItem(idx); } } void MainWindow::aboutApp() { QDialog dialog(this); Ui::AboutDialog ui; ui.setupUi(&dialog); #ifdef N810 dialog.setFixedWidth(width()); #endif 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, bool aReloadModel) { dayTabContainer->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()); } void MainWindow::setup() { SettingsDialog dialog; dialog.exec(); 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); }