X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fui%2Flocationsearchpanel.cpp;h=63449a0b2a50f8427ad28ddc71c4f41639fd9c3f;hb=41c63e3292ebb059a9dcff52aa8335cdee9f2e78;hp=c0d53a861f7f9058440f1e0e580c0cc748549ce4;hpb=d09b5a50cc41230dfdbe596315d5d911576659e6;p=situare diff --git a/src/ui/locationsearchpanel.cpp b/src/ui/locationsearchpanel.cpp index c0d53a8..63449a0 100644 --- a/src/ui/locationsearchpanel.cpp +++ b/src/ui/locationsearchpanel.cpp @@ -20,15 +20,24 @@ USA. */ +#include + +#include "avatarimage.h" +#include "../common.h" +#include "extendedlistitem.h" #include "extendedlistitemdelegate.h" #include "locationlistitem.h" #include "locationlistview.h" #include "imagebutton.h" #include "panelcommon.h" #include "routing/location.h" +#include "searchhistorylistitem.h" +#include "searchhistorylistview.h" #include "locationsearchpanel.h" +const QString SETTINGS_SEARCH_HISTORY = "SEARCH_HISTORY"; + LocationSearchPanel::LocationSearchPanel(QWidget *parent) : PanelBase(parent) { @@ -50,6 +59,13 @@ LocationSearchPanel::LocationSearchPanel(QWidget *parent) headerLayout->addWidget(m_resultsLabel, 0, Qt::AlignCenter); setHeaderText(0); + // --- SEARCH HISTORY LIST VIEW --- + 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)); @@ -65,6 +81,7 @@ LocationSearchPanel::LocationSearchPanel(QWidget *parent) QVBoxLayout *resultsListViewLayout = new QVBoxLayout; resultsListViewLayout->setContentsMargins(PANEL_MARGIN_LEFT, PANEL_MARGIN_TOP, PANEL_MARGIN_RIGHT, PANEL_MARGIN_BOTTOM); + resultsListViewLayout->addWidget(m_searchHistoryListView); resultsListViewLayout->addWidget(m_locationListView); // --- MAIN LAYOUT --- @@ -86,11 +103,61 @@ LocationSearchPanel::LocationSearchPanel(QWidget *parent) ImageButton *searchLocationButton = new ImageButton(":/res/images/search.png", ":/res/images/search_s.png", "", this); + connect(searchLocationButton, SIGNAL(clicked()), this, SIGNAL(requestSearchLocation())); + m_clearLocationListButton = new ImageButton(":/res/images/clear_btn.png", + ":/res/images/clear_btn_s.png", + ":/res/images/clear_btn_d.png", this); + m_clearLocationListButton->setDisabled(true); + + connect(m_clearLocationListButton, SIGNAL(clicked()), + this, SLOT(showSearchHistoryListView())); + m_itemButtonsLayout->addWidget(m_routeButton); m_genericButtonsLayout->addWidget(searchLocationButton); + m_genericButtonsLayout->addWidget(m_clearLocationListButton); + + readSettings(); + showSearchHistoryListView(); +} + +LocationSearchPanel::~LocationSearchPanel() +{ + qDebug() << __PRETTY_FUNCTION__; + + QSettings settings(DIRECTORY_NAME, FILE_NAME); + QList searchHistories; + + for (int i = 0; i < m_searchHistoryListView->count(); ++i) { + SearchHistoryListItem *item = dynamic_cast( + m_searchHistoryListView->listItemAt(i)); + + if (item) { + QList searchHistory; + searchHistory.append(item->title()); + searchHistory.append(item->dateTime().toString()); + searchHistories.append(QVariant(searchHistory)); + } + } + + settings.setValue(SETTINGS_SEARCH_HISTORY, searchHistories); +} + +void LocationSearchPanel::prependSearchHistory(QString searchString, QDateTime dateTime) +{ + qDebug() << __PRETTY_FUNCTION__; + + 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, dateTime); + m_searchHistoryListView->prependListItem(QString::number(counter++), item); } void LocationSearchPanel::clearListsSelections() @@ -98,6 +165,7 @@ void LocationSearchPanel::clearListsSelections() qDebug() << __PRETTY_FUNCTION__; m_locationListView->clearItemSelection(); + m_searchHistoryListView->clearItemSelection(); } void LocationSearchPanel::hideEvent(QHideEvent *event) @@ -113,9 +181,8 @@ void LocationSearchPanel::populateLocationListView(const QList &locati { qDebug() << __PRETTY_FUNCTION__; - setHeaderText(locations.count()); - m_locationListView->clearList(); + showLocationListView(locations.count()); for (int i = 0; i < locations.size(); ++i) { LocationListItem *item = new LocationListItem(); @@ -136,6 +203,25 @@ void LocationSearchPanel::populateLocationListView(const QList &locati m_locationListView->scrollToTop(); } +void LocationSearchPanel::readSettings() +{ + qDebug() << __PRETTY_FUNCTION__; + + const int SEARCH_HISTORY_LIST_ITEM_COUNT = 2; + + QSettings settings(DIRECTORY_NAME, FILE_NAME); + QList 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 searchHistory = searchHistories.at(i).toList(); + if (searchHistory.count() == SEARCH_HISTORY_LIST_ITEM_COUNT) { + prependSearchHistory(searchHistory.at(0).toString(), + QDateTime::fromString(searchHistory.at(1).toString())); + } + } +} + void LocationSearchPanel::routeToSelectedLocation() { qDebug() << __PRETTY_FUNCTION__; @@ -153,3 +239,25 @@ void LocationSearchPanel::setHeaderText(int count) m_resultsLabel->setText(tr("Search results: %1").arg(count)); } + +void LocationSearchPanel::showLocationListView(int locationItemsCount) +{ + qDebug() << __PRETTY_FUNCTION__; + + m_searchHistoryListView->clearItemSelection(); + m_searchHistoryListView->hide(); + setHeaderText(locationItemsCount); + m_clearLocationListButton->setEnabled(true); + m_locationListView->show(); +} + +void LocationSearchPanel::showSearchHistoryListView() +{ + qDebug() << __PRETTY_FUNCTION__; + + m_locationListView->clearList(); + m_locationListView->hide(); + m_resultsLabel->setText(tr("Search history:")); + m_clearLocationListButton->setDisabled(true); + m_searchHistoryListView->show(); +}