From c5cbe5eb77fce2ab954a98399a1450803108217b Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Wed, 23 Jan 2008 23:34:42 +0000 Subject: [PATCH 1/1] Committing my local state. Mostly still invisible part on the not yet enabled networksettingspage. Plus some extensions of the Network class (NetworkInfo is back, yay!). Plus I moved obsolete files to dev-notes/obsolete to remove them from the translators' scope :) --- Quassel.kdevelop.filelist | 7 - .../obsolete}/buffermgmtpage.ui | 0 .../{ => obsolete}/builtin_cmds.obsolete.cpp | 0 .../obsolete}/channelwidget.ui | 0 dev-notes/{ => obsolete}/nickmodel.cpp | 0 dev-notes/{ => obsolete}/nickmodel.h | 0 dev-notes/{ => obsolete}/paulk-mainwindow.ui | 0 .../obsolete}/settingspages.cpp | 0 .../obsolete}/settingspages.h | 0 .../ui => dev-notes/obsolete}/usermgmtpage.ui | 0 dev-notes/sput-ideas.txt | 11 - src/client/client.cpp | 43 ++- src/client/client.h | 8 +- src/common/network.cpp | 42 ++- src/common/network.h | 27 +- src/qtui/bufferwidget.cpp | 8 +- src/qtui/bufferwidget.h | 2 +- src/qtui/mainwin.cpp | 8 +- src/qtui/qtui.pri | 2 +- src/qtui/settingsdlg.cpp | 2 +- .../settingspages/identitiessettingspage.cpp | 1 + .../settingspages/networkssettingspage.cpp | 218 ++++++++++++++++ src/qtui/settingspages/networkssettingspage.h | 31 ++- .../settingspages/networkssettingspage.ui | 245 ++++++++++-------- src/qtui/ui/connectionpage.ui | 18 -- src/qtui/ui/coresettingspage.ui | 18 -- src/qtui/ui/settingsdlg.ui | 2 +- src/uisupport/tabcompleter.cpp | 2 +- 28 files changed, 482 insertions(+), 213 deletions(-) rename {src/qtui/ui => dev-notes/obsolete}/buffermgmtpage.ui (100%) rename dev-notes/{ => obsolete}/builtin_cmds.obsolete.cpp (100%) rename {src/qtui/ui => dev-notes/obsolete}/channelwidget.ui (100%) rename dev-notes/{ => obsolete}/nickmodel.cpp (100%) rename dev-notes/{ => obsolete}/nickmodel.h (100%) rename dev-notes/{ => obsolete}/paulk-mainwindow.ui (100%) rename {src/qtui => dev-notes/obsolete}/settingspages.cpp (100%) rename {src/qtui => dev-notes/obsolete}/settingspages.h (100%) rename {src/qtui/ui => dev-notes/obsolete}/usermgmtpage.ui (100%) delete mode 100644 dev-notes/sput-ideas.txt delete mode 100644 src/qtui/ui/connectionpage.ui delete mode 100644 src/qtui/ui/coresettingspage.ui diff --git a/Quassel.kdevelop.filelist b/Quassel.kdevelop.filelist index 74a943a5..79bc51b0 100644 --- a/Quassel.kdevelop.filelist +++ b/Quassel.kdevelop.filelist @@ -178,8 +178,6 @@ src/qtui/serverlist.h src/qtui/settingsdlg.cpp src/qtui/settingsdlg.h src/qtui/settingspages -src/qtui/settingspages.cpp -src/qtui/settingspages.h src/qtui/settingspages/createidentitydlg.ui src/qtui/settingspages/fontssettingspage.cpp src/qtui/settingspages/fontssettingspage.h @@ -197,13 +195,9 @@ src/qtui/topicwidget.cpp src/qtui/topicwidget.h src/qtui/ui src/qtui/ui/aboutdlg.ui -src/qtui/ui/buffermgmtpage.ui src/qtui/ui/bufferviewwidget.ui src/qtui/ui/bufferwidget.ui -src/qtui/ui/channelwidget.ui -src/qtui/ui/connectionpage.ui src/qtui/ui/coreconnectdlg.ui -src/qtui/ui/coresettingspage.ui src/qtui/ui/debugconsole.ui src/qtui/ui/identitiesdlg.ui src/qtui/ui/identitieseditdlg.ui @@ -215,7 +209,6 @@ src/qtui/ui/servereditdlg.ui src/qtui/ui/serverlistdlg.ui src/qtui/ui/settingsdlg.ui src/qtui/ui/topicwidget.ui -src/qtui/ui/usermgmtpage.ui src/uisupport src/uisupport/action.cpp src/uisupport/action.h diff --git a/src/qtui/ui/buffermgmtpage.ui b/dev-notes/obsolete/buffermgmtpage.ui similarity index 100% rename from src/qtui/ui/buffermgmtpage.ui rename to dev-notes/obsolete/buffermgmtpage.ui diff --git a/dev-notes/builtin_cmds.obsolete.cpp b/dev-notes/obsolete/builtin_cmds.obsolete.cpp similarity index 100% rename from dev-notes/builtin_cmds.obsolete.cpp rename to dev-notes/obsolete/builtin_cmds.obsolete.cpp diff --git a/src/qtui/ui/channelwidget.ui b/dev-notes/obsolete/channelwidget.ui similarity index 100% rename from src/qtui/ui/channelwidget.ui rename to dev-notes/obsolete/channelwidget.ui diff --git a/dev-notes/nickmodel.cpp b/dev-notes/obsolete/nickmodel.cpp similarity index 100% rename from dev-notes/nickmodel.cpp rename to dev-notes/obsolete/nickmodel.cpp diff --git a/dev-notes/nickmodel.h b/dev-notes/obsolete/nickmodel.h similarity index 100% rename from dev-notes/nickmodel.h rename to dev-notes/obsolete/nickmodel.h diff --git a/dev-notes/paulk-mainwindow.ui b/dev-notes/obsolete/paulk-mainwindow.ui similarity index 100% rename from dev-notes/paulk-mainwindow.ui rename to dev-notes/obsolete/paulk-mainwindow.ui diff --git a/src/qtui/settingspages.cpp b/dev-notes/obsolete/settingspages.cpp similarity index 100% rename from src/qtui/settingspages.cpp rename to dev-notes/obsolete/settingspages.cpp diff --git a/src/qtui/settingspages.h b/dev-notes/obsolete/settingspages.h similarity index 100% rename from src/qtui/settingspages.h rename to dev-notes/obsolete/settingspages.h diff --git a/src/qtui/ui/usermgmtpage.ui b/dev-notes/obsolete/usermgmtpage.ui similarity index 100% rename from src/qtui/ui/usermgmtpage.ui rename to dev-notes/obsolete/usermgmtpage.ui diff --git a/dev-notes/sput-ideas.txt b/dev-notes/sput-ideas.txt deleted file mode 100644 index add4e946..00000000 --- a/dev-notes/sput-ideas.txt +++ /dev/null @@ -1,11 +0,0 @@ -NetworkSettingsPage: --------------------- -* Connect-Icons vor dem Network-Eintrag (für aktuellen Zustand) -* Nur disconnectete Netze können entfernt werden - -Architektur: ------------- -NetworkInfo wird zu Network, ist in Zukunft das Top-Level-Objekt für ein -Netz. Server wird zu NetworkConnection, als Child von Network. -Threading? Mal sehen wie das am besten gehen würde... - diff --git a/src/client/client.cpp b/src/client/client.cpp index dd8bd214..cedc0422 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -122,18 +122,6 @@ void Client::init() { /*** public static methods ***/ - -QList Client::networks() { - return instance()->_networks.values(); -} - -Network *Client::network(NetworkId networkid) { - if(instance()->_networks.contains(networkid)) - return instance()->_networks[networkid]; - else - return 0; -} - QList Client::allBufferInfos() { QList bufferids; foreach(Buffer *buffer, buffers()) { @@ -200,6 +188,17 @@ bool Client::isSynced() { return instance()->_syncedToCore; } +/*** Network handling ***/ + +QList Client::networkIds() { + return instance()->_networks.keys(); +} + +const Network * Client::network(NetworkId networkid) { + if(instance()->_networks.contains(networkid)) return instance()->_networks[networkid]; + else return 0; +} + /*** Identity handling ***/ QList Client::identityIds() { @@ -284,16 +283,6 @@ void Client::disconnectFromCore() { // Clear internal data. Hopefully nothing relies on it at this point. _networkModel->clear(); - QHash::iterator bufferIter = _buffers.begin(); - while(bufferIter != _buffers.end()) { - Buffer *buffer = bufferIter.value(); - disconnect(buffer, SIGNAL(destroyed()), this, 0); - bufferIter = _buffers.erase(bufferIter); - buffer->deleteLater(); - } - Q_ASSERT(_buffers.isEmpty()); - - QHash::iterator netIter = _networks.begin(); while(netIter != _networks.end()) { Network *net = netIter.value(); @@ -303,6 +292,15 @@ void Client::disconnectFromCore() { } Q_ASSERT(_networks.isEmpty()); + QHash::iterator bufferIter = _buffers.begin(); + while(bufferIter != _buffers.end()) { + Buffer *buffer = bufferIter.value(); + disconnect(buffer, SIGNAL(destroyed()), this, 0); + bufferIter = _buffers.erase(bufferIter); + buffer->deleteLater(); + } + Q_ASSERT(_buffers.isEmpty()); + QHash::iterator idIter = _identities.begin(); while(idIter != _identities.end()) { Identity *id = idIter.value(); @@ -387,6 +385,7 @@ void Client::addNetwork(Network *net) { networkModel()->attachNetwork(net); connect(net, SIGNAL(destroyed()), instance(), SLOT(networkDestroyed())); instance()->_networks[net->networkId()] = net; + emit instance()->networkAdded(net->networkId()); //if(net->networkId() == 1) net->requestConnect(); // FIXME } diff --git a/src/client/client.h b/src/client/client.h index 26e67cc5..6daa757c 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -54,14 +54,14 @@ public: static void destroy(); static void init(AbstractUi *); - static QList networks(); - static Network *network(NetworkId networkid); - static QList allBufferInfos(); static QList buffers(); static Buffer *buffer(BufferId bufferUid); static Buffer *buffer(BufferInfo); + static QList networkIds(); + static const Network * network(NetworkId); + static QList identityIds(); static const Identity * identity(IdentityId); @@ -144,6 +144,8 @@ signals: //! Sent to the core when an identity shall be removed. Should not be used elsewhere. void requestRemoveIdentity(IdentityId); + void networkAdded(NetworkId id); + public slots: //void selectBuffer(Buffer *); diff --git a/src/common/network.cpp b/src/common/network.cpp index 982011be..f1cff6cf 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -48,13 +48,15 @@ Network::Network(const NetworkId &networkid, QObject *parent) : SyncableObject(p } // I think this is unnecessary since IrcUsers have us as their daddy :) -//Network::~Network() { -// QHashIterator ircuser(_ircUsers); -// while (ircuser.hasNext()) { -// ircuser.next(); -// delete ircuser.value(); -// } -//} +/* +Network::~Network() { + QHashIterator ircuser(_ircUsers); + while (ircuser.hasNext()) { + ircuser.next(); + delete ircuser.value(); + } +} +*/ NetworkId Network::networkId() const { return _networkId; @@ -91,6 +93,26 @@ bool Network::isConnected() const { return _connected; } +NetworkInfo Network::networkInfo() const { + NetworkInfo info; + info.networkName = networkName(); + info.networkId = networkId(); + info.identity = identity(); + info.codecForEncoding = codecForEncoding(); + info.codecForDecoding = codecForDecoding(); + info.serverList = serverList(); + return info; +} + +void Network::setNetworkInfo(const NetworkInfo &info) { + // we don't set our ID! + if(!info.networkName.isEmpty()) setNetworkName(info.networkName); + if(info.identity > 0) setIdentity(info.identity); + if(!info.codecForEncoding.isEmpty()) setCodecForEncoding(QTextCodec::codecForName(info.codecForEncoding)); + if(!info.codecForDecoding.isEmpty()) setCodecForDecoding(QTextCodec::codecForName(info.codecForDecoding)); + if(info.serverList.count()) setServerList(info.serverList); +} + QString Network::prefixToMode(const QString &prefix) { if(prefixes().contains(prefix)) return QString(prefixModes()[prefixes().indexOf(prefix)]); @@ -261,7 +283,7 @@ IrcChannel *Network::newIrcChannel(const QByteArray &channelname) { return newIrcChannel(decodeString(channelname)); } -IrcChannel *Network::ircChannel(QString channelname) { +IrcChannel *Network::ircChannel(QString channelname) const { channelname = channelname.toLower(); if(_ircChannels.contains(channelname)) return _ircChannels[channelname]; @@ -269,7 +291,7 @@ IrcChannel *Network::ircChannel(QString channelname) { return 0; } -IrcChannel *Network::ircChannel(const QByteArray &channelname) { +IrcChannel *Network::ircChannel(const QByteArray &channelname) const { return ircChannel(decodeString(channelname)); } @@ -293,6 +315,7 @@ void Network::setCodecForEncoding(const QByteArray &name) { void Network::setCodecForEncoding(QTextCodec *codec) { _codecForEncoding = codec; + emit codecForEncodingSet(codecForEncoding()); } QByteArray Network::codecForDecoding() const { @@ -306,6 +329,7 @@ void Network::setCodecForDecoding(const QByteArray &name) { void Network::setCodecForDecoding(QTextCodec *codec) { _codecForDecoding = codec; + emit codecForDecodingSet(codecForDecoding()); } QString Network::decodeString(const QByteArray &text) const { diff --git a/src/common/network.h b/src/common/network.h index 80131fac..255d3ec4 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -37,6 +37,9 @@ class SignalProxy; class IrcUser; class IrcChannel; +// defined below! +struct NetworkInfo; + // TODO: ConnectionInfo to propagate and sync the current state of NetworkConnection, encodings etcpp class Network : public SyncableObject { @@ -52,7 +55,7 @@ class Network : public SyncableObject { public: Network(const NetworkId &networkid, QObject *parent = 0); - //virtual ~Network(); + // ~Network(); NetworkId networkId() const; @@ -79,6 +82,9 @@ public: QStringList channels() const; QList serverList() const; + NetworkInfo networkInfo() const; + void setNetworkInfo(const NetworkInfo &); + QString prefixes(); QString prefixModes(); @@ -94,8 +100,8 @@ public: IrcChannel *newIrcChannel(const QString &channelname); IrcChannel *newIrcChannel(const QByteArray &channelname); - IrcChannel *ircChannel(QString channelname); - IrcChannel *ircChannel(const QByteArray &channelname); + IrcChannel *ircChannel(QString channelname) const; + IrcChannel *ircChannel(const QByteArray &channelname) const; QList ircChannels() const; quint32 ircChannelCount() const; @@ -201,8 +207,7 @@ private: QList _serverList; //QVariantMap networkSettings; - //QVariantMap identity; - + QPointer _proxy; void determinePrefixes(); @@ -211,4 +216,16 @@ private: }; +//! Stores all editable information about a network (as opposed to runtime state). +struct NetworkInfo { + NetworkId networkId; + IdentityId identity; + QString networkName; + QByteArray codecForEncoding; + QByteArray codecForDecoding; + QList serverList; + +}; + + #endif diff --git a/src/qtui/bufferwidget.cpp b/src/qtui/bufferwidget.cpp index 14a846fd..4b439687 100644 --- a/src/qtui/bufferwidget.cpp +++ b/src/qtui/bufferwidget.cpp @@ -146,7 +146,7 @@ void BufferWidget::setCurrentBuffer(BufferId bufferId) { } -Network *BufferWidget::currentNetwork() const { +const Network *BufferWidget::currentNetwork() const { if(!selectionModel()) return 0; @@ -154,11 +154,11 @@ Network *BufferWidget::currentNetwork() const { if(!variant.isValid()) return 0; - return Client::network(qVariantValue(variant)); + return Client::network(variant.value()); } void BufferWidget::updateNickSelector() const { - Network *net = currentNetwork(); + const Network *net = currentNetwork(); if(!net) return; @@ -181,7 +181,7 @@ void BufferWidget::updateNickSelector() const { } void BufferWidget::changeNick(const QString &newNick) const { - Network *net = currentNetwork(); + const Network *net = currentNetwork(); if(!net || net->isMyNick(newNick)) return; emit userInput(QString("/nick %1").arg(newNick)); diff --git a/src/qtui/bufferwidget.h b/src/qtui/bufferwidget.h index 317d3eec..da4d886c 100644 --- a/src/qtui/bufferwidget.h +++ b/src/qtui/bufferwidget.h @@ -51,7 +51,7 @@ public: inline QItemSelectionModel *selectionModel() const { return _selectionModel; } void setSelectionModel(QItemSelectionModel *selectionModel); - Network *currentNetwork() const; + const Network *currentNetwork() const; signals: void userInput(QString msg) const; diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 56f7d7e9..12d49157 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -173,9 +173,9 @@ void MainWin::setupViews() { addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QList()); addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList()); - addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList())->hide(); - addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList())->hide(); - addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList())->hide(); + addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList()); + addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList()); + addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList()); ui.menuViews->addSeparator(); } @@ -207,7 +207,7 @@ void MainWin::setupSettingsDlg() { settingsDlg->registerSettingsPage(new FontsSettingsPage(settingsDlg)); settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); + //settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); } void MainWin::connectedToCore() { diff --git a/src/qtui/qtui.pri b/src/qtui/qtui.pri index 5570020b..13a9d6ab 100644 --- a/src/qtui/qtui.pri +++ b/src/qtui/qtui.pri @@ -12,7 +12,7 @@ HDRS += bufferwidget.h chatline-old.h chatwidget.h configwizard.h \ FORMNAMES = identitiesdlg.ui identitieseditdlg.ui networkeditdlg.ui mainwin.ui nickeditdlg.ui serverlistdlg.ui \ servereditdlg.ui coreaccounteditdlg.ui coreconnectdlg.ui bufferviewwidget.ui bufferwidget.ui nicklistwidget.ui settingsdlg.ui \ - buffermgmtpage.ui connectionpage.ui usermgmtpage.ui topicwidget.ui debugconsole.ui + topicwidget.ui debugconsole.ui for(ui, FORMNAMES) { FRMS += ui/$${ui} diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index 62fbdd0a..919ca34c 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -66,7 +66,7 @@ void SettingsDlg::registerSettingsPage(SettingsPage *sp) { treeItems[sp] = item; pages[QString("%1$%2").arg(sp->category(), sp->title())] = sp; // TESTING - //selectPage(sp->category(), sp->title()); + selectPage(sp->category(), sp->title()); } void SettingsDlg::selectPage(const QString &cat, const QString &title) { diff --git a/src/qtui/settingspages/identitiessettingspage.cpp b/src/qtui/settingspages/identitiessettingspage.cpp index ab9dd839..1a2bfc1b 100644 --- a/src/qtui/settingspages/identitiessettingspage.cpp +++ b/src/qtui/settingspages/identitiessettingspage.cpp @@ -368,6 +368,7 @@ void IdentitiesSettingsPage::on_addNick_clicked() { ui.nicknameList->addItem(dlg.nick()); ui.nicknameList->setCurrentRow(ui.nicknameList->count()-1); setWidgetStates(); + widgetHasChanged(); } } diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index 205975f7..2c182552 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -18,11 +18,36 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include + #include "networkssettingspage.h" +#include "client.h" +#include "identity.h" +#include "network.h" + + NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) { ui.setupUi(this); + connectedIcon = QIcon(":/22x22/actions/network-connect"); + disconnectedIcon = QIcon(":/22x22/actions/network-disconnect"); + + currentId = 0; + setEnabled(false); // need a core connection! + setWidgetStates(); + connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); + connect(Client::instance(), SIGNAL(networkAdded(NetworkId)), this, SLOT(clientNetworkAdded(NetworkId))); + connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId))); + connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientIdentityAdded(IdentityId))); + connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientIdentityRemoved(IdentityId))); + + //connect(ui.networkList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); + //connect(ui.serverList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); + + foreach(IdentityId id, Client::identityIds()) { + clientIdentityAdded(id); + } } void NetworksSettingsPage::save() { @@ -31,6 +56,199 @@ void NetworksSettingsPage::save() { } void NetworksSettingsPage::load() { + reset(); + foreach(NetworkId netid, Client::networkIds()) { + clientNetworkAdded(netid); + } + ui.networkList->setCurrentRow(0); + changeState(false); +} + +void NetworksSettingsPage::reset() { + currentId = 0; + ui.networkList->clear(); + networkInfos.clear(); + + /* + foreach(Identity *identity, identities.values()) { + identity->deleteLater(); + } + identities.clear(); + deletedIdentities.clear(); + changedIdentities.clear(); + ui.identityList->clear(); + */ +} + +void NetworksSettingsPage::widgetHasChanged() { + bool changed = testHasChanged(); + if(changed != hasChanged()) changeState(changed); +} +bool NetworksSettingsPage::testHasChanged() { + return false; } + +void NetworksSettingsPage::setWidgetStates() { + // network list + if(ui.networkList->selectedItems().count()) { + NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + ui.detailsBox->setEnabled(true); + ui.renameNetwork->setEnabled(true); + ui.deleteNetwork->setEnabled(true); + ui.connectNow->setEnabled(true); + if(Client::network(id)->isConnected()) { + ui.connectNow->setIcon(disconnectedIcon); + ui.connectNow->setText(tr("Disconnect")); + } else { + ui.connectNow->setIcon(connectedIcon); + ui.connectNow->setText(tr("Connect")); + } + } else { + ui.renameNetwork->setEnabled(false); + ui.deleteNetwork->setEnabled(false); + ui.connectNow->setEnabled(false); + ui.detailsBox->setEnabled(false); + } + // network details + if(ui.serverList->selectedItems().count()) { + ui.editServer->setEnabled(true); + ui.deleteServer->setEnabled(true); + ui.upServer->setEnabled(ui.serverList->currentRow() > 0); + ui.downServer->setEnabled(ui.serverList->currentRow() < ui.serverList->count() - 1); + } else { + ui.editServer->setEnabled(false); + ui.deleteServer->setEnabled(false); + ui.upServer->setEnabled(false); + ui.downServer->setEnabled(false); + } +} + +void NetworksSettingsPage::coreConnectionStateChanged(bool state) { + this->setEnabled(state); + if(state) { + load(); + } else { + // reset + //currentId = 0; + } +} + +QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const { + for(int i = 0; i < ui.networkList->count(); i++) { + QListWidgetItem *item = ui.networkList->item(i); + if(item->data(Qt::UserRole).value() == id) return item; + } + return 0; +} + +void NetworksSettingsPage::clientIdentityAdded(IdentityId id) { + const Identity * identity = Client::identity(id); + connect(identity, SIGNAL(updatedRemotely()), this, SLOT(clientIdentityUpdated())); + + if(id == 1) { + // default identity is always the first one! + ui.identityList->insertItem(0, identity->identityName(), id.toInt()); + } else { + QString name = identity->identityName(); + for(int j = 0; j < ui.identityList->count(); j++) { + if((j>0 || ui.identityList->itemData(0).toInt() != 1) && name.localeAwareCompare(ui.identityList->itemText(j)) < 0) { + ui.identityList->insertItem(j, name, id.toInt()); + widgetHasChanged(); + return; + } + } + // append + ui.identityList->insertItem(ui.identityList->count(), name, id.toInt()); + widgetHasChanged(); + } +} + +void NetworksSettingsPage::clientIdentityUpdated() { + const Identity *identity = qobject_cast(sender()); + if(!identity) { + qWarning() << "NetworksSettingsPage: Invalid identity to update!"; + return; + } + int row = ui.identityList->findData(identity->id().toInt()); + if(row < 0) { + qWarning() << "NetworksSettingsPage: Invalid identity to update!"; + return; + } + if(ui.identityList->itemText(row) != identity->identityName()) { + ui.identityList->setItemText(row, identity->identityName()); + } +} + +void NetworksSettingsPage::clientIdentityRemoved(IdentityId id) { + ui.identityList->removeItem(ui.identityList->findData(id.toInt())); + foreach(NetworkInfo info, networkInfos.values()) { + if(info.identity == id) info.identity = 1; // set to default + } + widgetHasChanged(); +} + + +void NetworksSettingsPage::clientNetworkAdded(NetworkId id) { + insertNetwork(id); + connect(Client::network(id), SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated())); +} + +void NetworksSettingsPage::clientNetworkUpdated() { + const Network *net = qobject_cast(sender()); + if(!net) { + qWarning() << "Update request for unknown network received!"; + return; + } + QListWidgetItem *item = networkItem(net->networkId()); + if(!item) return; + item->setText(net->networkName()); + if(net->isConnected()) { + item->setIcon(connectedIcon); + } else { + item->setIcon(disconnectedIcon); + } +} + + +void NetworksSettingsPage::insertNetwork(NetworkId id) { + NetworkInfo info = Client::network(id)->networkInfo(); + networkInfos[id] = info; + QListWidgetItem *item = new QListWidgetItem(disconnectedIcon, info.networkName); + item->setData(Qt::UserRole, QVariant::fromValue(id)); + ui.networkList->addItem(item); + if(Client::network(id)->isConnected()) { + item->setIcon(connectedIcon); + } else { + item->setIcon(disconnectedIcon); + } + widgetHasChanged(); +} + +void NetworksSettingsPage::displayNetwork(NetworkId id, bool dontsave) { + NetworkInfo info = networkInfos[id]; + ui.serverList->clear(); + foreach(QVariantMap v, info.serverList) { + ui.serverList->addItem(QString("%1:%2").arg(v["Address"].toString()).arg(v["Port"].toUInt())); + } + +} + +/*** Network list ***/ + +void NetworksSettingsPage::on_networkList_itemSelectionChanged() { + if(ui.networkList->selectedItems().count()) { + NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + displayNetwork(id); + } + setWidgetStates(); +} + + + + + + + + diff --git a/src/qtui/settingspages/networkssettingspage.h b/src/qtui/settingspages/networkssettingspage.h index 16e49818..f58d9008 100644 --- a/src/qtui/settingspages/networkssettingspage.h +++ b/src/qtui/settingspages/networkssettingspage.h @@ -21,10 +21,14 @@ #ifndef _NETWORKSSETTINGSPAGE_H_ #define _NETWORKSSETTINGSPAGE_H_ -#include "settingspage.h" +#include +#include "settingspage.h" #include "ui_networkssettingspage.h" +#include "network.h" +#include "types.h" + class NetworksSettingsPage : public SettingsPage { Q_OBJECT @@ -37,9 +41,34 @@ class NetworksSettingsPage : public SettingsPage { void save(); void load(); + private slots: + void widgetHasChanged(); + void setWidgetStates(); + void coreConnectionStateChanged(bool); + + void displayNetwork(NetworkId, bool dontsave = false); + + void clientNetworkAdded(NetworkId); + void clientNetworkUpdated(); + + void clientIdentityAdded(IdentityId); + void clientIdentityRemoved(IdentityId); + void clientIdentityUpdated(); + + void on_networkList_itemSelectionChanged(); + private: Ui::NetworksSettingsPage ui; + NetworkId currentId; + QHash networkInfos; + + QIcon connectedIcon, disconnectedIcon; + + void reset(); + bool testHasChanged(); + void insertNetwork(NetworkId); + QListWidgetItem *networkItem(NetworkId) const; }; diff --git a/src/qtui/settingspages/networkssettingspage.ui b/src/qtui/settingspages/networkssettingspage.ui index c1696a7c..71e29829 100644 --- a/src/qtui/settingspages/networkssettingspage.ui +++ b/src/qtui/settingspages/networkssettingspage.ui @@ -5,132 +5,165 @@ 0 0 - 417 - 416 + 560 + 322 Form - + + + 0 + + + 0 + + + 0 + + + 0 + - - - - - - 1 - 0 - - - - - Network - - - - - Identity - - - - - + + - - - - 0 - 0 - - - - Re&name... - - - :/16x16/actions/oxygen/16x16/actions/edit-rename.png - - - - - - - - 0 - 0 - - - - &Add... - - - :/16x16/actions/oxygen/16x16/actions/list-add.png - - - - 16 - 16 - - - - - - - - - 0 - 0 - - - - De&lete + + + QAbstractItemView::SelectRows - - :/16x16/actions/oxygen/16x16/actions/edit-delete.png + + true - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - false - - - - 0 - 0 - - - - Connect now - - - :/16x16/actions/oxygen/16x16/actions/network-disconnect.png - - + + + + + + 0 + 0 + + + + Re&name... + + + :/16x16/actions/oxygen/16x16/actions/edit-rename.png + + + + + + + + 0 + 0 + + + + &Add... + + + :/16x16/actions/oxygen/16x16/actions/list-add.png + + + + 16 + 16 + + + + + + + + + 0 + 0 + + + + De&lete + + + :/16x16/actions/oxygen/16x16/actions/edit-delete.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + false + + + + 0 + 0 + + + + Connect now + + + :/16x16/actions/oxygen/16x16/actions/network-connect.png + + + + - - + + + + + 10 + 0 + + Network Details + + + + + + Identity: + + + + + + + + 0 + 0 + + + + + + diff --git a/src/qtui/ui/connectionpage.ui b/src/qtui/ui/connectionpage.ui deleted file mode 100644 index 6c8da18c..00000000 --- a/src/qtui/ui/connectionpage.ui +++ /dev/null @@ -1,18 +0,0 @@ - - ConnectionSettingsPage - - - - 0 - 0 - 666 - 457 - - - - - - - - - diff --git a/src/qtui/ui/coresettingspage.ui b/src/qtui/ui/coresettingspage.ui deleted file mode 100644 index 792c87ba..00000000 --- a/src/qtui/ui/coresettingspage.ui +++ /dev/null @@ -1,18 +0,0 @@ - - CoreSettingsPage - - - - 0 - 0 - 693 - 482 - - - - - - - - - diff --git a/src/qtui/ui/settingsdlg.ui b/src/qtui/ui/settingsdlg.ui index 13f57a67..bdf97be5 100644 --- a/src/qtui/ui/settingsdlg.ui +++ b/src/qtui/ui/settingsdlg.ui @@ -67,7 +67,7 @@ QFrame::StyledPanel - QFrame::Raised + QFrame::Sunken diff --git a/src/uisupport/tabcompleter.cpp b/src/uisupport/tabcompleter.cpp index fdd2c68c..b7007d04 100644 --- a/src/uisupport/tabcompleter.cpp +++ b/src/uisupport/tabcompleter.cpp @@ -47,7 +47,7 @@ void TabCompleter::buildCompletionList() { NetworkId networkId = currentIndex.data(NetworkModel::NetworkIdRole).value(); QString channelName = currentIndex.sibling(currentIndex.row(), 0).data().toString(); - Network *network = Client::network(networkId); + const Network *network = Client::network(networkId); if(!network) return; -- 2.20.1