Fixed search history settings read and write and added search history
[situare] / src / ui / locationsearchpanel.cpp
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()));
+        }
     }
 }