/* * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include namespace Swift { class UserSearchModel; class UserSearchDelegate; class UserSearchResult; class UIEventStream; class QtUserSearchFirstPage; class QtUserSearchFirstMultiJIDPage; class QtUserSearchFieldsPage; class QtUserSearchResultsPage; class QtUserSearchDetailsPage; class QtFormResultItemModel; class SettingsProvider; class QtUserSearchWindow : public QWizard, public UserSearchWindow, private Ui::QtUserSearchWizard { Q_OBJECT public: QtUserSearchWindow(UIEventStream* eventStream, UserSearchWindow::Type type, const std::set& groups, SettingsProvider* settingsProvider); virtual ~QtUserSearchWindow() override; virtual void addSavedServices(const std::vector& services) override; virtual void clear() override; virtual void show() override; virtual void setResults(const std::vector& 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 fields) override; virtual void setNameSuggestions(const std::vector& suggestions) override; virtual void prepopulateJIDAndName(const JID& jid, const std::string& name) override; virtual void setContactSuggestions(const std::vector& suggestions) override; virtual void setJIDs(const std::vector &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 getJIDs() const override; virtual void setCanStartImpromptuChats(bool supportsImpromptu) override; virtual void updateContacts(const std::vector &contacts) override; virtual void addContacts(const std::vector& contacts) override; virtual void setCanSupplyDescription(bool allowed) override; virtual void setWarning(const boost::optional& message) override; protected: virtual int nextId() const override; private slots: void handleFirstPageRadioChange(); void handleCurrentChanged(int); void handleAccepted(); void handleContactSuggestionRequested(const QString& text); void addContact(); void handleAddViaSearch(); void handleListChanged(std::vector list); void handleJIDsAdded(std::vector jids); void handleJIDEditingDone(); private: void setFirstPage(QString title = ""); void setSecondPage(); void setThirdPage(); private: void clearForm(); void setError(const QString& error); JID getServerToSearch(); void handleSearch(); JID getContactJID() const; Contact::ref getContact() const; void addSearchedJIDToList(const Contact::ref& contact); void handleOnSearchedJIDSelected(const Contact::ref& contact); private: UIEventStream* eventStream_; UserSearchWindow::Type type_; QAbstractItemModel* model_; UserSearchDelegate* delegate_; QtUserSearchFirstPage* firstPage_; QtUserSearchFirstMultiJIDPage* firstMultiJIDPage_; QtUserSearchFieldsPage* fieldsPage_; QtUserSearchResultsPage* resultsPage_; QtUserSearchDetailsPage* detailsPage_; JID myServer_; JID roomJID_; JID originatorJID_; int lastPage_; std::vector contactVector_; SettingsProvider* settings_; bool searchNext_; bool supportsImpromptu_; }; }