mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-07 11:05:33 +08:00
Allow to save list of "other servers"
* load / save setting called * fixed handling in server form Follow up of refs #533, related to #545
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include "ui_settingsnetworkserverscomponent.h"
|
||||
#include "blackcore/contextnetwork.h"
|
||||
#include "blackcore/setupreader.h"
|
||||
#include "blackcore/contextapplication.h"
|
||||
#include "blackmisc/logmessage.h"
|
||||
#include "blackmisc/project.h"
|
||||
#include <QModelIndex>
|
||||
@@ -35,10 +36,10 @@ namespace BlackGui
|
||||
ui->setupUi(this);
|
||||
|
||||
// Settings server
|
||||
this->connect(this->ui->pb_SettingsTnServersRemoveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::ps_alterTrafficServer);
|
||||
this->connect(this->ui->pb_SettingsTnServersSaveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::ps_alterTrafficServer);
|
||||
this->connect(this->ui->tvp_SettingsTnServers, &QTableView::clicked, this, &CSettingsNetworkServersComponent::ps_networkServerSelected);
|
||||
|
||||
this->connect(this->ui->pb_RemoveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::ps_alterTrafficServer);
|
||||
this->connect(this->ui->pb_SaveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::ps_alterTrafficServer);
|
||||
this->connect(this->ui->pb_AddServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::ps_alterTrafficServer);
|
||||
this->connect(this->ui->tvp_Servers, &QTableView::clicked, this, &CSettingsNetworkServersComponent::ps_serverSelected);
|
||||
this->ps_reloadSettings();
|
||||
}
|
||||
|
||||
@@ -55,44 +56,67 @@ namespace BlackGui
|
||||
{
|
||||
serverList.push_back(m_setup.get().fsdTestServersPlusHardcodedServers());
|
||||
}
|
||||
this->ui->tvp_SettingsTnServers->updateContainer(serverList);
|
||||
this->ui->tvp_Servers->updateContainer(serverList);
|
||||
}
|
||||
|
||||
void CSettingsNetworkServersComponent::ps_networkServerSelected(const QModelIndex &index)
|
||||
void CSettingsNetworkServersComponent::ps_serverSelected(const QModelIndex &index)
|
||||
{
|
||||
const CServer clickedServer = this->ui->tvp_SettingsTnServers->at(index);
|
||||
const CServer clickedServer = this->ui->tvp_Servers->at(index);
|
||||
this->ui->frp_ServerForm->setServer(clickedServer);
|
||||
}
|
||||
|
||||
void CSettingsNetworkServersComponent::ps_alterTrafficServer()
|
||||
{
|
||||
CServer server = this->ui->frp_ServerForm->getServer();
|
||||
CServer server(this->ui->frp_ServerForm->getServer());
|
||||
CStatusMessageList msgs = server.validate();
|
||||
if (!msgs.isEmpty())
|
||||
{
|
||||
msgs.addCategories(this);
|
||||
CLogMessage::preformatted(msgs);
|
||||
return;
|
||||
}
|
||||
if (!msgs.isEmpty()) { msgs.addCategories(this); }
|
||||
|
||||
CServerList serverList(m_trafficNetworkServers.get());
|
||||
QObject *sender = QObject::sender();
|
||||
if (sender == this->ui->pb_SettingsTnServersRemoveServer)
|
||||
CStatusMessage msg;
|
||||
bool changed = false;
|
||||
if (sender == this->ui->pb_RemoveServer)
|
||||
{
|
||||
serverList.removeIf(&CServer::getName, server.getName());
|
||||
// lenient name removal
|
||||
serverList.removeByName(server.getName());
|
||||
changed = true;
|
||||
}
|
||||
else if (sender == this->ui->pb_SettingsTnServersSaveServer)
|
||||
else if (sender == this->ui->pb_AddServer)
|
||||
{
|
||||
if (!msgs.isEmpty())
|
||||
{
|
||||
CLogMessage::preformatted(msgs);
|
||||
return;
|
||||
}
|
||||
serverList.replaceOrAdd(&CServer::getName, server.getName(), server);
|
||||
changed = true;
|
||||
}
|
||||
else if (sender == this->ui->pb_SaveServer)
|
||||
{
|
||||
if (msgs.isEmpty() && server.hasAddressAndPort())
|
||||
{
|
||||
// update in any case to list before saving if we have a valid form
|
||||
serverList.replaceOrAdd(&CServer::getName, server.getName(), server);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
CStatusMessage msg = m_trafficNetworkServers.set(serverList);
|
||||
if (msg.isWarningOrAbove())
|
||||
if (changed)
|
||||
{
|
||||
msg = m_trafficNetworkServers.set(serverList);
|
||||
this->ps_reloadSettings(); // call manually as local object
|
||||
}
|
||||
|
||||
if (msgs.isEmpty() && sender == this->ui->pb_SaveServer)
|
||||
{
|
||||
msg = this->getIContextApplication()->saveSettings(m_trafficNetworkServers.getKey());
|
||||
}
|
||||
|
||||
if (!msg.isEmpty())
|
||||
{
|
||||
msg.addCategories(this);
|
||||
CLogMessage::preformatted(msg);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace BlackGui
|
||||
void ps_reloadSettings();
|
||||
|
||||
//! Network server selected
|
||||
void ps_networkServerSelected(const QModelIndex &index);
|
||||
void ps_serverSelected(const QModelIndex &index);
|
||||
|
||||
//! Alter traffic server
|
||||
void ps_alterTrafficServer();
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>260</width>
|
||||
<width>282</width>
|
||||
<height>334</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -36,7 +36,7 @@
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="BlackGui::Views::CServerView" name="tvp_SettingsTnServers">
|
||||
<widget class="BlackGui::Views::CServerView" name="tvp_Servers">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
|
||||
</property>
|
||||
@@ -102,7 +102,7 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pb_SettingsTnServersSaveServer">
|
||||
<widget class="QPushButton" name="pb_SaveServer">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -110,12 +110,19 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
<string>save</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pb_SettingsTnServersRemoveServer">
|
||||
<widget class="QPushButton" name="pb_AddServer">
|
||||
<property name="text">
|
||||
<string>add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pb_RemoveServer">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -123,7 +130,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove</string>
|
||||
<string>remove</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -34,15 +34,32 @@ namespace BlackGui
|
||||
|
||||
void CServerListSelector::setItemStrings(const CServerList &servers)
|
||||
{
|
||||
QString currentlySelected(this->currentText());
|
||||
int index = -1;
|
||||
this->m_servers = servers;
|
||||
this->m_items.clear();
|
||||
foreach(CServer server, servers)
|
||||
for (const CServer &server : servers)
|
||||
{
|
||||
QString d(server.getName() + ": " + server.getDescription());
|
||||
m_items.append(d);
|
||||
if (!currentlySelected.isEmpty() && index < 0 && d == currentlySelected)
|
||||
{
|
||||
index = m_items.size() - 1;
|
||||
}
|
||||
}
|
||||
this->clear(); // ui
|
||||
this->addItems(m_items);
|
||||
|
||||
// reselect
|
||||
if (this->m_items.isEmpty()) { return; }
|
||||
if (this->m_items.size() == 1)
|
||||
{
|
||||
this->setCurrentIndex(0);
|
||||
}
|
||||
else if (index >= 0)
|
||||
{
|
||||
this->setCurrentIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -36,15 +36,12 @@ namespace BlackGui
|
||||
BlackMisc::Network::CServer currentServer() const;
|
||||
|
||||
private:
|
||||
|
||||
//! Build the item string descriptions
|
||||
void setItemStrings(const BlackMisc::Network::CServerList &servers);
|
||||
|
||||
BlackMisc::Network::CServerList m_servers; //!< corresponding servers
|
||||
QStringList m_items; //!< items strings
|
||||
|
||||
QStringList m_items; //!< items strings
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif // guard
|
||||
|
||||
@@ -28,6 +28,20 @@ namespace BlackMisc
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CServerList::removeByName(const QString &name)
|
||||
{
|
||||
if (name.isEmpty()) { return false; }
|
||||
const CServerList copy(*this);
|
||||
bool removed = false;
|
||||
for (const CServer &server : copy)
|
||||
{
|
||||
if (!server.matchesName(name)) { continue; }
|
||||
this->remove(server);
|
||||
removed = true;
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
|
||||
bool CServerList::containsAddressPort(const CServer &server)
|
||||
{
|
||||
for (const CServer &s : *this)
|
||||
|
||||
@@ -38,6 +38,9 @@ namespace BlackMisc
|
||||
//! Contains name
|
||||
bool containsName(const QString &name) const;
|
||||
|
||||
//! Remove by name
|
||||
bool removeByName(const QString &name);
|
||||
|
||||
//! Contains server with same address/port
|
||||
bool containsAddressPort(const CServer &server);
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ void SwiftGuiStd::init(const CRuntimeConfig &runtimeConfig)
|
||||
this->setObjectName("SwiftGuiStd");
|
||||
this->initStyleSheet();
|
||||
|
||||
|
||||
// with frameless window, we shift menu and statusbar into central widget
|
||||
// http://stackoverflow.com/questions/18316710/frameless-and-transparent-window-qt5
|
||||
if (this->isFrameless())
|
||||
@@ -72,6 +73,7 @@ void SwiftGuiStd::init(const CRuntimeConfig &runtimeConfig)
|
||||
// context
|
||||
this->createRuntime(runtimeConfig, this);
|
||||
CEnableForRuntime::setRuntimeForComponents(this->getRuntime(), this);
|
||||
this->getIContextApplication()->loadSettings();
|
||||
|
||||
// info bar and status bar
|
||||
this->m_statusBar.initStatusBar(this->ui->sb_MainStatusBar);
|
||||
|
||||
Reference in New Issue
Block a user