swift
settingsnetworkserverscomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QPushButton>
7 #include <QString>
8 #include <QTableView>
9 
10 #include "ui_settingsnetworkserverscomponent.h"
11 
12 #include "config/buildconfig.h"
14 #include "core/data/globalsetup.h"
15 #include "gui/editors/serverform.h"
16 #include "gui/guiapplication.h"
17 #include "gui/views/serverview.h"
18 #include "misc/logmessage.h"
19 #include "misc/network/server.h"
21 #include "misc/statusmessage.h"
22 #include "misc/statusmessagelist.h"
23 
24 using namespace swift::config;
25 using namespace swift::core;
26 using namespace swift::core::data;
27 using namespace swift::gui;
28 using namespace swift::misc;
29 using namespace swift::misc::network;
30 using namespace swift::misc::aviation;
31 
32 namespace swift::gui::components
33 {
34  CSettingsNetworkServersComponent::CSettingsNetworkServersComponent(QWidget *parent)
35  : QFrame(parent), ui(new Ui::CSettingsNetworkServersComponent)
36  {
37  ui->setupUi(this);
38 
39  // Settings server
40  connect(ui->pb_RemoveServer, &QPushButton::pressed, this,
41  &CSettingsNetworkServersComponent::alterTrafficServer);
42  connect(ui->pb_SaveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::alterTrafficServer);
43  connect(ui->tvp_Servers, &QTableView::clicked, this, &CSettingsNetworkServersComponent::serverSelected);
44  this->reloadSettings();
45  }
46 
48 
49  void CSettingsNetworkServersComponent::reloadSettings()
50  {
51  CServerList serverList(m_trafficNetworkServers.get());
52 
53  // add swift test servers in case we have no servers:
54  // this is debug/bootstrap feature we can continue to test when something goes wrong
55  if (serverList.isEmpty() && CBuildConfig::isLocalDeveloperDebugBuild())
56  {
58  }
59  ui->tvp_Servers->updateContainer(serverList);
60  }
61 
62  void CSettingsNetworkServersComponent::serverSelected(const QModelIndex &index)
63  {
64  const CServer clickedServer = ui->tvp_Servers->at(index);
65  ui->form_Server->setServer(clickedServer);
66  }
67 
68  void CSettingsNetworkServersComponent::alterTrafficServer()
69  {
70  const QObject *sender = QObject::sender();
71  const CServer server(ui->form_Server->getServer());
72 
73  CServerList serverList(m_trafficNetworkServers.getThreadLocal());
74  CStatusMessage msg;
75  if (sender == ui->pb_RemoveServer)
76  {
77  // lenient name removal
78  serverList.removeByName(server.getName());
79  }
80  else if (sender == ui->pb_SaveServer)
81  {
82  CStatusMessageList msgs = server.validate();
83  if (!msgs.isEmpty()) { msgs.addCategories(this); }
84 
85  // error?
86  if (msgs.isFailure())
87  {
88  CLogMessage::preformatted(msgs);
89  return;
90  }
91 
92  serverList.replaceOrAdd(&CServer::getName, server.getName(), server);
93  }
94  else
95  {
96  qFatal("Wrong sender");
97  return;
98  }
99 
100  msg = m_trafficNetworkServers.setAndSave(serverList);
101  this->reloadSettings(); // call manually as local object
102 
103  if (!msg.isEmpty())
104  {
105  msg.addCategories(this);
106  CLogMessage::preformatted(msg);
107  }
108  }
109 } // namespace swift::gui::components
data::CGlobalSetup getGlobalSetup() const
Global setup.
swift::misc::network::CServerList getPredefinedServersPlusHardcodedServers() const
Predefined plus hardcoded.
Definition: globalsetup.cpp:64
CStatusMessage setAndSave(const T &value, qint64 timestamp=0)
Write and save in the same step. Must be called from the thread in which the owner lives.
Definition: valuecache.h:417
const T & getThreadLocal() const
Read the current value.
Definition: valuecache.h:400
T get() const
Get a copy of the current value.
Definition: valuecache.h:408
bool isEmpty() const
Message empty.
bool isEmpty() const
Synonym for empty.
Definition: sequence.h:285
Streamable status message, e.g.
void addCategories(const CLogCategoryList &categories)
Add categories, avoids duplicates.
Status messages, e.g. from Core -> GUI.
bool isFailure() const
Any message is marked as failure.
void addCategories(const CLogCategoryList &categories)
Add some categories to all messages in the list.
Value object encapsulating information of a server.
Definition: server.h:28
Value object encapsulating a list of servers.
Definition: serverlist.h:23
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Core data traits (aka cached values) and classes.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
High level reusable GUI components.
Definition: aboutdialog.cpp:14
GUI related classes.
Free functions in swift::misc.
void clicked(const QModelIndex &index)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * sender() const const