Merged work made during the Desktop Summit 2011
authorLuciano Montanaro <mikelima@cirulla.net>
Sun, 21 Aug 2011 12:36:20 +0000 (14:36 +0200)
committerLuciano Montanaro <mikelima@cirulla.net>
Sun, 21 Aug 2011 12:36:20 +0000 (14:36 +0200)
application/resources/harmattan/qml/StationPage.qml
application/stationlistproxymodel.cpp
application/stationlistproxymodel.h
application/stationlistview.cpp
application/stationlistview.h

index ce1b0f1..5870548 100644 (file)
@@ -5,6 +5,7 @@ import net.cirulla.quandoparte 1.0
 
 Page {
     property alias html: view.html
+    property alias url: view.url
     anchors.fill: parent
 
     tools: ToolBarLayout {
index 4adc370..746610f 100644 (file)
@@ -31,8 +31,9 @@ Q_DECLARE_METATYPE(QGeoCoordinate)
 
 StationListProxyModel::StationListProxyModel(QObject *parent) :
     QSortFilterProxyModel(parent),
+    positionInfoSource(QGeoPositionInfoSource::createDefaultSource(this)),
     m_here(44.5, 9.0),
-    m_sortingMode(NoSorting),
+    m_sortingMode(AlphaSorting),
     m_filterRecentOnly(false)
 {
     QHash<int, QByteArray> roles;
@@ -41,6 +42,13 @@ StationListProxyModel::StationListProxyModel(QObject *parent) :
 
     setFilterCaseSensitivity(Qt::CaseInsensitive);
     setSortCaseSensitivity(Qt::CaseInsensitive);
+    if (positionInfoSource) {
+        qDebug() << "position info source available";
+        connect(positionInfoSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
+                SLOT(updatePosition(QGeoPositionInfo)));
+    } else {
+        qDebug() << "No position info source available";
+    }
 }
 
 bool StationListProxyModel::lessThan(const QModelIndex &left,
@@ -122,12 +130,24 @@ void StationListProxyModel::setSortingMode(SortingMode mode)
         case StationListProxyModel::RecentUsageSorting:
             setRecentOnlyFilter(true);
             break;
-        case StationListProxyModel::NoSorting:
         default:
             break;
         }
+        if (mode == StationListProxyModel::DistanceSorting) {
+            positionInfoSource->startUpdates();
+        } else {
+            positionInfoSource->stopUpdates();
+        }
         invalidate();
         sort(0);
         emit sortingModeChanged(mode);
     }
 }
+
+void StationListProxyModel::updatePosition(const QtMobility::QGeoPositionInfo &update)
+{
+    qDebug() << "Position update received" << update;
+    setUserPosition(update.coordinate());
+    invalidate();
+    sort(0);
+}
index 5eca28c..9029ac7 100644 (file)
@@ -24,6 +24,7 @@ Boston, MA 02110-1301, USA.
 
 #include <QSortFilterProxyModel>
 #include <QGeoCoordinate>
+#include <QGeoPositionInfoSource>
 #include <QStringList>
 
 QTM_USE_NAMESPACE
@@ -37,7 +38,6 @@ class StationListProxyModel : public QSortFilterProxyModel
 public:
 
     enum SortingMode {
-        NoSorting,
         AlphaSorting,
         DistanceSorting,
         RecentUsageSorting
@@ -63,8 +63,12 @@ protected:
     virtual bool filterAcceptsRow(int sourceRow,
             const QModelIndex &sourceParent) const;
 
+private slots:
+    void updatePosition(const QGeoPositionInfo &update);
+
 private:
     QString m_searchPattern;
+    QGeoPositionInfoSource *positionInfoSource;
     QGeoCoordinate m_here;
     QStringList m_stations;
     SortingMode m_sortingMode;
index 42f9e47..67c34bd 100644 (file)
@@ -40,7 +40,6 @@ StationListView::StationListView(StationListModel *model, QWidget *parent) :
     stationListModel(model),
     filterModel(new StationListProxyModel(this)),
     keyPressForwarder(new KeyPressForwarder(this)),
-    positionInfoSource(QGeoPositionInfoSource::createDefaultSource(this)),
     m_sortingMode(StationListProxyModel::NoSorting)
 
 {
@@ -77,11 +76,6 @@ StationListView::StationListView(StationListModel *model, QWidget *parent) :
     connect(viewSelectionGroup, SIGNAL(triggered(QAction*)),
             SLOT(handleSortingChange(QAction*)));
 
-    if (positionInfoSource) {
-        connect(positionInfoSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
-                SLOT(updatePosition(QGeoPositionInfo)));
-    }
-
     QSettings settings;
     StationListProxyModel::SortingMode mode =
             static_cast<StationListProxyModel::SortingMode>(
@@ -115,14 +109,6 @@ void StationListView::handleFilterChanges(const QString &filter)
     qDebug() << "Filtering for" << filter;
 }
 
-void StationListView::updatePosition(const QtMobility::QGeoPositionInfo &update)
-{
-    qDebug() << "Position update received" << update;
-    filterModel->setUserPosition(update.coordinate());
-    filterModel->invalidate();
-    filterModel->sort(0);
-}
-
 void StationListView::handleSortingChange(QAction *action)
 {
     StationListProxyModel::SortingMode mode = StationListProxyModel::NoSorting;
@@ -161,11 +147,6 @@ void StationListView::setSortingMode(StationListProxyModel::SortingMode mode)
         default:
             break;
         }
-        if (mode == StationListProxyModel::DistanceSorting) {
-            positionInfoSource->startUpdates();
-        } else {
-            positionInfoSource->stopUpdates();
-        }
         m_sortingMode = mode;
         filterModel->setSortingMode(mode);
 
index a4f739a..a595447 100644 (file)
@@ -26,7 +26,6 @@ Boston, MA 02110-1301, USA.
 
 #include <QMainWindow>
 #include <QModelIndex>
-#include <QGeoPositionInfoSource>
 
 namespace Ui {
     class StationListView;
@@ -59,9 +58,6 @@ signals:
     void settingsChangeRequested(void);
     void sortingModeChanged(StationListProxyModel::SortingMode mode);
 
-public slots:
-    void updatePosition(const QGeoPositionInfo &update);
-
 private slots:
     void showStation(const QModelIndex &index);
     void handleFilterChanges(const QString &filter);
@@ -75,7 +71,6 @@ private slots:
     StationListModel *stationListModel;
     StationListProxyModel *filterModel;
     KeyPressForwarder *keyPressForwarder;
-    QGeoPositionInfoSource *positionInfoSource;
     StationListProxyModel::SortingMode m_sortingMode;
 };