1 /*************************************************************************** 2 * Copyright (C) 2005-2020 by the Quassel Project * 3 * devel@quassel-irc.org * 4 * * 5 * This program is free software; you can redistribute it and/or modify * 6 * it under the terms of the GNU General Public License as published by * 7 * the Free Software Foundation; either version 2 of the License, or * 8 * (at your option) version 3. * 9 * * 10 * This program is distributed in the hope that it will be useful, * 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 13 * GNU General Public License for more details. * 14 * * 15 * You should have received a copy of the GNU General Public License * 16 * along with this program; if not, write to the * 17 * Free Software Foundation, Inc., * 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 19 ***************************************************************************/ 20 21 #ifndef CHANNELLISTDLG_H 22 #define CHANNELLISTDLG_H 23 24 #include <QSortFilterProxyModel> 25 26 #include "irclisthelper.h" 27 #include "irclistmodel.h" 28 #include "types.h" 29 30 #include "ui_channellistdlg.h" 31 32 class QSpacerItem; 33 34 class ChannelListDlg : public QDialog 35 { 36 Q_OBJECT 37 38 public: 39 ChannelListDlg(QWidget* parent = nullptr); 40 41 void setNetwork(NetworkId netId); 42 43 /** 44 * Set the channel search string, enabling advanced mode if needed 45 * 46 * Sets the channel name search text to the specified string, enabling advanced mode. If search 47 * string is empty, advanced mode will be automatically hidden. 48 * 49 * @param channelFilters Partial channel name to search for, or empty to not filter by name 50 */ 51 void setChannelFilters(const QString& channelFilters); 52 53 public slots: 54 /** 55 * Request a channel listing using any parameters set in the UI 56 */ 57 void requestSearch(); 58 59 protected slots: 60 void receiveChannelList(const NetworkId& netId, 61 const QStringList& channelFilters, 62 const QList<IrcListHelper::ChannelDescription>& channelList); 63 void reportFinishedList(); 64 void joinChannel(const QModelIndex&); 65 66 private slots: toggleMode()67 inline void toggleMode() { setAdvancedMode(!_advancedMode); } 68 void showError(const QString& error); 69 70 private: 71 void showFilterLine(bool show); 72 void showErrors(bool show); 73 void enableQuery(bool enable); 74 void setAdvancedMode(bool advanced); 75 76 /** 77 * Update the focus of input widgets according to dialog state 78 */ 79 void updateInputFocus(); 80 81 Ui::ChannelListDlg ui; 82 83 bool _listFinished{true}; 84 NetworkId _netId; 85 IrcListModel _ircListModel; 86 QSortFilterProxyModel _sortFilter; 87 QSpacerItem* _simpleModeSpacer{nullptr}; 88 bool _advancedMode{false}; 89 }; 90 91 #endif // CHANNELLIST_H 92