+
+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();
+}
+
+
+
+
+
+
+
+