Merge branch 'development'
[quandoparte] / application / stationview.cpp
index 4a8e355..2e49496 100644 (file)
@@ -20,12 +20,17 @@ Boston, MA 02110-1301, USA.
 */
 
 #include "stationview.h"
+#include "settings.h"
 
 #include <QAction>
 #include <QActionGroup>
+#include <QDir>
+#include <QFileInfo>
 #include <QDebug>
 #include <QMenu>
 #include <QMenuBar>
+#include <QWebElement>
+#include <QWebFrame>
 #include <QWebView>
 
 StationView::StationView(QWidget *parent) :
@@ -44,6 +49,14 @@ StationView::StationView(QWidget *parent) :
     showArrivalsAction->setCheckable(true);
     showDeparturesAction->setCheckable(true);
     showDeparturesAction->setChecked(true);
+
+    Settings *settings = Settings::instance();
+    if (settings->showArrivalsPreferred()) {
+        showArrivalsAction->setChecked(true);
+    } else {
+        showDeparturesAction->setChecked(true);
+    }
+
     viewSelectionGroup->addAction(showArrivalsAction);
     viewSelectionGroup->addAction(showDeparturesAction);
     menu->addAction(showDeparturesAction);
@@ -54,12 +67,18 @@ StationView::StationView(QWidget *parent) :
     menuBar->addAction(menu->menuAction());
     setMenuBar(menuBar);
     view->setTextSizeMultiplier(2.0);
+    view->setBackgroundRole(QPalette::Window);
     connect(showAboutAction, SIGNAL(triggered()), this, SIGNAL(aboutTriggered()));
-    connect(showSettingsAction, SIGNAL(triggered()), this, SIGNAL(settingsTriggered()));
+    connect(showSettingsAction, SIGNAL(triggered()), this, SIGNAL(settingsChangeRequested()));
     connect(showStationListSelectAction, SIGNAL(triggered()), this, SIGNAL(stationListSelectTriggered()));
+    connect(viewSelectionGroup, SIGNAL(triggered(QAction *)), this, SLOT(viewSelectionGroupTriggered(QAction *)));
     setCentralWidget(view);
 #ifdef Q_WS_MAEMO_5
     setAttribute(Qt::WA_Maemo5StackedWindow);
+    setAttribute(Qt::WA_Maemo5AutoOrientation);
+#endif
+#if defined(Q_WS_S60)
+    setWindowState(Qt::WindowMaximized);
 #endif
 }
 
@@ -87,5 +106,62 @@ void StationView::setBaseUrl(const QUrl &baseUrl)
 void StationView::updateView(const QByteArray &page)
 {
     qDebug() << page;
+    updateCss();
     view->setContent(page, "text/html", theBaseUrl);
+    QWebElement doc = view->page()->mainFrame()->documentElement();
+
+    // Find the first div
+    QWebElement current = doc.findFirst("div");
+
+    qDebug() << "skipping to the departures";
+    // Skip to the first div of class corpocentrale, which contains the first
+    // departure-related contents
+    while (!current.classes().contains("corpocentrale")) {
+        current = current.nextSibling();
+        qDebug() << "skipping to the next element";
+        if (current.isNull())
+            break;
+    }
+    // Mark every div as a departure class element; the next corpocentrale
+    // marks the start of the arrivals section
+    qDebug() << "marking departures";
+    do {
+        current.addClass("departures");
+        current = current.nextSibling();
+        qDebug() << "marking as departures";
+        if (current.isNull())
+            break;
+    } while (!current.classes().contains("corpocentrale"));
+    // Mark everything as an arrival, until reaching the footer
+    while (!current.classes().contains("footer")) {
+        current.addClass("arrivals");
+        current = current.nextSibling();
+        qDebug() << "marking as arrival";
+        if (current.isNull())
+            break;
+    }
+}
+
+void StationView::viewSelectionGroupTriggered(QAction *action)
+{
+    Settings *settings = Settings::instance();
+    settings->setShowArrivalsPreferred(
+                action == showArrivalsAction ? true : false);
+    updateCss();
+}
+
+void StationView::updateCss(void)
+{
+    QUrl cssUrl;
+    Settings *settings = Settings::instance();
+    QStringList paths = QDir::searchPaths("css");
+    QFileInfo fileInfo;
+    if (settings->showArrivalsPreferred()) {
+        fileInfo = QFileInfo("css:arrivals.css");
+    } else {
+        fileInfo = QFileInfo("css:departures.css");
+    }
+    cssUrl = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+    qDebug() << "Css url:" << cssUrl;
+    QWebSettings::globalSettings()->setUserStyleSheetUrl(cssUrl);
 }