/*
* Copyright (C) 2010 Ixonos Plc.
- * Copyright (C) 2011 Philipp Spitzer, gregor herrmann
+ * Copyright (C) 2011-2012 Philipp Spitzer, gregor herrmann, Stefan Stahl
*
* This file is part of ConfClerk.
*
QNetworkProxy::setApplicationProxy(proxy);
// 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)));
+ connect(dayTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool)));
+ connect(favsTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool)));
+ connect(tracksTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool)));
+ connect(roomsTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool)));
+ connect(searchTabContainer, SIGNAL(eventChanged(int,bool)), SLOT(onEventChanged(int,bool)));
+
+ // date has changed
+ connect(dayNavigator, SIGNAL(dateChanged(QDate)), dayTabContainer, SLOT(redisplayDate(QDate)));
+ connect(dayNavigator, SIGNAL(dateChanged(QDate)), favsTabContainer, SLOT(redisplayDate(QDate)));
+ connect(dayNavigator, SIGNAL(dateChanged(QDate)), tracksTabContainer, SLOT(redisplayDate(QDate)));
+ connect(dayNavigator, SIGNAL(dateChanged(QDate)), roomsTabContainer, SLOT(redisplayDate(QDate)));
+ connect(dayNavigator, SIGNAL(dateChanged(QDate)), searchTabContainer, SLOT(redisplayDate(QDate)));
+
+ // search result has changed
+ connect(searchTabContainer, SIGNAL(searchResultChanged()), SLOT(onSearchResultChanged()));
- connect(aboutAction, SIGNAL(triggered()), SLOT(aboutApp()));
- connect(settingsAction, SIGNAL(triggered()), SLOT(setup()));
- connect(conferencesAction, SIGNAL(triggered()), SLOT(showConferences()));
useConference(Conference::activeConference());
// optimization, see useConference() code
clearTabs();
}
- // TODO: open conferences at startup?
- #if 0
- if(!confCount)
- tabWidget->setCurrentIndex(6); // 6 - conference tab
- }
- #endif
-
// open dialog for given Event ID
// this is used in case Alarm Dialog request application to start
if(aEventId)
connect(mXmlParser, SIGNAL(parsingScheduleEnd(const QString&)), conferenceModel, SLOT(newConferenceEnd(const QString&)));
}
-void MainWindow::aboutApp()
+void MainWindow::on_aboutAction_triggered()
{
QDialog dialog(this);
Ui::AboutDialog ui;
dialog.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::on_reloadAction_triggered() {
+ int confId = Conference::activeConference();
+ if (confId== -1) return;
+ Conference active = Conference::getById(confId);
+ if (active.url().isEmpty()) return;
+ importFromNetwork(active.url());
+ setEnabled(false);
}
+
+void MainWindow::on_nowAction_triggered() {
+ int confId = Conference::activeConference();
+ if (confId== -1) return;
+ dayNavigator->setCurDate(QDate::currentDate());
+ dayTabContainer->expandTimeGroup(QTime::currentTime(), confId);
+}
+
+
+void MainWindow::on_searchAction_triggered() {
+ if (tabWidget->currentWidget() == searchTab)
+ searchTabContainer->showSearchDialog(!searchTabContainer->searchDialogIsVisible());
+ else {
+ tabWidget->setCurrentWidget(searchTab);
+ searchTabContainer->showSearchDialog();
+ }
+}
+
+
+void MainWindow::on_expandAllAction_triggered() {
+ if (tabWidget->currentWidget() == favouritesTab) favsTabContainer->treeView->expandAll();
+ if (tabWidget->currentWidget() == dayViewTab) dayTabContainer->treeView->expandAll();
+ if (tabWidget->currentWidget() == tracksTab) tracksTabContainer->treeView->expandAll();
+ if (tabWidget->currentWidget() == roomsTab) roomsTabContainer->treeView->expandAll();
+ if (tabWidget->currentWidget() == searchTab) searchTabContainer->treeView->expandAll();
+}
+
+
+void MainWindow::on_collapseAllAction_triggered() {
+ if (tabWidget->currentWidget() == favouritesTab) favsTabContainer->treeView->collapseAll();
+ if (tabWidget->currentWidget() == dayViewTab) dayTabContainer->treeView->collapseAll();
+ if (tabWidget->currentWidget() == tracksTab) tracksTabContainer->treeView->collapseAll();
+ if (tabWidget->currentWidget() == roomsTab) roomsTabContainer->treeView->collapseAll();
+ if (tabWidget->currentWidget() == searchTab) searchTabContainer->treeView->collapseAll();
+}
+
+
+void MainWindow::onEventChanged(int aEventId, bool favouriteChanged) {
+ dayTabContainer->redisplayEvent(aEventId);
+ if (favouriteChanged) favsTabContainer->redisplayDate(dayNavigator->curDate());
+ else favsTabContainer->redisplayEvent(aEventId);
+ tracksTabContainer->redisplayEvent(aEventId);
+ roomsTabContainer->redisplayEvent(aEventId);
+ searchTabContainer->redisplayEvent(aEventId);
+}
+
+
+void MainWindow::onSearchResultChanged() {
+ // Are results found on the current date?
+ QDate date = dayNavigator->curDate();
+ int count = searchTabContainer->searchResultCount(date);
+ if (count > 0) {searchTabContainer->redisplayDate(date); return;}
+
+ // Are results found in the future?
+ for (date = date.addDays(1); date <= dayNavigator->endDate(); date = date.addDays(1)) {
+ int count = searchTabContainer->searchResultCount(date);
+ if (count > 0) {dayNavigator->setCurDate(date); return;}
+ }
+
+ // Are results found in the past?
+ for (date = dayNavigator->startDate(); date < dayNavigator->curDate(); date = date.addDays(1)) {
+ int count = searchTabContainer->searchResultCount(date);
+ if (count > 0) {dayNavigator->setCurDate(date); return;}
+ }
+ // No results were found
+ searchTabContainer->redisplayDate(dayNavigator->curDate());
+}
+
+
void MainWindow::useConference(int id)
{
if (id == -1) // in case no conference is active
Conference new_active = Conference::getById(id);
new_active.update("active",1);
- // looks like it does not work at n900
+ // looks like it does not work at n900
setWindowTitle(new_active.title());
// optimization.
- // dont run initTabs() here
+ // dont run initTabs() here
// it takes much CPU, making travelling between conferences in ConferenceEditor longer
// and is not seen in maemo WM anyway
- // instead run it explicitly
+ // instead run it explicitly
// 1. at startup
// 2. when ConferenceEditor finished
// dont forget to protect the calls by try-catch!
QDate endDate = active.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());
+ dayNavigator->setDates(startDate, endDate);
}
}
roomsTabContainer->clearModel();
favsTabContainer->clearModel();
searchTabContainer->clearModel();
- searchTabContainer->searchAgainClicked();
- nowTabContainer->clearModel();
}
void MainWindow::unsetConference()
{
clearTabs();
+ dayNavigator->unsetDates();
setWindowTitle(saved_title);
}
-void MainWindow::setup()
+void MainWindow::on_settingsAction_triggered()
{
SettingsDialog dialog;
dialog.loadDialogData();
this, mXmlParser and mNetworkAccessManager:
addition and refresh.
*/
-void MainWindow::showConferences()
+void MainWindow::on_conferencesAction_triggered()
{
ConferenceEditor dialog(conferenceModel, this);
}
}
-void MainWindow::networkQueryFinished(QNetworkReply *aReply)
-{
- if ( aReply->error() != QNetworkReply::NoError )
- {
+void MainWindow::networkQueryFinished(QNetworkReply *aReply) {
+ if (aReply->error() != QNetworkReply::NoError) {
error_message(QString("Error occured during download: ") + aReply->errorString());
+ } else {
+ QUrl redirectUrl = aReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
+ if (!redirectUrl.isEmpty()) {
+ if (redirectUrl != aReply->request().url()) {
+ importFromNetwork(redirectUrl.toString());
+ return; // don't enable controls
+ } else {
+ error_message(QString("Error: Cyclic redirection from %1 to itself.").arg(redirectUrl.toString()));
+ }
+ } else {
+ importData(aReply->readAll(), aReply->url().toEncoded());
+ }
}
- else
- {
- importData(aReply->readAll(), aReply->url().toEncoded());
- }
+ setEnabled(true);
}
void MainWindow::importData(const QByteArray &aData, const QString& url)