Fixed search history settings read and write and added search history
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Fri, 3 Sep 2010 06:09:20 +0000 (09:09 +0300)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Fri, 3 Sep 2010 06:09:20 +0000 (09:09 +0300)
item clicked signal.

src/engine/engine.cpp
src/ui/listview.cpp
src/ui/locationsearchpanel.cpp
src/ui/locationsearchpanel.h
src/ui/mainwindow.cpp
src/ui/mainwindow.h
src/ui/searchhistorylistitem.h

index 2883a50..2ea01e3 100644 (file)
@@ -685,6 +685,9 @@ void SituareEngine::signalsFromMainWindow()
             m_mapEngine,
             SLOT(showMapArea(const GeoCoordinate&, const GeoCoordinate&)));
 
+    connect(m_ui, SIGNAL(searchHistoryItemClicked(QString)),
+            this, SLOT(locationSearch(QString)));
+
     // signals from routing tab
     connect(m_ui, SIGNAL(clearRoute()),
             m_mapEngine, SLOT(clearRoute()));
index 41fe9b2..40ec9c2 100644 (file)
@@ -58,6 +58,8 @@ void ListView::addListItemToView(ListItem *item)
 
 void ListView::clearItemSelection()
 {
+    qDebug() << __PRETTY_FUNCTION__;
+
     clearSelection();
 
     if (m_currentItem)
@@ -77,7 +79,7 @@ void ListView::clearList()
 
 void ListView::clearUnused(const QStringList &itemIDs)
 {
-    qWarning() << __PRETTY_FUNCTION__ << itemIDs.count();
+    qDebug() << __PRETTY_FUNCTION__;
 
     foreach (QString key, m_listItems.keys()) {
         if (!itemIDs.contains(key)) {
index 41aaf87..5bfd2e6 100644 (file)
@@ -64,6 +64,9 @@ LocationSearchPanel::LocationSearchPanel(QWidget *parent)
     m_searchHistoryListView = new SearchHistoryListView(this);
     m_searchHistoryListView->setItemDelegate(new ExtendedListItemDelegate(this));
 
+    connect(m_searchHistoryListView, SIGNAL(searchHistoryItemClicked(QString)),
+            this, SIGNAL(searchHistoryItemClicked(QString)));
+
     // --- SEARCH RESULTS LIST VIEW ---
     m_locationListView = new LocationListView(this);
     m_locationListView->setItemDelegate(new ExtendedListItemDelegate(this));
@@ -134,26 +137,29 @@ LocationSearchPanel::~LocationSearchPanel()
                 m_searchHistoryListView->listItemAt(i));
 
         if (item) {
-            QList<QVariant> searchHistory;
+            QList<QString> searchHistory;
             searchHistory.append(item->title());
             searchHistory.append(item->dateTime().toString());
-            searchHistories.append(searchHistory);
+            searchHistories.append(QVariant(searchHistory));
         }
     }
 
     settings.setValue(SETTINGS_SEARCH_HISTORY, searchHistories);
 }
 
-void LocationSearchPanel::appendSearchHistory(QString searchString, QDateTime currentDateTime)
+void LocationSearchPanel::prependSearchHistory(QString searchString, QDateTime dateTime)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_searchHistoryListView->count() >= 10)
+    const int SEARCH_HISTORY_LIMIT = 10;
+    static int counter = 0;
+
+    if (m_searchHistoryListView->count() >= SEARCH_HISTORY_LIMIT)
         m_searchHistoryListView->removeLastItem();
 
     SearchHistoryListItem *item = new SearchHistoryListItem();
-    item->setSearchHistoryData(searchString, currentDateTime);
-    m_searchHistoryListView->prependListItem(searchString, item);
+    item->setSearchHistoryData(searchString, dateTime);
+    m_searchHistoryListView->prependListItem(QString::number(counter++), item);
 }
 
 void LocationSearchPanel::clearListsSelections()
@@ -161,6 +167,7 @@ void LocationSearchPanel::clearListsSelections()
     qDebug() << __PRETTY_FUNCTION__;
 
     m_locationListView->clearItemSelection();
+    m_searchHistoryListView->clearItemSelection();
 
     setRouteButtonDisabled();
 }
@@ -178,9 +185,12 @@ void LocationSearchPanel::populateLocationListView(const QList<Location> &locati
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    m_searchHistoryListView->clearItemSelection();
     m_searchHistoryListView->hide();
     setHeaderText(locations.count());
     m_locationListView->clearList();
+    m_clearLocationListButton->setEnabled(true);
+    m_locationListView->show();
 
     for (int i = 0; i < locations.size(); ++i) {
         LocationListItem *item = new LocationListItem();
@@ -199,21 +209,24 @@ void LocationSearchPanel::populateLocationListView(const QList<Location> &locati
     }
 
     m_locationListView->scrollToTop();
-    m_clearLocationListButton->setEnabled(true);
-    m_locationListView->show();
 }
 
 void LocationSearchPanel::readSettings()
 {
-    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+    qDebug() << __PRETTY_FUNCTION__;
 
-    QList<QVariant> searchHistories = settings.value(
-            SETTINGS_SEARCH_HISTORY).toList();
+    const int SEARCH_HISTORY_LIST_ITEM_COUNT = 2;
 
-    for (int i = 0; i < searchHistories.count(); ++i) {
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+    QList<QVariant> searchHistories = settings.value(SETTINGS_SEARCH_HISTORY).toList();
+
+    //Read from end to begin so items are prepended in correct order
+    for (int i = searchHistories.count() - 1; i >= 0; --i) {
         QList<QVariant> searchHistory = searchHistories.at(i).toList();
-        appendSearchHistory(searchHistory.at(0).toString(),
-                            QDateTime::fromString(searchHistory.at(1).toString()));
+        if (searchHistory.count() == SEARCH_HISTORY_LIST_ITEM_COUNT) {
+            prependSearchHistory(searchHistory.at(0).toString(),
+                                 QDateTime::fromString(searchHistory.at(1).toString()));
+        }
     }
 }
 
index 101f55b..d86190a 100644 (file)
@@ -76,6 +76,9 @@ protected:
  * MEMBER FUNCTIONS AND SLOTS
  ******************************************************************************/
 private:
+    /**
+    * @brief Reads search history from settings.
+    */
     void readSettings();
 
     /**
@@ -86,8 +89,15 @@ private:
     void setHeaderText(int count);
 
 private slots:
-
-    void appendSearchHistory(QString searchString, QDateTime currentTime = QDateTime());
+    /**
+    * @brief Prepends search history list view with search.
+    *
+    * If search history limit is reached, oldest search is removed from list view.
+    *
+    * @param searchString search string to add
+    * @param dateTime date and time of search (if empty, current date and time is added)
+    */
+    void prependSearchHistory(QString searchString, QDateTime dateTime = QDateTime());
 
     /**
     * @brief Clears lists' selections.
@@ -153,6 +163,13 @@ signals:
     */
     void routeWaypointItemClicked(const GeoCoordinate &coordinate);
 
+    /**
+    * @brief Signal is emitted when search history item is clicked.
+    *
+    * @param searchString search string used
+    */
+    void searchHistoryItemClicked(const QString &searchString);
+
 /*******************************************************************************
  * DATA MEMBERS
  ******************************************************************************/
index 4ba4c65..23f452b 100644 (file)
@@ -271,7 +271,10 @@ void MainWindow::buildLocationSearchPanel()
             this, SLOT(startLocationSearch()));
 
     connect(this, SIGNAL(searchForLocation(QString)),
-            m_locationSearchPanel, SLOT(appendSearchHistory(QString)));
+            m_locationSearchPanel, SLOT(prependSearchHistory(QString)));
+
+    connect(m_locationSearchPanel, SIGNAL(searchHistoryItemClicked(QString)),
+            this, SIGNAL(searchHistoryItemClicked(QString)));
 }
 
 void MainWindow::buildMap()
index 06acfae..5038dc8 100644 (file)
@@ -610,6 +610,13 @@ signals:
     void searchForLocation(QString location);
 
     /**
+    * @brief Signal is emitted when search history item is clicked.
+    *
+    * @param searchString search string used
+    */
+    void searchHistoryItemClicked(const QString &searchString);
+
+    /**
      * @brief Signal for requestLocationUpdate from SituareEngine
      *
      * @param status Status message
index faa14a1..b6b877a 100644 (file)
@@ -58,9 +58,10 @@ public:
     QDateTime dateTime() const;
 
     /**
-    * @brief Set location data for this item.
+    * @brief Sets search history data for this item.
     *
-    * @param location Location data
+    * @param searchString search string
+    * @param dateTime date and time for search
     */
     void setSearchHistoryData(const QString &searchString, const QDateTime &dateTime);