/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2019 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QIcon>
+#include "clientidentity.h"
#include "network.h"
#include "settingspage.h"
-#include "clientidentity.h"
-#include "ui_networkssettingspage.h"
#include "ui_networkadddlg.h"
#include "ui_networkeditdlg.h"
-#include "ui_servereditdlg.h"
+#include "ui_networkssettingspage.h"
#include "ui_saveidentitiesdlg.h"
+#include "ui_servereditdlg.h"
class NetworksSettingsPage : public SettingsPage
{
Q_OBJECT
public:
- NetworksSettingsPage(QWidget *parent = 0);
+ NetworksSettingsPage(QWidget* parent = nullptr);
- virtual inline bool needsCoreConnection() const { return true; }
+ inline bool needsCoreConnection() const override { return true; }
- bool aboutToSave();
+ bool aboutToSave() override;
public slots:
- void save();
- void load();
+ void save() override;
+ void load() override;
+ void bufferList_Open(NetworkId);
private slots:
void widgetHasChanged();
void setWidgetStates();
void coreConnectionStateChanged(bool);
void networkConnectionStateChanged(Network::ConnectionState state);
- void networkConnectionError(const QString &msg);
+ void networkConnectionError(const QString& msg);
void displayNetwork(NetworkId);
- void setItemState(NetworkId, QListWidgetItem *item = 0);
+ void setItemState(NetworkId, QListWidgetItem* item = nullptr);
+
+ /**
+ * Reset the capability-dependent settings to the default unknown states
+ *
+ * For example, this updates the SASL text to indicate the status is unknown. Any actual
+ * information should be set by setNetworkCapStates()
+ *
+ * @see NetworksSettingsPage::setNetworkCapStates()
+ */
+ void resetNetworkCapStates();
/**
* Update the capability-dependent settings according to what the server supports
void on_upServer_clicked();
void on_downServer_clicked();
+ /**
+ * Event handler for SASL status Details button
+ */
+ void on_saslStatusDetails_clicked();
+
private:
+ /**
+ * Status of capability support
+ */
+ enum CapSupportStatus
+ {
+ Unknown, ///< Old core, or otherwise unknown, can't make assumptions
+ Disconnected, ///< Disconnected from network, can't determine
+ MaybeUnsupported, ///< Server does not advertise support at this moment
+ MaybeSupported ///< Server advertises support at this moment
+ };
+ // Keep in mind networks can add, change, and remove capabilities at any time.
+
Ui::NetworksSettingsPage ui;
NetworkId currentId;
QHash<NetworkId, NetworkInfo> networkInfos;
- bool _ignoreWidgetChanges;
+ bool _ignoreWidgetChanges{false};
#ifdef HAVE_SSL
- CertIdentity *_cid;
+ CertIdentity* _cid{nullptr};
#endif
QIcon connectedIcon, connectingIcon, disconnectedIcon;
+ // Status icons
+ QIcon infoIcon, warningIcon;
+
+ CapSupportStatus _saslStatusSelected; /// Status of SASL support for currently-selected network
+
void reset();
bool testHasChanged();
- QListWidgetItem *insertNetwork(NetworkId);
- QListWidgetItem *insertNetwork(const NetworkInfo &info);
- QListWidgetItem *networkItem(NetworkId) const;
- void saveToNetworkInfo(NetworkInfo &);
+ QListWidgetItem* insertNetwork(NetworkId);
+ QListWidgetItem* insertNetwork(const NetworkInfo& info);
+ QListWidgetItem* networkItem(NetworkId) const;
+ void saveToNetworkInfo(NetworkInfo&);
IdentityId defaultIdentity() const;
-};
+ /**
+ * Update the SASL settings interface according to the given SASL state
+ *
+ * @param[in] saslStatus Current status of SASL support.
+ */
+ void setSASLStatus(const CapSupportStatus saslStatus);
+};
class NetworkAddDlg : public QDialog
{
Q_OBJECT
public:
- NetworkAddDlg(const QStringList &existing = QStringList(), QWidget *parent = 0);
+ NetworkAddDlg(QStringList existing = QStringList(), QWidget* parent = nullptr);
NetworkInfo networkInfo() const;
QStringList existing;
};
-
class NetworkEditDlg : public QDialog
{
Q_OBJECT
public:
- NetworkEditDlg(const QString &old, const QStringList &existing = QStringList(), QWidget *parent = 0);
+ NetworkEditDlg(const QString& old, QStringList existing = QStringList(), QWidget* parent = nullptr);
QString networkName() const;
private slots:
- void on_networkEdit_textChanged(const QString &);
+ void on_networkEdit_textChanged(const QString&);
private:
Ui::NetworkEditDlg ui;
QStringList existing;
};
-
class ServerEditDlg : public QDialog
{
Q_OBJECT
public:
- ServerEditDlg(const Network::Server &server = Network::Server(), QWidget *parent = 0);
+ ServerEditDlg(const Network::Server& server = Network::Server(), QWidget* parent = nullptr);
Network::Server serverData() const;
Ui::ServerEditDlg ui;
};
-
class SaveNetworksDlg : public QDialog
{
Q_OBJECT
public:
- SaveNetworksDlg(const QList<NetworkInfo> &toCreate, const QList<NetworkInfo> &toUpdate, const QList<NetworkId> &toRemove, QWidget *parent = 0);
+ SaveNetworksDlg(const QList<NetworkInfo>& toCreate,
+ const QList<NetworkInfo>& toUpdate,
+ const QList<NetworkId>& toRemove,
+ QWidget* parent = nullptr);
private slots:
void clientEvent();
int numevents, rcvevents;
};
-
#endif