diff options
Diffstat (limited to 'Swift/QtUI')
| -rw-r--r-- | Swift/QtUI/FlowLayout.h | 2 | ||||
| -rw-r--r-- | Swift/QtUI/QtChatWindow.cpp | 48 | ||||
| -rw-r--r-- | Swift/QtUI/QtChatWindow.h | 7 | ||||
| -rw-r--r-- | Swift/QtUI/QtHistoryWindow.cpp | 2 | ||||
| -rw-r--r-- | Swift/QtUI/QtWebKitChatView.cpp | 21 | ||||
| -rw-r--r-- | Swift/QtUI/QtWebKitChatView.h | 65 | ||||
| -rw-r--r-- | Swift/QtUI/SConscript | 9 | ||||
| -rw-r--r-- | Swift/QtUI/UserSearch/QtUserSearchWindow.h | 52 | 
8 files changed, 136 insertions, 70 deletions
| diff --git a/Swift/QtUI/FlowLayout.h b/Swift/QtUI/FlowLayout.h index 1453d45..29d527f 100644 --- a/Swift/QtUI/FlowLayout.h +++ b/Swift/QtUI/FlowLayout.h @@ -59,7 +59,7 @@ class FlowLayout : public QLayout  public:      explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);      explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1); -    ~FlowLayout(); +    ~FlowLayout() override;      void addItem(QLayoutItem *item) override;      int horizontalSpacing() const; diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp index 874f710..5981f9c 100644 --- a/Swift/QtUI/QtChatWindow.cpp +++ b/Swift/QtUI/QtChatWindow.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2017 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -111,7 +111,7 @@ QtChatWindow::QtChatWindow(const QString& contact, QtChatTheme* theme, UIEventSt          messageLog_ = new QtPlainChatView(this, eventStream_);      }      else { -        messageLog_ = new QtWebKitChatView(this, eventStream_, theme, this); // I accept that passing the ChatWindow in so that the view can call the signals is somewhat inelegant, but it saves a lot of boilerplate. This patch is unpleasant enough already. So let's fix this soon (it at least needs fixing by the time history is sorted), but not now. +        messageLog_ = new QtWebKitChatView(this, eventStream_, theme, this, settings); // I accept that passing the ChatWindow in so that the view can call the signals is somewhat inelegant, but it saves a lot of boilerplate. This patch is unpleasant enough already. So let's fix this soon (it at least needs fixing by the time history is sorted), but not now.      }      logRosterSplitter_->addWidget(messageLog_); @@ -693,7 +693,7 @@ void QtChatWindow::handleEmojisButtonClicked() {      emojisLayout->setContentsMargins(style()->pixelMetric(QStyle::PM_MenuHMargin),style()->pixelMetric(QStyle::PM_MenuVMargin),                                       style()->pixelMetric(QStyle::PM_MenuHMargin),style()->pixelMetric(QStyle::PM_MenuVMargin));      emojisLayout->addWidget(emojisGrid_); -    emojisMenu_ = std::unique_ptr<QMenu>(new QMenu()); +    emojisMenu_ = std::make_unique<QMenu>();      emojisMenu_->setLayout(emojisLayout);      emojisMenu_->adjustSize(); @@ -984,4 +984,46 @@ void QtChatWindow::setBookmarkState(RoomBookmarkState bookmarkState) {      roomBookmarkState_ = bookmarkState;  } +void QtChatWindow::setChatSecurityMarking(const std::string& markingValue, const std::string& markingForegroundColorValue, const std::string& markingBackgroundColorValue) { +    auto layout = static_cast<QBoxLayout*>(this->layout()); + +    if (securityMarkingLayout_) { +        layout->removeItem(securityMarkingLayout_); +        securityMarkingLayout_->removeWidget(securityMarkingDisplay_); +        delete securityMarkingLayout_; +    } +    delete securityMarkingDisplay_; + +    securityMarkingLayout_ = new QHBoxLayout(); +    securityMarkingDisplay_ = new QLabel(P2QSTRING(markingValue)); + +    securityMarkingLayout_->addWidget(securityMarkingDisplay_); +    layout->insertLayout(1, securityMarkingLayout_); + +    auto palette = securityMarkingDisplay_->palette(); +    palette.setColor(securityMarkingDisplay_->foregroundRole(), P2QSTRING(markingForegroundColorValue)); +    palette.setColor(securityMarkingDisplay_->backgroundRole(), P2QSTRING(markingBackgroundColorValue)); + +    securityMarkingDisplay_->setPalette(palette); +    securityMarkingDisplay_->setContentsMargins(4,4,4,4); +    securityMarkingDisplay_->setAutoFillBackground(true); +    securityMarkingDisplay_->setAlignment(Qt::AlignCenter); +} + +void QtChatWindow::removeChatSecurityMarking() { +    if (!securityMarkingLayout_) { +        return; +    } + +    auto layout = static_cast<QBoxLayout*>(this->layout()); + +    layout->removeItem(securityMarkingLayout_); +    securityMarkingLayout_->removeWidget(securityMarkingDisplay_); + +    delete securityMarkingDisplay_; +    delete securityMarkingLayout_; +    securityMarkingDisplay_ = nullptr; +    securityMarkingLayout_ = nullptr; +} +  } diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h index 361d7c6..4e10053 100644 --- a/Swift/QtUI/QtChatWindow.h +++ b/Swift/QtUI/QtChatWindow.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2017 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -194,6 +194,9 @@ namespace Swift {              void resetDayChangeTimer(); +            void setChatSecurityMarking(const std::string& markingValue, const std::string& markingForegroundColorValue, const std::string& markingBackgroundColorValue); +            void removeChatSecurityMarking(); +          private:              int unreadCount_;              bool contactIsTyping_; @@ -241,5 +244,7 @@ namespace Swift {              QPointer<QtEmojisSelector> emojisGrid_;              std::map<std::string, std::string> emoticonsMap_;              QTimer* dayChangeTimer = nullptr; +            QHBoxLayout* securityMarkingLayout_ = nullptr; +            QLabel* securityMarkingDisplay_ = nullptr;      };  } diff --git a/Swift/QtUI/QtHistoryWindow.cpp b/Swift/QtUI/QtHistoryWindow.cpp index 77a7f12..983d0e9 100644 --- a/Swift/QtUI/QtHistoryWindow.cpp +++ b/Swift/QtUI/QtHistoryWindow.cpp @@ -49,7 +49,7 @@ QtHistoryWindow::QtHistoryWindow(SettingsProvider* settings, UIEventStream* even      idCounter_ = 0;      delete ui_.conversation_; -    conversation_ = new QtWebKitChatView(nullptr, nullptr, theme_, this, true); // Horrible unsafe. Do not do this. FIXME +    conversation_ = new QtWebKitChatView(nullptr, nullptr, theme_, this, settings, true); // Horrible unsafe. Do not do this. FIXME      QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);      sizePolicy.setHorizontalStretch(80);      sizePolicy.setVerticalStretch(0); diff --git a/Swift/QtUI/QtWebKitChatView.cpp b/Swift/QtUI/QtWebKitChatView.cpp index ea9a9c6..f3d23e7 100644 --- a/Swift/QtUI/QtWebKitChatView.cpp +++ b/Swift/QtUI/QtWebKitChatView.cpp @@ -28,6 +28,8 @@  #include <Swiften/Base/Log.h>  #include <Swiften/StringCodecs/Base64.h> +#include <Swift/Controllers/SettingConstants.h> +#include <Swift/Controllers/Settings/SettingsProvider.h>  #include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h>  #include <Swift/Controllers/UIEvents/UIEventStream.h> @@ -56,7 +58,7 @@ namespace {      const double minimalFontScaling = 0.7;  } -QtWebKitChatView::QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll) : QtChatView(parent), window_(window), eventStream_(eventStream), fontSizeSteps_(0), disableAutoScroll_(disableAutoScroll), previousMessageKind_(PreviosuMessageWasNone), previousMessageWasSelf_(false), showEmoticons_(false), insertingLastLine_(false), idCounter_(0) { +QtWebKitChatView::QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, SettingsProvider* settings, bool disableAutoScroll /*= false*/) : QtChatView(parent), window_(window), eventStream_(eventStream), fontSizeSteps_(0), disableAutoScroll_(disableAutoScroll), previousMessageKind_(PreviosuMessageWasNone), previousMessageWasSelf_(false), showEmoticons_(false), insertingLastLine_(false), idCounter_(0), settings_(settings) {      theme_ = theme;      QVBoxLayout* mainLayout = new QVBoxLayout(this); @@ -555,10 +557,13 @@ std::string QtWebKitChatView::addMessage(      QString scaledAvatarPath = QtScaledAvatarCache(32).getScaledAvatarPath(avatarPath.c_str()); +    std::string messageMarkingValue = ""; +      QString htmlString;      if (label) { +        messageMarkingValue = label->getDisplayMarking();          htmlString = QString("<span style=\"border: thin dashed grey; padding-left: .5em; padding-right: .5em; color: %1; background-color: %2; font-size: 90%; margin-right: .5em; \" class='swift_label'>").arg(QtUtilities::htmlEscape(P2QSTRING(label->getForegroundColor()))).arg(QtUtilities::htmlEscape(P2QSTRING(label->getBackgroundColor()))); -        htmlString += QString("%1</span> ").arg(QtUtilities::htmlEscape(P2QSTRING(label->getDisplayMarking()))); +        htmlString += QString("%1</span> ").arg(QtUtilities::htmlEscape(P2QSTRING(messageMarkingValue)));      }      QString styleSpanStart = style == "" ? "" : "<span style=\"" + style + "\">"; @@ -569,7 +574,7 @@ std::string QtWebKitChatView::addMessage(      QString highlightSpanEnd = highlightWholeMessage ? "</span>" : "";      htmlString += "<span class='swift_inner_message'>" + styleSpanStart + highlightSpanStart + message + highlightSpanEnd + styleSpanEnd + "</span>" ; -    bool appendToPrevious = appendToPreviousCheck(PreviousMessageWasMessage, senderName, senderIsSelf); +    bool appendToPrevious = appendToPreviousCheck(PreviousMessageWasMessage, senderName, senderIsSelf, label);      QString qAvatarPath = scaledAvatarPath.isEmpty() ? "qrc:/icons/avatar.svg" : QUrl::fromLocalFile(scaledAvatarPath).toEncoded();      std::string id = "id" + boost::lexical_cast<std::string>(idCounter_++); @@ -578,6 +583,7 @@ std::string QtWebKitChatView::addMessage(      previousMessageWasSelf_ = senderIsSelf;      previousSenderName_ = P2QSTRING(senderName);      previousMessageKind_ = PreviousMessageWasMessage; +    previousMessageDisplayMarking_ = messageMarkingValue;      return id;  } @@ -978,12 +984,19 @@ void QtWebKitChatView::setMessageReceiptState(const std::string& id, ChatWindow:      setReceiptXML(P2QSTRING(id), xml);  } -bool QtWebKitChatView::appendToPreviousCheck(PreviousMessageKind messageKind, const std::string& senderName, bool senderIsSelf) { +bool QtWebKitChatView::appendToPreviousCheck(PreviousMessageKind messageKind, const std::string& senderName, bool senderIsSelf, const std::shared_ptr<SecurityLabel>& label /*=nullptr*/) {      bool result = previousMessageKind_ == messageKind && ((senderIsSelf && previousMessageWasSelf_) || (!senderIsSelf && !previousMessageWasSelf_&& previousSenderName_ == P2QSTRING(senderName)));      if (insertingLastLine_) {          insertingLastLine_ = false;          return false;      } +    if (settings_->getSetting(SettingConstants::MUC_MARKING_ELISION)) { +        if (label && label->getDisplayMarking() != previousMessageDisplayMarking_) { +            if (label->getDisplayMarking() != "") { +                return false; +            } +        } +    }      return result;  } diff --git a/Swift/QtUI/QtWebKitChatView.h b/Swift/QtUI/QtWebKitChatView.h index 802c216..a2eafe6 100644 --- a/Swift/QtUI/QtWebKitChatView.h +++ b/Swift/QtUI/QtWebKitChatView.h @@ -13,8 +13,6 @@  #include <QWebElement>  #include <QWidget> -#include <Swiften/Base/Override.h> -  #include <Swift/Controllers/UIInterfaces/ChatWindow.h>  #include <Swift/QtUI/ChatSnippet.h> @@ -30,6 +28,7 @@ namespace Swift {      class QtChatWindowJSBridge;      class UIEventStream;      class QtChatWindow; +    class SettingsProvider;      class QtWebKitChatView : public QtChatView {              Q_OBJECT @@ -44,42 +43,42 @@ namespace Swift {              static const QString ButtonFileTransferOpenFile;              static const QString ButtonMUCInvite;          public: -            QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false); -            ~QtWebKitChatView(); +            QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, SettingsProvider* settings, bool disableAutoScroll = false); +            ~QtWebKitChatView() override;              /** Add message to window.               * @return id of added message (for acks).               */ -            virtual std::string addMessage(const ChatWindow::ChatMessage& message, const std::string& senderName, bool senderIsSelf, std::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time) SWIFTEN_OVERRIDE; +            virtual std::string addMessage(const ChatWindow::ChatMessage& message, const std::string& senderName, bool senderIsSelf, std::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time) override;              /** Adds action to window.               * @return id of added message (for acks);               */ -            virtual std::string addAction(const ChatWindow::ChatMessage& message, const std::string& senderName, bool senderIsSelf, std::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time) SWIFTEN_OVERRIDE; - -            virtual std::string addSystemMessage(const ChatWindow::ChatMessage& message, ChatWindow::Direction direction) SWIFTEN_OVERRIDE; -            virtual void addPresenceMessage(const ChatWindow::ChatMessage& message, ChatWindow::Direction direction) SWIFTEN_OVERRIDE; - -            virtual void addErrorMessage(const ChatWindow::ChatMessage& message) SWIFTEN_OVERRIDE; -            virtual void replaceMessage(const ChatWindow::ChatMessage& message, const std::string& id, const boost::posix_time::ptime& time) SWIFTEN_OVERRIDE; -            virtual void replaceSystemMessage(const ChatWindow::ChatMessage& message, const std::string& id, ChatWindow::TimestampBehaviour timestampBehaviour) SWIFTEN_OVERRIDE; -            virtual void replaceWithAction(const ChatWindow::ChatMessage& message, const std::string& id, const boost::posix_time::ptime& time) SWIFTEN_OVERRIDE; -            virtual void replaceLastMessage(const ChatWindow::ChatMessage& message, const ChatWindow::TimestampBehaviour timestampBehaviour) SWIFTEN_OVERRIDE; -            virtual void setAckState(const std::string& id, ChatWindow::AckState state) SWIFTEN_OVERRIDE; - -            virtual std::string addFileTransfer(const std::string& senderName, const std::string& avatarPath, bool senderIsSelf, const std::string& filename, const boost::uintmax_t sizeInBytes, const std::string& description) SWIFTEN_OVERRIDE; -            virtual void setFileTransferProgress(std::string, const int percentageDone) SWIFTEN_OVERRIDE; -            virtual void setFileTransferStatus(std::string, const ChatWindow::FileTransferState state, const std::string& msg = "") SWIFTEN_OVERRIDE; -            virtual void addMUCInvitation(const std::string& senderName, const JID& jid, const std::string& reason, const std::string& password, bool direct, bool isImpromptu, bool isContinuation) SWIFTEN_OVERRIDE; -            virtual std::string addWhiteboardRequest(const QString& contact, bool senderIsSelf) SWIFTEN_OVERRIDE; -            virtual void setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) SWIFTEN_OVERRIDE; -            virtual void setMessageReceiptState(const std::string& id, ChatWindow::ReceiptState state) SWIFTEN_OVERRIDE; - -            virtual void showEmoticons(bool show) SWIFTEN_OVERRIDE; +            virtual std::string addAction(const ChatWindow::ChatMessage& message, const std::string& senderName, bool senderIsSelf, std::shared_ptr<SecurityLabel> label, const std::string& avatarPath, const boost::posix_time::ptime& time) override; + +            virtual std::string addSystemMessage(const ChatWindow::ChatMessage& message, ChatWindow::Direction direction) override; +            virtual void addPresenceMessage(const ChatWindow::ChatMessage& message, ChatWindow::Direction direction) override; + +            virtual void addErrorMessage(const ChatWindow::ChatMessage& message) override; +            virtual void replaceMessage(const ChatWindow::ChatMessage& message, const std::string& id, const boost::posix_time::ptime& time) override; +            virtual void replaceSystemMessage(const ChatWindow::ChatMessage& message, const std::string& id, ChatWindow::TimestampBehaviour timestampBehaviour) override; +            virtual void replaceWithAction(const ChatWindow::ChatMessage& message, const std::string& id, const boost::posix_time::ptime& time) override; +            virtual void replaceLastMessage(const ChatWindow::ChatMessage& message, const ChatWindow::TimestampBehaviour timestampBehaviour) override; +            virtual void setAckState(const std::string& id, ChatWindow::AckState state) override; + +            virtual std::string addFileTransfer(const std::string& senderName, const std::string& avatarPath, bool senderIsSelf, const std::string& filename, const boost::uintmax_t sizeInBytes, const std::string& description) override; +            virtual void setFileTransferProgress(std::string, const int percentageDone) override; +            virtual void setFileTransferStatus(std::string, const ChatWindow::FileTransferState state, const std::string& msg = "") override; +            virtual void addMUCInvitation(const std::string& senderName, const JID& jid, const std::string& reason, const std::string& password, bool direct, bool isImpromptu, bool isContinuation) override; +            virtual std::string addWhiteboardRequest(const QString& contact, bool senderIsSelf) override; +            virtual void setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) override; +            virtual void setMessageReceiptState(const std::string& id, ChatWindow::ReceiptState state) override; + +            virtual void showEmoticons(bool show) override;              void addMessageTop(std::shared_ptr<ChatSnippet> snippet);              void addMessageBottom(std::shared_ptr<ChatSnippet> snippet);              int getSnippetPositionByDate(const QDate& date); // FIXME : This probably shouldn't have been public -            virtual void addLastSeenLine() SWIFTEN_OVERRIDE; +            virtual void addLastSeenLine() override;          private: // previously public, now private              void replaceLastMessage(const QString& newMessage, const ChatWindow::TimestampBehaviour timestampBehaviour); @@ -116,9 +115,9 @@ namespace Swift {              void resetTopInsertPoint();              void increaseFontSize(int numSteps = 1);              void decreaseFontSize(); -            virtual void resizeFont(int fontSizeSteps) SWIFTEN_OVERRIDE; -            virtual void scrollToBottom() SWIFTEN_OVERRIDE; -            virtual void handleKeyPressEvent(QKeyEvent* event) SWIFTEN_OVERRIDE; +            virtual void resizeFont(int fontSizeSteps) override; +            virtual void scrollToBottom() override; +            virtual void handleKeyPressEvent(QKeyEvent* event) override;          private slots:              void handleViewLoadFinished(bool); @@ -152,7 +151,7 @@ namespace Swift {                      const boost::posix_time::ptime& time,                      const QString& style,                      const HighlightAction& highlight); -            bool appendToPreviousCheck(PreviousMessageKind messageKind, const std::string& senderName, bool senderIsSelf); +            bool appendToPreviousCheck(PreviousMessageKind messageKind, const std::string& senderName, bool senderIsSelf, const std::shared_ptr<SecurityLabel>& label = nullptr);              static ChatSnippet::Direction getActualDirection(const ChatWindow::ChatMessage& message, ChatWindow::Direction direction);              QString getHighlightSpanStart(const std::string& text, const std::string& background);              QString getHighlightSpanStart(const HighlightAction& highlight); @@ -160,7 +159,7 @@ namespace Swift {              static QString buildChatWindowButton(const QString& name, const QString& id, const QString& arg1 = QString(), const QString& arg2 = QString(), const QString& arg3 = QString(), const QString& arg4 = QString(), const QString& arg5 = QString());          protected: -            void resizeEvent(QResizeEvent* event) SWIFTEN_OVERRIDE; +            void resizeEvent(QResizeEvent* event) override;          private:              void headerEncode(); @@ -191,5 +190,7 @@ namespace Swift {              QString previousSenderName_;              std::map<QString, QString> descriptions_;              std::map<QString, QString> filePaths_; +            std::string previousMessageDisplayMarking_; +            SettingsProvider* settings_ = nullptr;      };  } diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 54f0450..3755187 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -478,9 +478,16 @@ if env["PLATFORM"] == "win32" :                  outfile.close()                  infile.close()              copying = env.Command(["Swift/COPYING.rtf"], ["COPYING"], convertToRTF) +            if env.get("vcredistdir", "") : +                vcredistdir = os.path.dirname(env["vcredistdir"]) +            else: +                vcredistdir = os.path.dirname(env["vcredist"])+"\\..\\" + ("x86" if env["win_target_arch"] == "x86" else "x64") + "\\Microsoft.VC"+env.get("MSVC_VERSION", "").replace(".","")[:3]+".CRT\\"              wixvariables = {                  'VCCRTFile': env["vcredist"], -                'Version': str(myenv["SWIFT_VERSION_MAJOR"]) + "." + str(myenv["SWIFT_VERSION_MINOR"]) + "." + str(myenv["SWIFT_VERSION_PATCH"]) +                'VCCRTPath': vcredistdir, +                'Version': str(myenv["SWIFT_VERSION_MAJOR"]) + "." + str(myenv["SWIFT_VERSION_MINOR"]) + "." + str(myenv["SWIFT_VERSION_PATCH"]), +                'MsvcVersion': str(env.get("MSVC_VERSION", "").replace(".","")[:3]), +                'MsvcDotVersion': str(env.get("MSVC_VERSION", "")[:4])              }              wixincludecontent = "<Include>"              for key in wixvariables: diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.h b/Swift/QtUI/UserSearch/QtUserSearchWindow.h index 0714ac1..d487a91 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.h +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2017 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -10,8 +10,6 @@  #include <QWizard> -#include <Swiften/Base/Override.h> -  #include <Swift/Controllers/UIInterfaces/UserSearchWindow.h>  #include <Swift/QtUI/UserSearch/ui_QtUserSearchWizard.h> @@ -33,34 +31,34 @@ namespace Swift {          Q_OBJECT          public:              QtUserSearchWindow(UIEventStream* eventStream, UserSearchWindow::Type type, const std::set<std::string>& groups, SettingsProvider* settingsProvider); -            virtual ~QtUserSearchWindow(); +            virtual ~QtUserSearchWindow() override; -            virtual void addSavedServices(const std::vector<JID>& services) SWIFTEN_OVERRIDE; +            virtual void addSavedServices(const std::vector<JID>& services) override; -            virtual void clear() SWIFTEN_OVERRIDE; -            virtual void show() SWIFTEN_OVERRIDE; -            virtual void setResults(const std::vector<UserSearchResult>& results) SWIFTEN_OVERRIDE; -            virtual void setResultsForm(Form::ref results) SWIFTEN_OVERRIDE; -            virtual void setSelectedService(const JID& jid) SWIFTEN_OVERRIDE; -            virtual void setServerSupportsSearch(bool error) SWIFTEN_OVERRIDE; -            virtual void setSearchError(bool error) SWIFTEN_OVERRIDE; -            virtual void setSearchFields(std::shared_ptr<SearchPayload> fields) SWIFTEN_OVERRIDE; -            virtual void setNameSuggestions(const std::vector<std::string>& suggestions) SWIFTEN_OVERRIDE; -            virtual void prepopulateJIDAndName(const JID& jid, const std::string& name) SWIFTEN_OVERRIDE; -            virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions) SWIFTEN_OVERRIDE; -            virtual void setJIDs(const std::vector<JID> &jids) SWIFTEN_OVERRIDE; -            virtual void setOriginator(const JID& originator) SWIFTEN_OVERRIDE; -            virtual void setRoomJID(const JID &roomJID) SWIFTEN_OVERRIDE; -            virtual std::string getReason() const SWIFTEN_OVERRIDE; -            virtual std::vector<JID> getJIDs() const SWIFTEN_OVERRIDE; -            virtual void setCanStartImpromptuChats(bool supportsImpromptu) SWIFTEN_OVERRIDE; -            virtual void updateContacts(const std::vector<Contact::ref> &contacts) SWIFTEN_OVERRIDE; -            virtual void addContacts(const std::vector<Contact::ref>& contacts) SWIFTEN_OVERRIDE; -            virtual void setCanSupplyDescription(bool allowed) SWIFTEN_OVERRIDE; -            virtual void setWarning(const boost::optional<std::string>& message) SWIFTEN_OVERRIDE; +            virtual void clear() override; +            virtual void show() override; +            virtual void setResults(const std::vector<UserSearchResult>& results) override; +            virtual void setResultsForm(Form::ref results) override; +            virtual void setSelectedService(const JID& jid) override; +            virtual void setServerSupportsSearch(bool error) override; +            virtual void setSearchError(bool error) override; +            virtual void setSearchFields(std::shared_ptr<SearchPayload> fields) override; +            virtual void setNameSuggestions(const std::vector<std::string>& suggestions) override; +            virtual void prepopulateJIDAndName(const JID& jid, const std::string& name) override; +            virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions) override; +            virtual void setJIDs(const std::vector<JID> &jids) override; +            virtual void setOriginator(const JID& originator) override; +            virtual void setRoomJID(const JID &roomJID) override; +            virtual std::string getReason() const override; +            virtual std::vector<JID> getJIDs() const override; +            virtual void setCanStartImpromptuChats(bool supportsImpromptu) override; +            virtual void updateContacts(const std::vector<Contact::ref> &contacts) override; +            virtual void addContacts(const std::vector<Contact::ref>& contacts) override; +            virtual void setCanSupplyDescription(bool allowed) override; +            virtual void setWarning(const boost::optional<std::string>& message) override;          protected: -            virtual int nextId() const SWIFTEN_OVERRIDE; +            virtual int nextId() const override;          private slots:              void handleFirstPageRadioChange(); | 
 Swift
 Swift