diff options
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_; }; } |