Committing my local state. Mostly still invisible part on the not yet enabled network...
authorManuel Nickschas <sputnick@quassel-irc.org>
Wed, 23 Jan 2008 23:34:42 +0000 (23:34 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 23 Jan 2008 23:34:42 +0000 (23:34 +0000)
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 :)

28 files changed:
Quassel.kdevelop.filelist
dev-notes/obsolete/buffermgmtpage.ui [moved from src/qtui/ui/buffermgmtpage.ui with 100% similarity]
dev-notes/obsolete/builtin_cmds.obsolete.cpp [moved from dev-notes/builtin_cmds.obsolete.cpp with 100% similarity]
dev-notes/obsolete/channelwidget.ui [moved from src/qtui/ui/channelwidget.ui with 100% similarity]
dev-notes/obsolete/nickmodel.cpp [moved from dev-notes/nickmodel.cpp with 100% similarity]
dev-notes/obsolete/nickmodel.h [moved from dev-notes/nickmodel.h with 100% similarity]
dev-notes/obsolete/paulk-mainwindow.ui [moved from dev-notes/paulk-mainwindow.ui with 100% similarity]
dev-notes/obsolete/settingspages.cpp [moved from src/qtui/settingspages.cpp with 100% similarity]
dev-notes/obsolete/settingspages.h [moved from src/qtui/settingspages.h with 100% similarity]
dev-notes/obsolete/usermgmtpage.ui [moved from src/qtui/ui/usermgmtpage.ui with 100% similarity]
dev-notes/sput-ideas.txt [deleted file]
src/client/client.cpp
src/client/client.h
src/common/network.cpp
src/common/network.h
src/qtui/bufferwidget.cpp
src/qtui/bufferwidget.h
src/qtui/mainwin.cpp
src/qtui/qtui.pri
src/qtui/settingsdlg.cpp
src/qtui/settingspages/identitiessettingspage.cpp
src/qtui/settingspages/networkssettingspage.cpp
src/qtui/settingspages/networkssettingspage.h
src/qtui/settingspages/networkssettingspage.ui
src/qtui/ui/connectionpage.ui [deleted file]
src/qtui/ui/coresettingspage.ui [deleted file]
src/qtui/ui/settingsdlg.ui
src/uisupport/tabcompleter.cpp

index 74a943a..79bc51b 100644 (file)
@@ -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/dev-notes/sput-ideas.txt b/dev-notes/sput-ideas.txt
deleted file mode 100644 (file)
index add4e94..0000000
+++ /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...
-
index dd8bd21..cedc042 100644 (file)
@@ -122,18 +122,6 @@ void Client::init() {
 
 /*** public static methods ***/
 
-
-QList<Network *> Client::networks() {
-  return instance()->_networks.values();
-}
-
-Network *Client::network(NetworkId networkid) {
-  if(instance()->_networks.contains(networkid))
-    return instance()->_networks[networkid];
-  else
-    return 0;
-}
-
 QList<BufferInfo> Client::allBufferInfos() {
   QList<BufferInfo> bufferids;
   foreach(Buffer *buffer, buffers()) {
@@ -200,6 +188,17 @@ bool Client::isSynced() {
   return instance()->_syncedToCore;
 }
 
+/*** Network handling ***/
+
+QList<NetworkId> 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<IdentityId> Client::identityIds() {
@@ -284,16 +283,6 @@ void Client::disconnectFromCore() {
   // Clear internal data. Hopefully nothing relies on it at this point.
   _networkModel->clear();
 
-  QHash<BufferId, Buffer *>::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<NetworkId, Network*>::iterator netIter = _networks.begin();
   while(netIter != _networks.end()) {
     Network *net = netIter.value();
@@ -303,6 +292,15 @@ void Client::disconnectFromCore() {
   }
   Q_ASSERT(_networks.isEmpty());
 
+  QHash<BufferId, Buffer *>::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<IdentityId, Identity*>::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
 }
 
index 26e67cc..6daa757 100644 (file)
@@ -54,14 +54,14 @@ public:
   static void destroy();
   static void init(AbstractUi *);
 
-  static QList<Network *> networks();
-  static Network *network(NetworkId networkid);
-
   static QList<BufferInfo> allBufferInfos();
   static QList<Buffer *> buffers();
   static Buffer *buffer(BufferId bufferUid);
   static Buffer *buffer(BufferInfo);
 
+  static QList<NetworkId> networkIds();
+  static const Network * network(NetworkId);
+
   static QList<IdentityId> 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 *);
 
index 982011b..f1cff6c 100644 (file)
@@ -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<QString, IrcUser *> ircuser(_ircUsers);
-//   while (ircuser.hasNext()) {
-//     ircuser.next();
-//     delete ircuser.value();
-//   }
-//}
+/*
+Network::~Network() {
+  QHashIterator<QString, IrcUser *> 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 {
index 80131fa..255d3ec 100644 (file)
@@ -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<QVariantMap> 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<IrcChannel *> ircChannels() const;
   quint32 ircChannelCount() const;
 
@@ -201,8 +207,7 @@ private:
 
   QList<QVariantMap> _serverList;
   //QVariantMap networkSettings;
-  //QVariantMap identity;
-  
+
   QPointer<SignalProxy> _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<QVariantMap> serverList;
+
+};
+
+
 #endif
index 14a846f..4b43968 100644 (file)
@@ -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<NetworkId>(variant));
+  return Client::network(variant.value<NetworkId>());
 }
 
 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));
index 317d3ee..da4d886 100644 (file)
@@ -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;
index 56f7d7e..12d4915 100644 (file)
@@ -173,9 +173,9 @@ void MainWin::setupViews() {
 
   addBufferView(tr("All Buffers"), model, BufferViewFilter::AllNets, QList<NetworkId>());
   addBufferView(tr("All Channels"), model, BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList<NetworkId>());
-  addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList<NetworkId>())->hide();
-  addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList<NetworkId>())->hide();
-  addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList<NetworkId>())->hide();
+  addBufferView(tr("All Queries"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList<NetworkId>());
+  addBufferView(tr("All Networks"), model, BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList<NetworkId>());
+  addBufferView(tr("Full Custom"), model, BufferViewFilter::FullCustom, QList<NetworkId>());
 
   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() {
index 5570020..13a9d6a 100644 (file)
@@ -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}
index 62fbdd0..919ca34 100644 (file)
@@ -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) {
index ab9dd83..1a2bfc1 100644 (file)
@@ -368,6 +368,7 @@ void IdentitiesSettingsPage::on_addNick_clicked() {
     ui.nicknameList->addItem(dlg.nick());
     ui.nicknameList->setCurrentRow(ui.nicknameList->count()-1);
     setWidgetStates();
+    widgetHasChanged();
   }
 }
 
index 205975f..2c18255 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
+#include <QHeaderView>
+
 #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<NetworkId>();
+    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<NetworkId>() == 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<const Identity *>(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<const Network *>(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<NetworkId>(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<NetworkId>();
+    displayNetwork(id);
+  }
+  setWidgetStates();
+}
+
+
+
+
+
+
+
+
index 16e4981..f58d900 100644 (file)
 #ifndef _NETWORKSSETTINGSPAGE_H_
 #define _NETWORKSSETTINGSPAGE_H_
 
-#include "settingspage.h"
+#include <QIcon>
 
+#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<NetworkId, NetworkInfo> networkInfos;
+
+    QIcon connectedIcon, disconnectedIcon;
+
+    void reset();
+    bool testHasChanged();
+    void insertNetwork(NetworkId);
+    QListWidgetItem *networkItem(NetworkId) const;
 
 };
 
index c1696a7..71e2982 100644 (file)
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>417</width>
-    <height>416</height>
+    <width>560</width>
+    <height>322</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QHBoxLayout" >
+   <property name="leftMargin" >
+    <number>0</number>
+   </property>
+   <property name="topMargin" >
+    <number>0</number>
+   </property>
+   <property name="rightMargin" >
+    <number>0</number>
+   </property>
+   <property name="bottomMargin" >
+    <number>0</number>
+   </property>
    <item>
-    <layout class="QGridLayout" >
-     <item row="0" column="0" >
-      <widget class="QTableWidget" name="networkTable" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Expanding" >
-         <horstretch>1</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <column>
-        <property name="text" >
-         <string>Network</string>
-        </property>
-       </column>
-       <column>
-        <property name="text" >
-         <string>Identity</string>
-        </property>
-       </column>
-      </widget>
-     </item>
-     <item row="0" column="1" >
+    <layout class="QHBoxLayout" >
+     <item>
       <layout class="QVBoxLayout" >
        <item>
-        <widget class="QPushButton" name="renameNetwork" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text" >
-          <string>Re&amp;name...</string>
-         </property>
-         <property name="icon" >
-          <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-rename.png</iconset>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="addNetwork" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text" >
-          <string>&amp;Add...</string>
-         </property>
-         <property name="icon" >
-          <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/list-add.png</iconset>
-         </property>
-         <property name="iconSize" >
-          <size>
-           <width>16</width>
-           <height>16</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="deleteNetwork" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text" >
-          <string>De&amp;lete</string>
+        <widget class="QListWidget" name="networkList" >
+         <property name="selectionBehavior" >
+          <enum>QAbstractItemView::SelectRows</enum>
          </property>
-         <property name="icon" >
-          <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-delete.png</iconset>
+         <property name="sortingEnabled" >
+          <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QPushButton" name="connectNow" >
-         <property name="enabled" >
-          <bool>false</bool>
-         </property>
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text" >
-          <string>Connect now</string>
-         </property>
-         <property name="icon" >
-          <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/network-disconnect.png</iconset>
-         </property>
-        </widget>
+        <layout class="QVBoxLayout" >
+         <item>
+          <widget class="QPushButton" name="renameNetwork" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text" >
+            <string>Re&amp;name...</string>
+           </property>
+           <property name="icon" >
+            <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-rename.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="addNetwork" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text" >
+            <string>&amp;Add...</string>
+           </property>
+           <property name="icon" >
+            <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/list-add.png</iconset>
+           </property>
+           <property name="iconSize" >
+            <size>
+             <width>16</width>
+             <height>16</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="deleteNetwork" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text" >
+            <string>De&amp;lete</string>
+           </property>
+           <property name="icon" >
+            <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-delete.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer>
+           <property name="orientation" >
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" >
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="connectNow" >
+           <property name="enabled" >
+            <bool>false</bool>
+           </property>
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text" >
+            <string>Connect now</string>
+           </property>
+           <property name="icon" >
+            <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/network-connect.png</iconset>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </item>
       </layout>
      </item>
-     <item row="1" column="0" colspan="2" >
-      <widget class="QGroupBox" name="groupBox" >
+     <item>
+      <widget class="QGroupBox" name="detailsBox" >
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+         <horstretch>10</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="title" >
         <string>Network Details</string>
        </property>
        <layout class="QVBoxLayout" >
+        <item>
+         <layout class="QHBoxLayout" >
+          <item>
+           <widget class="QLabel" name="label_6" >
+            <property name="text" >
+             <string>Identity:</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QComboBox" name="identityList" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
         <item>
          <widget class="QTabWidget" name="tabWidget" >
           <property name="enabled" >
diff --git a/src/qtui/ui/connectionpage.ui b/src/qtui/ui/connectionpage.ui
deleted file mode 100644 (file)
index 6c8da18..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<ui version="4.0" >
- <class>ConnectionSettingsPage</class>
- <widget class="QWidget" name="ConnectionSettingsPage" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>666</width>
-    <height>457</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/qtui/ui/coresettingspage.ui b/src/qtui/ui/coresettingspage.ui
deleted file mode 100644 (file)
index 792c87b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<ui version="4.0" >
- <class>CoreSettingsPage</class>
- <widget class="QWidget" name="CoreSettingsPage" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>693</width>
-    <height>482</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string/>
-  </property>
- </widget>
- <resources/>
- <connections/>
-</ui>
index 13f57a6..bdf97be 100644 (file)
@@ -67,7 +67,7 @@
             <enum>QFrame::StyledPanel</enum>
            </property>
            <property name="frameShadow" >
-            <enum>QFrame::Raised</enum>
+            <enum>QFrame::Sunken</enum>
            </property>
            <layout class="QVBoxLayout" >
             <item>
index fdd2c68..b7007d0 100644 (file)
@@ -47,7 +47,7 @@ void TabCompleter::buildCompletionList() {
   NetworkId networkId = currentIndex.data(NetworkModel::NetworkIdRole).value<NetworkId>();
   QString channelName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
 
-  Network *network = Client::network(networkId);
+  const Network *network = Client::network(networkId);
   if(!network)
     return;