diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-11-18 12:09:08 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-12-22 20:19:07 (GMT) |
commit | 9f04a7ec3429303118f12607703b877d8ba43888 (patch) | |
tree | 3e868395fa3c4f9cbbf84614094bb0251b425c15 /Swift/QtUI/MUCSearch | |
parent | 04b99ce8430109d0467c29c85cb6bacb85c54c44 (diff) | |
download | swift-9f04a7ec3429303118f12607703b877d8ba43888.zip swift-9f04a7ec3429303118f12607703b877d8ba43888.tar.bz2 |
Basic User Search support, and Find Rooms cleanup.
Adds a throbber to the MUC search, turns the Add Contact dialog into something searchy, adds the option to open chats to arbitrary JIDs.
Resolves: #614
Resolves: #695
Resolves: #436
Release-Notes: On servers that support it, users can now perform searches for contacts to add or chat to.
Diffstat (limited to 'Swift/QtUI/MUCSearch')
-rw-r--r-- | Swift/QtUI/MUCSearch/QtMUCSearchWindow.cpp | 42 | ||||
-rw-r--r-- | Swift/QtUI/MUCSearch/QtMUCSearchWindow.h | 6 |
2 files changed, 48 insertions, 0 deletions
diff --git a/Swift/QtUI/MUCSearch/QtMUCSearchWindow.cpp b/Swift/QtUI/MUCSearch/QtMUCSearchWindow.cpp index c31230c..7d2caba 100644 --- a/Swift/QtUI/MUCSearch/QtMUCSearchWindow.cpp +++ b/Swift/QtUI/MUCSearch/QtMUCSearchWindow.cpp @@ -7,6 +7,9 @@ #include "Swift/QtUI/MUCSearch/QtMUCSearchWindow.h" #include <qdebug.h> +#include <QMovie> +#include <QScrollBar> +#include <QTimer> #include "Swift/Controllers/UIEvents/UIEventStream.h" #include "Swift/Controllers/UIEvents/JoinMUCUIEvent.h" @@ -41,12 +44,41 @@ QtMUCSearchWindow::QtMUCSearchWindow(UIEventStream* eventStream) { connect(joinButton_, SIGNAL(clicked()), this, SLOT(handleJoin())); connect(results_, SIGNAL(clicked(const QModelIndex&)), this, SLOT(handleSelected(const QModelIndex&))); connect(results_, SIGNAL(activated(const QModelIndex&)), this, SLOT(handleActivated(const QModelIndex&))); + throbber_ = new QLabel("Searching", results_); + throbber_->setMovie(new QMovie(":/icons/throbber.gif", QByteArray(), throbber_)); + throbber_->setToolTip("Searching"); + hasHadScrollBars_ = false; + updateThrobberPosition(); + setSearchInProgress(false); } QtMUCSearchWindow::~QtMUCSearchWindow() { } +void QtMUCSearchWindow::resizeEvent(QResizeEvent* /*event*/) { + updateThrobberPosition(); +} + +void QtMUCSearchWindow::updateThrobberPosition() { + bool isShown = throbber_->isVisible(); + int resultWidth = results_->width(); + int resultHeight = results_->height(); + //throbberWidth = throbber_->movie()->scaledSize().width(); + //throbberHeight = throbber_->movie()->scaledSize().height(); + int throbberWidth = 16; /* This is nasty, but the above doesn't work! */ + int throbberHeight = 16; + /* It's difficult (or I spent a while trying) to work out whether the scrollbars are currently shown and their appropriate size, + * because if you listen for the expanded/collapsed signals, you seem to get them before the scrollbars are updated. + * This seems an acceptable workaround. + */ + hasHadScrollBars_ |= results_->verticalScrollBar()->isVisible(); + int hMargin = hasHadScrollBars_ ? results_->verticalScrollBar()->width() + 2 : 2; + int vMargin = 2; /* We don't get horizontal scrollbars */ + throbber_->setGeometry(QRect(resultWidth - throbberWidth - hMargin, resultHeight - throbberHeight - vMargin, throbberWidth, throbberHeight)); /* include margins */ + throbber_->setVisible(isShown); +} + void QtMUCSearchWindow::addSavedServices(const std::vector<JID>& services) { service_->clear(); foreach (JID jid, services) { @@ -145,6 +177,7 @@ void QtMUCSearchWindow::clearList() { } void QtMUCSearchWindow::addService(const MUCService& service) { + updateThrobberPosition(); MUCSearchServiceItem* serviceItem = new MUCSearchServiceItem(P2QSTRING(service.getJID().toString())); foreach (MUCService::MUCRoom room, service.getRooms()) { new MUCSearchRoomItem(P2QSTRING(room.getNode()), serviceItem); @@ -153,4 +186,13 @@ void QtMUCSearchWindow::addService(const MUCService& service) { results_->expandAll(); } +void QtMUCSearchWindow::setSearchInProgress(bool searching) { + if (searching) { + throbber_->movie()->start(); + } else { + throbber_->movie()->stop(); + } + throbber_->setVisible(searching); +} + } diff --git a/Swift/QtUI/MUCSearch/QtMUCSearchWindow.h b/Swift/QtUI/MUCSearch/QtMUCSearchWindow.h index 27ccdcb..b8cf953 100644 --- a/Swift/QtUI/MUCSearch/QtMUCSearchWindow.h +++ b/Swift/QtUI/MUCSearch/QtMUCSearchWindow.h @@ -25,19 +25,25 @@ namespace Swift { virtual void clearList(); virtual void addService(const MUCService& service); virtual void addSavedServices(const std::vector<JID>& services); + virtual void setSearchInProgress(bool searching); virtual void show(); + protected: + virtual void resizeEvent(QResizeEvent* event); private slots: void handleSearch(const QString& text); void handleSearch(); void handleJoin(); void handleSelected(const QModelIndex& current); void handleActivated(const QModelIndex& index); + void updateThrobberPosition(); private: void createAutoJoin(const JID& room, boost::optional<String> passedNick); MUCSearchModel* model_; MUCSearchDelegate* delegate_; UIEventStream* eventStream_; + QLabel* throbber_; String lastSetNick_; + bool hasHadScrollBars_; }; } |