From a158169f9143904d8d1dd18609563505f1c49c75 Mon Sep 17 00:00:00 2001 From: Catalin Badea Date: Sun, 22 Jul 2012 13:33:04 +0300 Subject: jump to the next matching day using the next/previous buttons diff --git a/Swift/Controllers/HistoryViewController.cpp b/Swift/Controllers/HistoryViewController.cpp index 5f200f7..0c8cfcd 100644 --- a/Swift/Controllers/HistoryViewController.cpp +++ b/Swift/Controllers/HistoryViewController.cpp @@ -97,7 +97,7 @@ void HistoryViewController::handleSelectedContactChanged(RosterItem* newContact) if (contacts_[type].count(contactJID)) { currentResultDate_ = *contacts_[type][contactJID].rbegin(); - currentItemType_ = type; + selectedItemType_ = type; messages = historyController_->getMessagesFromDate(selfJID_, contactJID, type, currentResultDate_); } } @@ -156,7 +156,7 @@ void HistoryViewController::handleReturnPressed(const std::string& keyword) { } void HistoryViewController::handleScrollReachedTop(const boost::gregorian::date& date) { - std::vector messages = historyController_->getMessagesFromPreviousDate(selfJID_, selectedItem_->getJID(), currentItemType_, date); + std::vector messages = historyController_->getMessagesFromPreviousDate(selfJID_, selectedItem_->getJID(), selectedItemType_, date); reverse_foreach (const HistoryMessage& message, messages) { addNewMessage(message, true); @@ -164,7 +164,7 @@ void HistoryViewController::handleScrollReachedTop(const boost::gregorian::date& } void HistoryViewController::handleScrollReachedBottom(const boost::gregorian::date& date) { - std::vector messages = historyController_->getMessagesFromNextDate(selfJID_, selectedItem_->getJID(), currentItemType_, date); + std::vector messages = historyController_->getMessagesFromNextDate(selfJID_, selectedItem_->getJID(), selectedItemType_, date); foreach (const HistoryMessage& message, messages) { addNewMessage(message, true); @@ -172,11 +172,45 @@ void HistoryViewController::handleScrollReachedBottom(const boost::gregorian::da } void HistoryViewController::handlePreviousButtonClicked() { - reset(); + if (!selectedItem_) { + return; + } + + std::set::iterator date = contacts_[selectedItemType_][selectedItem_->getJID()].find(currentResultDate_); + + if (*date == *contacts_[selectedItemType_][selectedItem_->getJID()].rbegin()) { + return; + } + + historyWindow_->resetConversationView(); + currentResultDate_ = *(++date); + std::vector messages = historyController_->getMessagesFromDate(selfJID_, selectedItem_->getJID(), selectedItemType_, currentResultDate_); + historyWindow_->setDate(currentResultDate_); + + foreach (const HistoryMessage& message, messages) { + addNewMessage(message, false); + } } void HistoryViewController::handleNextButtonClicked() { - reset(); + if (!selectedItem_) { + return; + } + + std::set::iterator date = contacts_[selectedItemType_][selectedItem_->getJID()].find(currentResultDate_); + + if (date == contacts_[selectedItemType_][selectedItem_->getJID()].begin()) { + return; + } + + historyWindow_->resetConversationView(); + currentResultDate_ = *(--date); + std::vector messages = historyController_->getMessagesFromDate(selfJID_, selectedItem_->getJID(), selectedItemType_, currentResultDate_); + historyWindow_->setDate(currentResultDate_); + + foreach (const HistoryMessage& message, messages) { + addNewMessage(message, false); + } } void HistoryViewController::reset() { diff --git a/Swift/Controllers/HistoryViewController.h b/Swift/Controllers/HistoryViewController.h index a7667c4..e78b5be 100644 --- a/Swift/Controllers/HistoryViewController.h +++ b/Swift/Controllers/HistoryViewController.h @@ -56,7 +56,7 @@ namespace Swift { std::map contacts_; ContactRosterItem* selectedItem_; - HistoryMessage::Type currentItemType_; + HistoryMessage::Type selectedItemType_; boost::gregorian::date currentResultDate_; }; } -- cgit v0.10.2-6-g49f6