swift
pilotform.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "pilotform.h"
5 
6 #include <QCompleter>
7 #include <QStyledItemDelegate>
8 
9 #include "ui_pilotform.h"
10 
11 #include "config/buildconfig.h"
13 #include "gui/guiapplication.h"
14 #include "gui/guiutility.h"
15 #include "gui/uppercasevalidator.h"
17 #include "misc/network/user.h"
18 
19 using namespace swift::config;
20 using namespace swift::misc;
21 using namespace swift::misc::aviation;
22 using namespace swift::misc::network;
23 using namespace swift::gui::components;
24 
25 namespace swift::gui::editors
26 {
27  CPilotForm::CPilotForm(QWidget *parent) : CForm(parent), ui(new Ui::CPilotForm)
28  {
29  ui->setupUi(this);
30  ui->lblp_HomeAirport->setToolTips("ok", "wrong");
31  ui->lblp_Id->setToolTips("ok", "wrong");
32  ui->lblp_Password->setToolTips("ok", "wrong");
33  ui->lblp_RealName->setToolTips("ok", "wrong");
34 
35  connect(ui->pb_UnhidePassword, &QPushButton::clicked, this, &CPilotForm::unhidePassword);
36  connect(ui->le_Id, &QLineEdit::editingFinished, this, &CPilotForm::doValidation);
37  connect(ui->comp_HomeAirport, &CAirportSmallCompleter::editingFinished, this, &CPilotForm::doValidation);
38  connect(ui->le_Password, &QLineEdit::editingFinished, this, &CPilotForm::doValidation);
39  connect(ui->le_RealName, &QLineEdit::editingFinished, this, &CPilotForm::doValidation);
40  }
41 
43 
45  {
46  if (vatsim == m_vatsim) { return; }
47  m_vatsim = vatsim;
48  ui->le_Id->setValidator(vatsim ? m_vatsimIntValidator.data() : nullptr);
49  }
50 
52  {
53  CUser user = CUser(ui->le_Id->text().trimmed(), CUser::beautifyRealName(ui->le_RealName->text()), "",
54  ui->le_Password->text());
55  user.setHomeBase(ui->comp_HomeAirport->getAirportIcaoCode());
56  return user;
57  }
58 
59  void CPilotForm::setUser(const CUser &user)
60  {
61  ui->le_Id->setText(user.getId());
62  ui->le_Password->setText(user.getPassword());
63  ui->le_RealName->setText(user.getRealName());
64  if (user.hasHomeBase()) { ui->comp_HomeAirport->setAirportIcaoCode(user.getHomeBase()); }
65  this->validate();
66  }
67 
69  {
70  ui->le_Id->clear();
71  ui->le_Password->clear();
72  ui->comp_HomeAirport->clear();
73  ui->le_RealName->clear();
74 
75  ui->lblp_Id->setTicked(false);
76  ui->lblp_HomeAirport->setTicked(false);
77  ui->lblp_Password->setTicked(false);
78  ui->lblp_RealName->setTicked(false);
79  }
80 
81  void CPilotForm::setReadOnly(bool readonly)
82  {
83  ui->comp_HomeAirport->setReadOnly(readonly);
84  ui->le_Id->setReadOnly(readonly);
85  ui->le_Password->setReadOnly(readonly);
86  ui->le_RealName->setReadOnly(readonly);
87  ui->lblp_Id->setVisible(!readonly);
88  ui->lblp_HomeAirport->setVisible(!readonly);
89  ui->lblp_Password->setVisible(!readonly);
90  ui->lblp_RealName->setVisible(!readonly);
91  this->forceStyleSheetUpdate();
92  }
93 
95  {
96  Q_UNUSED(nested);
97 
98  CStatusMessageList msgs;
99  const CUser user(this->getUser());
100  const bool validId = m_vatsim ? user.hasValidVatsimId() : user.hasId();
101  ui->lblp_Id->setTicked(validId);
102  if (!validId) { msgs.push_back(CStatusMessage(this).validationError(u"Invalid id")); }
103 
104  // check against user and if the data entry contains a valid code (or is empty)
105  const bool validHomeAirport =
106  user.hasValidOrEmptyHomeBase() &&
107  (ui->comp_HomeAirport->isEmpty() || ui->comp_HomeAirport->getAirportIcaoCode().hasValidIcaoCode(false));
108  ui->lblp_HomeAirport->setTicked(validHomeAirport);
109  if (!validHomeAirport) { msgs.push_back(CStatusMessage(this).validationError(u"Wromg home airport")); }
110 
111  const bool validCredentials = user.hasCredentials();
112  ui->lblp_Password->setTicked(validCredentials);
113  if (!validCredentials) { msgs.push_back(CStatusMessage(this).validationError(u"Invalid credentials")); }
114 
115  const bool validRealName = user.hasRealName();
116  ui->lblp_RealName->setTicked(validRealName);
117  if (!validRealName) { msgs.push_back(CStatusMessage(this).validationError(u"Invalid real name")); }
118 
119  return msgs;
120  }
121 
122  void CPilotForm::unhidePassword() { CGuiUtility::tempUnhidePassword(ui->le_Password); }
123 
124  void CPilotForm::doValidation()
125  {
126  // ui->comp_HomeAirport->clearIfInvalidCode(false);
127  this->validate();
128  }
129 } // namespace swift::gui::editors
static void tempUnhidePassword(QLineEdit *lineEdit, int unhideMs=5000)
Temp. unhide password.
Definition: guiutility.cpp:483
Form base class.
Definition: form.h:27
void forceStyleSheetUpdate()
Forces a stylesheet update.
Definition: form.cpp:47
Pilot form (name, homebase)
Definition: pilotform.h:26
void clear()
Clear values.
Definition: pilotform.cpp:68
swift::misc::network::CUser getUser() const
Values as user.
Definition: pilotform.cpp:51
void setVatsimValidation(bool vatsim)
Set VATSIM validation mode.
Definition: pilotform.cpp:44
void setUser(const swift::misc::network::CUser &user)
Set user values.
Definition: pilotform.cpp:59
virtual swift::misc::CStatusMessageList validate(bool nested=false) const
Validate, empty list means OK.
Definition: pilotform.cpp:94
virtual void setReadOnly(bool readonly)
Set editable.
Definition: pilotform.cpp:81
virtual ~CPilotForm()
Destructor.
Definition: pilotform.cpp:42
Derived & validationError(const char16_t(&format)[N])
Set the severity to error, providing a format string, and adding the validation category.
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of a user.
Definition: user.h:28
const aviation::CAirportIcaoCode & getHomeBase() const
Homebase.
Definition: user.h:134
bool hasValidOrEmptyHomeBase() const
Has valid or empty home base?
Definition: user.cpp:129
const QString & getPassword() const
Get password.
Definition: user.h:65
bool hasRealName() const
Valid real name?
Definition: user.h:80
const QString & getRealName() const
Get full name.
Definition: user.h:59
const QString & getId() const
Get id.
Definition: user.h:119
void setHomeBase(const aviation::CAirportIcaoCode &homebase)
Set homebase.
Definition: user.h:137
bool hasId() const
Valid id?
Definition: user.h:83
bool hasHomeBase() const
Has home base?
Definition: user.h:92
bool hasValidVatsimId() const
Has a valid VATSIM id?
Definition: user.h:86
bool hasCredentials() const
Valid credentials?
Definition: user.h:77
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Free functions in swift::misc.