Ref T219, changed login component so VATSIM and other server data can use values from pilot form

* also "other servers" can have homebase
* use pilot form
This commit is contained in:
Klaus Basan
2018-01-07 03:22:06 +01:00
parent 4567138e36
commit c2c6ea3ca4
3 changed files with 392 additions and 528 deletions

View File

@@ -7,7 +7,16 @@
* contained in the LICENSE file. * contained in the LICENSE file.
*/ */
#include "blackconfig/buildconfig.h" #include "ui_logincomponent.h"
#include "logincomponent.h"
#include "serverlistselector.h"
#include "dbquickmappingwizard.h"
#include "blackgui/editors/serverform.h"
#include "blackgui/editors/pilotform.h"
#include "blackgui/guiapplication.h"
#include "blackgui/loginmodebuttons.h"
#include "blackgui/ticklabel.h"
#include "blackgui/uppercasevalidator.h"
#include "blackcore/context/contextaudio.h" #include "blackcore/context/contextaudio.h"
#include "blackcore/context/contextnetwork.h" #include "blackcore/context/contextnetwork.h"
#include "blackcore/context/contextownaircraft.h" #include "blackcore/context/contextownaircraft.h"
@@ -16,14 +25,6 @@
#include "blackcore/data/globalsetup.h" #include "blackcore/data/globalsetup.h"
#include "blackcore/network.h" #include "blackcore/network.h"
#include "blackcore/simulator.h" #include "blackcore/simulator.h"
#include "logincomponent.h"
#include "serverlistselector.h"
#include "dbquickmappingwizard.h"
#include "blackgui/editors/serverform.h"
#include "blackgui/guiapplication.h"
#include "blackgui/loginmodebuttons.h"
#include "blackgui/ticklabel.h"
#include "blackgui/uppercasevalidator.h"
#include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/airlineicaocode.h"
#include "blackmisc/aviation/airporticaocode.h" #include "blackmisc/aviation/airporticaocode.h"
@@ -34,7 +35,7 @@
#include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/statusmessage.h" #include "blackmisc/statusmessage.h"
#include "ui_logincomponent.h" #include "blackconfig/buildconfig.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QGroupBox> #include <QGroupBox>
@@ -45,8 +46,6 @@
#include <QTabWidget> #include <QTabWidget>
#include <QTimer> #include <QTimer>
#include <QToolButton> #include <QToolButton>
#include <QCompleter>
#include <QStyledItemDelegate>
#include <QStringBuilder> #include <QStringBuilder>
#include <QtGlobal> #include <QtGlobal>
@@ -75,23 +74,25 @@ namespace BlackGui
ui(new Ui::CLoginComponent) ui(new Ui::CLoginComponent)
{ {
ui->setupUi(this); ui->setupUi(this);
m_logoffCountdownTimer = new QTimer(this); m_logoffCountdownTimer.setObjectName("CLoginComponent:m_logoffCountdownTimer");
m_logoffCountdownTimer->setObjectName("CLoginComponent:m_logoffCountdownTimer");
ui->pb_LogoffTimeout->setMaximum(LogoffIntervalSeconds); ui->pb_LogoffTimeout->setMaximum(LogoffIntervalSeconds);
ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds); ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds);
connect(m_logoffCountdownTimer, &QTimer::timeout, this, &CLoginComponent::logoffCountdown); connect(&m_logoffCountdownTimer, &QTimer::timeout, this, &CLoginComponent::logoffCountdown);
ui->tw_Network->setCurrentIndex(0);
ui->selector_AircraftIcao->displayWithIcaoDescription(false); ui->selector_AircraftIcao->displayWithIcaoDescription(false);
ui->selector_AirlineIcao->displayWithIcaoDescription(false); ui->selector_AirlineIcao->displayWithIcaoDescription(false);
ui->selector_AircraftIcao->displayMode(CDbAircraftIcaoSelectorComponent::DisplayIcaoAndId); ui->selector_AircraftIcao->displayMode(CDbAircraftIcaoSelectorComponent::DisplayIcaoAndId);
ui->selector_AirlineIcao->displayMode(CDbAirlineIcaoSelectorComponent::DisplayVDesignatorAndId); ui->selector_AirlineIcao->displayMode(CDbAirlineIcaoSelectorComponent::DisplayVDesignatorAndId);
this->setOkButtonString(false); connect(ui->comp_OtherServers, &CServerListSelector::serverChanged, this, &CLoginComponent::onSelectedServerChanged);
connect(ui->comp_VatsimServers, &CServerListSelector::serverChanged, this, &CLoginComponent::onSelectedServerChanged);
connect(ui->tw_Network, &QTabWidget::currentChanged, this, &CLoginComponent::onServerTabWidgetChanged);
connect(ui->bb_OkCancel, &QDialogButtonBox::rejected, this, &CLoginComponent::loginCancelled); connect(ui->bb_OkCancel, &QDialogButtonBox::rejected, this, &CLoginComponent::loginCancelled);
connect(ui->bb_OkCancel, &QDialogButtonBox::accepted, this, &CLoginComponent::toggleNetworkConnection); connect(ui->bb_OkCancel, &QDialogButtonBox::accepted, this, &CLoginComponent::toggleNetworkConnection);
connect(ui->pb_OtherServersGotoSettings, &QPushButton::pressed, this, &CLoginComponent::requestNetworkSettings); connect(ui->pb_OtherServersGotoSettings, &QPushButton::pressed, this, &CLoginComponent::requestNetworkSettings);
connect(ui->tb_MappingWizard, &QToolButton::clicked, this, &CLoginComponent::mappingWizard); connect(ui->tb_MappingWizard, &QToolButton::clicked, this, &CLoginComponent::mappingWizard);
connect(ui->tb_UnhidePassword, &QToolButton::clicked, this, &CLoginComponent::unhidePassword);
ui->comp_FsdDetails->showEnableInfo(true); ui->comp_FsdDetails->showEnableInfo(true);
ui->comp_FsdDetails->setFsdSetupEnabled(false); ui->comp_FsdDetails->setFsdSetupEnabled(false);
@@ -100,30 +101,16 @@ namespace BlackGui
ui->lblp_AirlineIcao->setToolTips("ok", "wrong"); ui->lblp_AirlineIcao->setToolTips("ok", "wrong");
ui->lblp_AircraftIcao->setToolTips("ok", "wrong"); ui->lblp_AircraftIcao->setToolTips("ok", "wrong");
ui->lblp_Callsign->setToolTips("ok", "wrong"); ui->lblp_Callsign->setToolTips("ok", "wrong");
ui->lblp_VatsimHomeAirport->setToolTips("ok", "wrong");
ui->lblp_VatsimId->setToolTips("ok", "wrong");
ui->lblp_VatsimPassword->setToolTips("ok", "wrong");
ui->lblp_VatsimRealName->setToolTips("ok", "wrong");
//! \fixme hardcoded padding, could maybe goto to stylesheet file //! \fixme hardcoded padding, could maybe goto to stylesheet file
ui->bb_OkCancel->button(QDialogButtonBox::Ok)->setStyleSheet("padding-left: 3px; padding-right: 3px;"); ui->bb_OkCancel->button(QDialogButtonBox::Ok)->setStyleSheet("padding-left: 3px; padding-right: 3px;");
// Stored data // Stored data
this->loadRememberedVatsimData(); this->loadRememberedUserData();
// Remark: The validators affect the signals such as returnPressed, editingFinished // Remark: The validators affect the signals such as returnPressed, editingFinished
// So I use no ranges in the CUpperCaseValidators, as this disables the signals for invalid values // So I use no ranges in the CUpperCaseValidators, as this disables the signals for invalid values
// VATSIM
ui->le_VatsimId->setValidator(new QIntValidator(100000, 9999999, this));
connect(ui->le_VatsimId, &QLineEdit::editingFinished, this, &CLoginComponent::validateVatsimValues);
ui->le_VatsimHomeAirport->setValidator(new CUpperCaseValidator(this));
connect(ui->le_VatsimHomeAirport, &QLineEdit::editingFinished, this, &CLoginComponent::validateVatsimValues);
connect(ui->le_VatsimPassword, &QLineEdit::editingFinished, this, &CLoginComponent::validateVatsimValues);
connect(ui->le_VatsimRealName, &QLineEdit::editingFinished, this, &CLoginComponent::validateVatsimValues);
// own aircraft // own aircraft
ui->le_Callsign->setMaxLength(LogoffIntervalSeconds); ui->le_Callsign->setMaxLength(LogoffIntervalSeconds);
ui->le_Callsign->setValidator(new CUpperCaseValidator(this)); ui->le_Callsign->setValidator(new CUpperCaseValidator(this));
@@ -141,19 +128,18 @@ namespace BlackGui
connect(sGui->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this, &CLoginComponent::simulatorModelChanged); connect(sGui->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this, &CLoginComponent::simulatorModelChanged);
} }
// server and UI elements when in disconnect // server and UI elements when in disconnect state
ui->frp_CurrentServer->setReadOnly(true); ui->frp_CurrentServer->setReadOnly(true);
ui->frp_CurrentServer->showPasswordField(false); ui->frp_CurrentServer->showPasswordField(false);
ui->gbp_LoginWithMode->setReadOnly(true);
ui->tb_Timeout->setIcon(m_iconPause); ui->tb_Timeout->setIcon(m_iconPause);
connect(ui->tb_Timeout, &QToolButton::clicked, this, &CLoginComponent::toggleTimeout); connect(ui->tb_Timeout, &QToolButton::clicked, this, &CLoginComponent::toggleTimeout);
// web service data // web service data
connect(sGui->getIContextNetwork(), &IContextNetwork::webServiceDataRead, this, &CLoginComponent::onWebServiceDataRead); connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this, &CLoginComponent::onWebServiceDataRead);
// inital setup, if data already available // inital setup, if data already available
this->validateAircraftValues(); this->validateAircraftValues();
this->validateVatsimValues(); ui->editor_Pilot->validate();
this->onWebServiceDataRead(CEntityFlags::VatsimDataFile, CEntityFlags::ReadFinished, -1); this->onWebServiceDataRead(CEntityFlags::VatsimDataFile, CEntityFlags::ReadFinished, -1);
CServerList otherServers(m_otherTrafficNetworkServers.getThreadLocal()); CServerList otherServers(m_otherTrafficNetworkServers.getThreadLocal());
@@ -165,11 +151,10 @@ namespace BlackGui
} }
ui->comp_OtherServers->setServers(otherServers); ui->comp_OtherServers->setServers(otherServers);
// init completers if data are already available connect(ui->pb_copyCredentialsVatsim, &QPushButton::clicked, this, &CLoginComponent::copyCredentialsToPilot);
if (sGui && sGui->hasWebDataServices()) connect(ui->pb_CopyCredentialsOtherServers, &QPushButton::clicked, this, &CLoginComponent::copyCredentialsToPilot);
{ this->setUiLoginState(false);
this->initCompleters(CEntityFlags::AircraftIcaoEntity | CEntityFlags::AirlineIcaoEntity | CEntityFlags::AirportEntity);
}
} }
CLoginComponent::~CLoginComponent() CLoginComponent::~CLoginComponent()
@@ -177,12 +162,12 @@ namespace BlackGui
void CLoginComponent::mainInfoAreaChanged(const QWidget *currentWidget) void CLoginComponent::mainInfoAreaChanged(const QWidget *currentWidget)
{ {
m_logoffCountdownTimer->stop(); // in any case stop the timer m_logoffCountdownTimer.stop(); // in any case stop the timer
if (currentWidget != this && currentWidget != this->parentWidget()) if (currentWidget != this && currentWidget != this->parentWidget())
{ {
const bool wasVisible = m_visible; const bool wasVisible = m_visible;
m_visible = false; m_visible = false;
m_logoffCountdownTimer->stop(); m_logoffCountdownTimer.stop();
if (wasVisible) if (wasVisible)
{ {
@@ -203,8 +188,7 @@ namespace BlackGui
{ {
m_visible = true; m_visible = true;
const bool isConnected = sGui->getIContextNetwork()->isConnected(); const bool isConnected = sGui->getIContextNetwork()->isConnected();
this->setGuiVisibility(isConnected); this->setUiLoginState(isConnected);
this->setOkButtonString(isConnected);
if (isConnected) { this->startLogoffTimerCountdown(); } if (isConnected) { this->startLogoffTimerCountdown(); }
} }
} }
@@ -212,7 +196,7 @@ namespace BlackGui
void CLoginComponent::loginCancelled() void CLoginComponent::loginCancelled()
{ {
m_logoffCountdownTimer->stop(); m_logoffCountdownTimer.stop();
ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds); ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds);
emit this->loginOrLogoffCancelled(); emit this->loginOrLogoffCancelled();
} }
@@ -225,7 +209,11 @@ namespace BlackGui
return; return;
} }
const bool isConnected = sGui && sGui->getIContextNetwork()->isConnected(); const bool isConnected = sGui && sGui->getIContextNetwork()->isConnected();
const bool vatsimLogin = (ui->tw_Network->currentWidget() == ui->pg_NetworkVatsim); const bool vatsimLogin = this->isVatsimNetworkTabSelected();
ui->editor_Pilot->setVatsimValidation(vatsimLogin);
this->setUiLoginState(isConnected);
CServer currentServer; // used for login CServer currentServer; // used for login
CSimulatedAircraft ownAircraft; // used own aircraft CSimulatedAircraft ownAircraft; // used own aircraft
CStatusMessage msg; CStatusMessage msg;
@@ -237,9 +225,10 @@ namespace BlackGui
return; return;
} }
if (vatsimLogin && !this->validateVatsimValues()) const CStatusMessageList pilotMsgs = ui->editor_Pilot->validate();
if (pilotMsgs.isFailure())
{ {
CLogMessage(this).validationWarning("Invalid VATSIM data, login not possible"); CLogMessage(this).validationWarning("Invalid pilot data, login not possible");
return; return;
} }
@@ -248,9 +237,7 @@ namespace BlackGui
this->updateOwnAircaftIcaoValuesFromGuiValues(); this->updateOwnAircaftIcaoValuesFromGuiValues();
// Login mode // Login mode
const INetwork::LoginMode mode = ui->gbp_LoginMode->getLoginMode(); const INetwork::LoginMode mode = ui->frp_LoginMode->getLoginMode();
ui->gbp_LoginWithMode->setLoginMode(mode);
ui->gbp_LoginWithMode->setReadOnly(true); // need to be set after each change
switch (mode) switch (mode)
{ {
case INetwork::LoginStealth: case INetwork::LoginStealth:
@@ -265,16 +252,11 @@ namespace BlackGui
} }
// Server // Server
if (vatsimLogin) currentServer = vatsimLogin ?
{ this->getCurrentVatsimServer() :
currentServer = this->getCurrentVatsimServer(); this->getCurrentOtherServer();
const CUser vatsimUser = this->getUserFromVatsimGuiValues(); const CUser user = this->getUserFromPilotGuiValues();
currentServer.setUser(vatsimUser); currentServer.setUser(user);
}
else
{
currentServer = this->getCurrentOtherServer();
}
// FSD setup, then override // FSD setup, then override
if (ui->comp_FsdDetails->isFsdSetupEnabled()) if (ui->comp_FsdDetails->isFsdSetupEnabled())
@@ -325,10 +307,8 @@ namespace BlackGui
} }
} }
void CLoginComponent::onWebServiceDataRead(int entityInt, int stateInt, int number) void CLoginComponent::onWebServiceDataRead(CEntityFlags::Entity entity, CEntityFlags::ReadState state, int number)
{ {
const CEntityFlags::EntityFlag entity = static_cast<CEntityFlags::EntityFlag>(entityInt);
const CEntityFlags::ReadState state = static_cast<CEntityFlags::ReadState>(stateInt);
if (state != CEntityFlags::ReadFinished) { return; } if (state != CEntityFlags::ReadFinished) { return; }
Q_UNUSED(number); Q_UNUSED(number);
@@ -338,37 +318,71 @@ namespace BlackGui
if (vatsimFsdServers.isEmpty()) { return; } if (vatsimFsdServers.isEmpty()) { return; }
vatsimFsdServers.sortBy(&CServer::getName); vatsimFsdServers.sortBy(&CServer::getName);
const CServer currentServer = m_lastVatsimServer.get(); const CServer currentServer = m_lastVatsimServer.get();
ui->comp_VatsimServer->setServers(vatsimFsdServers, true); ui->comp_VatsimServers->setServers(vatsimFsdServers, true);
ui->comp_VatsimServer->preSelect(currentServer.getName()); ui->comp_VatsimServers->preSelect(currentServer.getName());
}
else
{
this->initCompleters(entity);
} }
} }
void CLoginComponent::loadRememberedVatsimData() void CLoginComponent::loadRememberedUserData()
{ {
const CServer lastServer = m_lastVatsimServer.get(); const CServer lastServer = m_lastServer.get();
if (!lastServer.isNull())
{
ui->tw_Network->setCurrentWidget(
lastServer.getServerType() == CServer::FSDServerVatsim ?
ui->pg_NetworkVatsim : ui->pg_OtherServers);
}
const CUser lastUser = lastServer.getUser(); const CUser lastUser = lastServer.getUser();
ui->editor_Pilot->setUser(lastUser);
if (lastUser.hasCallsign()) if (lastUser.hasCallsign())
{ {
ui->le_Callsign->setText(lastUser.getCallsign().asString()); ui->le_Callsign->setText(lastUser.getCallsign().asString());
ui->le_VatsimId->setText(lastUser.getId());
ui->le_VatsimPassword->setText(lastUser.getPassword());
ui->le_VatsimHomeAirport->setText(lastUser.getHomeBase().asString());
ui->le_VatsimRealName->setText(lastUser.getRealName());
} }
else if (CBuildConfig::isLocalDeveloperDebugBuild()) else if (CBuildConfig::isLocalDeveloperDebugBuild())
{ {
ui->le_Callsign->setText("SWIFT"); ui->le_Callsign->setText("SWIFT");
ui->le_VatsimId->setText("1288459");
ui->le_VatsimPassword->setText("4769");
ui->le_VatsimHomeAirport->setText("LOWI");
ui->le_VatsimRealName->setText("Black Swift");
} }
} }
void CLoginComponent::copyCredentialsToPilot()
{
const QObject *s = QObject::sender();
CServer server;
if (s == ui->pb_CopyCredentialsOtherServers)
{
server = this->getCurrentOtherServer();
}
else if (s == ui->pb_copyCredentialsVatsim)
{
// the VATSIM server selected has no valid user credentials
server = m_lastVatsimServer.get();
}
else
{
return;
}
ui->editor_Pilot->setUser(server.getUser(), true);
}
void CLoginComponent::onSelectedServerChanged(const CServer &server)
{
if (!m_updatePilotOnServerChanges) { return; }
const bool vatsim = this->isVatsimNetworkTabSelected();
const CUser user = vatsim ? this->getCurrentVatsimServer().getUser() : server.getUser();
ui->editor_Pilot->setUser(user, true);
}
void CLoginComponent::onServerTabWidgetChanged(int index)
{
Q_UNUSED(index);
if (!m_updatePilotOnServerChanges) { return; }
const bool vatsim = this->isVatsimNetworkTabSelected();
const CServer server = vatsim ? this->getCurrentVatsimServer() : this->getCurrentOtherServer();
ui->editor_Pilot->setUser(server.getUser(), true);
}
CLoginComponent::CGuiAircraftValues CLoginComponent::getAircraftValuesFromGui() const CLoginComponent::CGuiAircraftValues CLoginComponent::getAircraftValuesFromGui() const
{ {
CGuiAircraftValues values; CGuiAircraftValues values;
@@ -380,21 +394,10 @@ namespace BlackGui
return values; return values;
} }
CLoginComponent::CVatsimValues CLoginComponent::getVatsimValuesFromGui() const CUser CLoginComponent::getUserFromPilotGuiValues() const
{ {
CVatsimValues values; CUser user = ui->editor_Pilot->getUser();
values.vatsimHomeAirport = ui->le_VatsimHomeAirport->text().trimmed().toUpper(); user.setCallsign(this->getCallsignFromGui());
values.vatsimId = ui->le_VatsimId->text().trimmed();
values.vatsimPassword = ui->le_VatsimPassword->text().trimmed();
values.vatsimRealName = ui->le_VatsimRealName->text().simplified().trimmed();
return values;
}
CUser CLoginComponent::getUserFromVatsimGuiValues() const
{
const CVatsimValues values = this->getVatsimValuesFromGui();
CUser user(values.vatsimId, values.vatsimRealName, "", values.vatsimPassword, getCallsignFromGui());
user.setHomeBase(values.vatsimHomeAirport);
return user; return user;
} }
@@ -406,7 +409,14 @@ namespace BlackGui
CServer CLoginComponent::getCurrentVatsimServer() const CServer CLoginComponent::getCurrentVatsimServer() const
{ {
return ui->comp_VatsimServer->currentServer(); CServer server = ui->comp_VatsimServers->currentServer();
if (!server.getUser().hasValidVatsimId())
{
// normally VATSIM server have no valid user associated
const CUser user = m_lastVatsimServer.get().getUser();
server.setUser(user);
}
return server;
} }
CServer CLoginComponent::getCurrentOtherServer() const CServer CLoginComponent::getCurrentOtherServer() const
@@ -414,25 +424,11 @@ namespace BlackGui
return ui->comp_OtherServers->currentServer(); return ui->comp_OtherServers->currentServer();
} }
void CLoginComponent::setOkButtonString(bool connected)
{
const QString s = connected ? "Disconnect" : "Connect";
ui->bb_OkCancel->button(QDialogButtonBox::Ok)->setText(s);
}
void CLoginComponent::setGuiVisibility(bool connected)
{
ui->gbp_LoginMode->setVisible(!connected);
ui->gb_OwnAircraft->setVisible(!connected);
ui->gb_Network->setVisible(!connected);
ui->fr_LogoffConfirmation->setVisible(connected);
}
void CLoginComponent::startLogoffTimerCountdown() void CLoginComponent::startLogoffTimerCountdown()
{ {
ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds); ui->pb_LogoffTimeout->setValue(LogoffIntervalSeconds);
m_logoffCountdownTimer->setInterval(1000); m_logoffCountdownTimer.setInterval(1000);
m_logoffCountdownTimer->start(); m_logoffCountdownTimer.start();
} }
void CLoginComponent::setOwnModelAndIcaoValues() void CLoginComponent::setOwnModelAndIcaoValues()
@@ -526,25 +522,6 @@ namespace BlackGui
return validCombinedType && validAirlineDesignator && validAircraftDesignator && validCallsign; return validCombinedType && validAirlineDesignator && validAircraftDesignator && validCallsign;
} }
bool CLoginComponent::validateVatsimValues()
{
CVatsimValues values = getVatsimValuesFromGui();
const bool validVatsimId = CUser::isValidVatsimId(values.vatsimId);
ui->lblp_VatsimId->setTicked(validVatsimId);
const bool validHomeAirport = values.vatsimHomeAirport.isEmpty() || CAirportIcaoCode::isValidIcaoDesignator(values.vatsimHomeAirport);
ui->lblp_VatsimHomeAirport->setTicked(validHomeAirport);
const bool validVatsimPassword = !values.vatsimPassword.isEmpty();
ui->lblp_VatsimPassword->setTicked(validVatsimPassword);
const bool validRealUserName = !values.vatsimRealName.isEmpty();
ui->lblp_VatsimRealName->setTicked(validRealUserName);
return validVatsimId && validHomeAirport && validVatsimPassword && validRealUserName;
}
void CLoginComponent::changedAircraftIcao(const CAircraftIcaoCode &icao) void CLoginComponent::changedAircraftIcao(const CAircraftIcaoCode &icao)
{ {
if (icao.isLoadedFromDb()) if (icao.isLoadedFromDb())
@@ -574,7 +551,7 @@ namespace BlackGui
ui->pb_LogoffTimeout->setValue(v); ui->pb_LogoffTimeout->setValue(v);
if (v <= 0) if (v <= 0)
{ {
m_logoffCountdownTimer->stop(); m_logoffCountdownTimer.stop();
this->toggleNetworkConnection(); this->toggleNetworkConnection();
} }
} }
@@ -636,48 +613,30 @@ namespace BlackGui
void CLoginComponent::toggleTimeout() void CLoginComponent::toggleTimeout()
{ {
if (m_logoffCountdownTimer->isActive()) if (m_logoffCountdownTimer.isActive())
{ {
m_logoffCountdownTimer->stop(); m_logoffCountdownTimer.stop();
ui->tb_Timeout->setIcon(m_iconPlay); ui->tb_Timeout->setIcon(m_iconPlay);
} }
else else
{ {
m_logoffCountdownTimer->start(); m_logoffCountdownTimer.start();
ui->tb_Timeout->setIcon(m_iconPause); ui->tb_Timeout->setIcon(m_iconPause);
} }
} }
void CLoginComponent::unhidePassword() void CLoginComponent::setUiLoginState(bool connected)
{ {
static const QLineEdit::EchoMode originalMode = ui->le_VatsimPassword->echoMode(); ui->editor_Pilot->setReadOnly(connected);
ui->le_VatsimPassword->setEchoMode(QLineEdit::Normal); ui->editor_Pilot->setVisible(!connected);
QTimer::singleShot(5000, this, [ = ] ui->gb_PilotsDetails->setVisible(!connected);
{ ui->frp_LoginMode->setReadOnly(connected);
ui->le_VatsimPassword->setEchoMode(originalMode); ui->gb_OwnAircraft->setVisible(!connected);
}); ui->tw_Network->setVisible(!connected);
} ui->fr_LogoffConfirmation->setVisible(connected);
void CLoginComponent::initCompleters(CEntityFlags::Entity entity) const QString s = connected ? QStringLiteral("disconnect") : QStringLiteral("connect");
{ ui->pb_Ok->setText(s);
// completers where possible
if (sGui && sGui->hasWebDataServices())
{
if (entity.testFlag(CEntityFlags::AirportEntity) && !ui->le_VatsimHomeAirport->completer())
{
// one time init
const QStringList airports = sGui->getWebDataServices()->getAirports().allIcaoCodes(true);
if (!airports.isEmpty())
{
QCompleter *completer = new QCompleter(airports, this);
QStyledItemDelegate *itemDelegate = new QStyledItemDelegate(completer);
completer->popup()->setItemDelegate(itemDelegate);
ui->le_VatsimHomeAirport->setCompleter(completer);
completer->popup()->setObjectName("AirportCompleter");
completer->popup()->setMinimumWidth(175);
}
}
}
} }
void CLoginComponent::highlightModelField(const CAircraftModel &model) void CLoginComponent::highlightModelField(const CAircraftModel &model)
@@ -701,6 +660,11 @@ namespace BlackGui
ui->le_SimulatorModel->setStyleSheet(sheet.arg(color)); ui->le_SimulatorModel->setStyleSheet(sheet.arg(color));
} }
bool CLoginComponent::isVatsimNetworkTabSelected() const
{
return (ui->tw_Network->currentWidget() == ui->pg_NetworkVatsim);
}
CAircraftModel CLoginComponent::getPrefillModel() const CAircraftModel CLoginComponent::getPrefillModel() const
{ {
const CAircraftModel model = m_lastAircraftModel.get(); const CAircraftModel model = m_lastAircraftModel.get();
@@ -722,9 +686,10 @@ namespace BlackGui
changedCallsign = true; changedCallsign = true;
} }
CUser pilot = ownAircraft.getPilot(); CUser pilot = ownAircraft.getPilot();
pilot.setRealName(CUser::beautifyRealName(ui->le_VatsimRealName->text())); const CUser uiUser = ui->editor_Pilot->getUser();
pilot.setHomeBase(CAirportIcaoCode(ui->le_VatsimHomeAirport->text())); pilot.setRealName(uiUser.getRealName());
pilot.setId(ui->le_VatsimId->text()); pilot.setHomeBase(uiUser.getHomeBase());
pilot.setId(uiUser.getId());
pilot.setCallsign(CCallsign(cs)); pilot.setCallsign(CCallsign(cs));
bool changedPilot = false; bool changedPilot = false;
if (ownAircraft.getPilot() != pilot) if (ownAircraft.getPilot() != pilot)

View File

@@ -88,6 +88,52 @@ namespace BlackGui
void loginDataChangedDigest(); void loginDataChangedDigest();
private: private:
//! GUI aircraft values, formatted
struct CGuiAircraftValues
{
BlackMisc::Aviation::CCallsign ownCallsign;
BlackMisc::Aviation::CAircraftIcaoCode ownAircraftIcao;
BlackMisc::Aviation::CAirlineIcaoCode ownAirlineIcao;
QString ownAircraftCombinedType;
QString ownAircraftSimulatorModel;
};
// -------------- values from GUI -----------------
//! Values from GUI
CGuiAircraftValues getAircraftValuesFromGui() const;
//! User from VATSIM data
BlackMisc::Network::CUser getUserFromPilotGuiValues() const;
//! Callsign from GUI
BlackMisc::Aviation::CCallsign getCallsignFromGui() const;
//! Set ICAO values
//! \return changed values?
bool setGuiIcaoValues(const BlackMisc::Simulation::CAircraftModel &model, bool onlyIfEmpty);
// -------------- values to GUI -----------------
//! Update own callsign (own aircraft from what is set in the GUI)
//! \return changed?
bool updateOwnAircraftCallsignAndPilotFromGuiValues();
//! Update own ICAO values (own aircraft from what is set in the GUI)
//! \return changed?
bool updateOwnAircaftIcaoValuesFromGuiValues();
// -------------- others -----------------
//! Selected server (VATSIM)
BlackMisc::Network::CServer getCurrentVatsimServer() const;
//! Selected server (others)
BlackMisc::Network::CServer getCurrentOtherServer() const;
//! Get a prefill model
BlackMisc::Simulation::CAircraftModel getPrefillModel() const;
//! Login cancelled //! Login cancelled
void loginCancelled(); void loginCancelled();
@@ -95,14 +141,11 @@ namespace BlackGui
void toggleNetworkConnection(); void toggleNetworkConnection();
//! VATSIM data file was loaded //! VATSIM data file was loaded
void onWebServiceDataRead(int entity, int stateInt, int number); void onWebServiceDataRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState state, int number);
//! Validate aircaft //! Validate aircaft
bool validateAircraftValues(); bool validateAircraftValues();
//! Validate VATSIM credentials
bool validateVatsimValues();
//! Aircraft ICAO code has been changed //! Aircraft ICAO code has been changed
void changedAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao); void changedAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao);
@@ -127,97 +170,46 @@ namespace BlackGui
//! Pause/Continue timeout //! Pause/Continue timeout
void toggleTimeout(); void toggleTimeout();
//! Temp. unhide password //! Show / hide elements for UI depending on login state
void unhidePassword(); void setUiLoginState(bool connected);
//! GUI aircraft values, formatted
struct CGuiAircraftValues
{
BlackMisc::Aviation::CCallsign ownCallsign;
BlackMisc::Aviation::CAircraftIcaoCode ownAircraftIcao;
BlackMisc::Aviation::CAirlineIcaoCode ownAirlineIcao;
QString ownAircraftCombinedType;
QString ownAircraftSimulatorModel;
};
//! VATSIM login data
struct CVatsimValues
{
QString vatsimId;
QString vatsimPassword;
QString vatsimRealName;
QString vatsimHomeAirport;
};
// -------------- values from GUI -----------------
//! Values from GUI
CGuiAircraftValues getAircraftValuesFromGui() const;
//! Values from GUI
CVatsimValues getVatsimValuesFromGui() const;
//! User from VATSIM data
BlackMisc::Network::CUser getUserFromVatsimGuiValues() const;
//! Callsign from GUI
BlackMisc::Aviation::CCallsign getCallsignFromGui() const;
//! Set ICAO values
//! \return changed values?
bool setGuiIcaoValues(const BlackMisc::Simulation::CAircraftModel &model, bool onlyIfEmpty);
// -------------- values from GUI -----------------
//! Update own callsign (own aircraft from what is set in the GUI)
//! \return changed?
bool updateOwnAircraftCallsignAndPilotFromGuiValues();
//! Update own ICAO values (own aircraft from what is set in the GUI)
//! \return changed?
bool updateOwnAircaftIcaoValuesFromGuiValues();
// -------------- others -----------------
//! Own model and ICAO data for GUI and own aircraft //! Own model and ICAO data for GUI and own aircraft
void setOwnModelAndIcaoValues(); void setOwnModelAndIcaoValues();
//! Selected server (VATSIM)
BlackMisc::Network::CServer getCurrentVatsimServer() const;
//! Selected server (others)
BlackMisc::Network::CServer getCurrentOtherServer() const;
//! Set OK button string //! Set OK button string
void setOkButtonString(bool connected); void setOkButtonString(bool connected);
//! Show/hide elements as appropriate
void setGuiVisibility(bool connected);
//! Logoff countdown //! Logoff countdown
void startLogoffTimerCountdown(); void startLogoffTimerCountdown();
//! Completers
void initCompleters(BlackMisc::Network::CEntityFlags::Entity entity);
//! Highlight model field according to model data //! Highlight model field according to model data
void highlightModelField(const BlackMisc::Simulation::CAircraftModel &model = {}); void highlightModelField(const BlackMisc::Simulation::CAircraftModel &model = {});
//! Load from settings //! Is the VATSIM network tab selected?
void loadRememberedVatsimData(); bool isVatsimNetworkTabSelected() const;
//! Get a prefill model //! Load from settings
BlackMisc::Simulation::CAircraftModel getPrefillModel() const; void loadRememberedUserData();
//! Copy credentials to pilot
void copyCredentialsToPilot();
//! Server changed
void onSelectedServerChanged(const BlackMisc::Network::CServer &server);
//! Tab widget (server) changed
void onServerTabWidgetChanged(int index);
QScopedPointer<Ui::CLoginComponent> ui; QScopedPointer<Ui::CLoginComponent> ui;
QScopedPointer<CDbQuickMappingWizard> m_mappingWizard; QScopedPointer<CDbQuickMappingWizard> m_mappingWizard;
BlackMisc::CDigestSignal m_changedLoginDataDigestSignal { this, &CLoginComponent::loginDataChangedDigest, 1500, 10 }; BlackMisc::CDigestSignal m_changedLoginDataDigestSignal { this, &CLoginComponent::loginDataChangedDigest, 1500, 10 };
bool m_autoPopupWizard = false; //!< automatically popup wizard if mapping is needed bool m_autoPopupWizard = false; //!< automatically popup wizard if mapping is needed
bool m_visible = false; //!< is this component selected? bool m_visible = false; //!< is this component selected?
bool m_updatePilotOnServerChanges = true;
const QIcon m_iconPlay {":/famfamfam/icons/famfamfam/icons/silk/control_play_blue.png"}; const QIcon m_iconPlay {":/famfamfam/icons/famfamfam/icons/silk/control_play_blue.png"};
const QIcon m_iconPause {":/famfamfam/icons/famfamfam/icons/silk/control_pause_blue.png"}; const QIcon m_iconPause {":/famfamfam/icons/famfamfam/icons/silk/control_pause_blue.png"};
const int LogoffIntervalSeconds = 20; //!< time before logoff const int LogoffIntervalSeconds = 20; //!< time before logoff
QTimer *m_logoffCountdownTimer { nullptr }; //!< timer for logoff countdown QTimer m_logoffCountdownTimer { this }; //!< timer for logoff countdown
BlackMisc::CSettingReadOnly<BlackCore::Vatsim::TTrafficServers> m_otherTrafficNetworkServers { this, &CLoginComponent::reloadSettings }; BlackMisc::CSettingReadOnly<BlackCore::Vatsim::TTrafficServers> m_otherTrafficNetworkServers { this, &CLoginComponent::reloadSettings };
BlackMisc::CData<BlackMisc::Simulation::Data::TLastModel> m_lastAircraftModel { this }; //!< recently used aircraft model BlackMisc::CData<BlackMisc::Simulation::Data::TLastModel> m_lastAircraftModel { this }; //!< recently used aircraft model
BlackMisc::CData<BlackMisc::Network::Data::TLastServer> m_lastServer { this }; //!< recently used server (VATSIM, other) BlackMisc::CData<BlackMisc::Network::Data::TLastServer> m_lastServer { this }; //!< recently used server (VATSIM, other)

View File

@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>348</width> <width>275</width>
<height>625</height> <height>677</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -34,12 +34,15 @@
<property name="title"> <property name="title">
<string>Network</string> <string>Network</string>
</property> </property>
<layout class="QGridLayout" name="gl_Network"> <layout class="QVBoxLayout" name="vl_Network">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin"> <property name="leftMargin">
<number>3</number> <number>3</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>6</number> <number>3</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>3</number> <number>3</number>
@@ -47,23 +50,10 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>3</number> <number>3</number>
</property> </property>
<property name="spacing"> <item>
<number>6</number> <widget class="BlackGui::CLoginModeButtons" name="frp_LoginMode"/>
</property>
<item row="0" column="0" colspan="2">
<widget class="BlackGui::CLoginModeButtons" name="gbp_LoginMode">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="title">
<string>Login mode</string>
</property>
</widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item>
<widget class="QTabWidget" name="tw_Network"> <widget class="QTabWidget" name="tw_Network">
<property name="tabPosition"> <property name="tabPosition">
<enum>QTabWidget::North</enum> <enum>QTabWidget::North</enum>
@@ -78,143 +68,62 @@
<attribute name="title"> <attribute name="title">
<string>VATSIM</string> <string>VATSIM</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gl_tabVatsim"> <layout class="QFormLayout" name="fl_VatsimServers">
<property name="leftMargin"> <item row="0" column="0">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>6</number>
</property>
<property name="verticalSpacing">
<number>4</number>
</property>
<item row="3" column="6">
<widget class="BlackGui::CTickLabel" name="lblp_VatsimHomeAirport">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_VatsimId"/>
</item>
<item row="1" column="5">
<widget class="QLineEdit" name="le_VatsimPassword">
<property name="echoMode">
<enum>QLineEdit::PasswordEchoOnEdit</enum>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="BlackGui::CTickLabel" name="lblp_VatsimPassword">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_VatsimId">
<property name="text">
<string>Id:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="BlackGui::CTickLabel" name="lblp_VatsimId">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="BlackGui::CTickLabel" name="lblp_VatsimRealName">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="le_VatsimHomeAirport">
<property name="maxLength">
<number>4</number>
</property>
<property name="placeholderText">
<string>e.g. &quot;KLAX&quot;</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_VatsimServer"> <widget class="QLabel" name="lbl_VatsimServer">
<property name="text"> <property name="text">
<string>Server</string> <string>Server</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="0" column="1">
<widget class="QLabel" name="lbl_VatsimHomeAirport"> <widget class="BlackGui::Components::CServerListSelector" name="comp_VatsimServers"/>
<property name="toolTip">
<string>Home airport, e.g. &quot;KLAX&quot;</string>
</property>
<property name="text">
<string>Home</string>
</property>
</widget>
</item> </item>
<item row="4" column="1" colspan="5"> <item row="1" column="1">
<widget class="BlackGui::Components::CServerListSelector" name="comp_VatsimServer"/> <widget class="QWidget" name="wi_VatsimButtons" native="true">
</item> <layout class="QHBoxLayout" name="hl_VatsimButtons">
<item row="2" column="1" colspan="5"> <property name="leftMargin">
<widget class="QLineEdit" name="le_VatsimRealName"> <number>0</number>
<property name="placeholderText"> </property>
<string>e.g. Joe Doe</string> <property name="topMargin">
</property> <number>0</number>
</widget> </property>
</item> <property name="rightMargin">
<item row="1" column="3"> <number>0</number>
<widget class="QLabel" name="lbl_VatsimPassword"> </property>
<property name="text"> <property name="bottomMargin">
<string>Password</string> <number>0</number>
</property> </property>
</widget> <item>
</item> <spacer name="hs_VatsimButtons">
<item row="2" column="0"> <property name="orientation">
<widget class="QLabel" name="lbl_VatsimRealName"> <enum>Qt::Horizontal</enum>
<property name="text"> </property>
<string>Real name</string> <property name="sizeHint" stdset="0">
</property> <size>
</widget> <width>40</width>
</item> <height>20</height>
<item row="5" column="0" colspan="6"> </size>
<widget class="QWidget" name="wi_EmptyForSpace" native="true"> </property>
<property name="minimumSize"> </spacer>
<size> </item>
<width>0</width> <item>
<height>10</height> <widget class="QPushButton" name="pb_copyCredentialsVatsim">
</size> <property name="sizePolicy">
</property> <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
</widget> <horstretch>0</horstretch>
</item> <verstretch>0</verstretch>
<item row="1" column="4"> </sizepolicy>
<widget class="QToolButton" name="tb_UnhidePassword"> </property>
<property name="toolTip"> <property name="toolTip">
<string>unhide password</string> <string>copy credentials to pilot section</string>
</property> </property>
<property name="text"> <property name="text">
<string>...</string> <string> override pilot </string>
</property> </property>
<property name="icon"> </widget>
<iconset resource="../../blackmisc/blackmisc.qrc"> </item>
<normaloff>:/diagona/icons/diagona/icons/question-button.png</normaloff>:/diagona/icons/diagona/icons/question-button.png</iconset> </layout>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -224,24 +133,6 @@
<string>Other servers</string> <string>Other servers</string>
</attribute> </attribute>
<layout class="QFormLayout" name="fl_OtherServers"> <layout class="QFormLayout" name="fl_OtherServers">
<property name="horizontalSpacing">
<number>6</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="lbl_OtherServers"> <widget class="QLabel" name="lbl_OtherServers">
<property name="text"> <property name="text">
@@ -252,18 +143,52 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="BlackGui::Components::CServerListSelector" name="comp_OtherServers"/> <widget class="BlackGui::Components::CServerListSelector" name="comp_OtherServers"/>
</item> </item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_OtherServersEdit">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QPushButton" name="pb_OtherServersGotoSettings"> <widget class="QWidget" name="wi_OtherServersButtons" native="true">
<property name="text"> <layout class="QHBoxLayout" name="hl_OtherServersButtons">
<string>goto settings</string> <property name="leftMargin">
</property> <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>
<spacer name="hs_OtherServersButtons">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pb_CopyCredentialsOtherServers">
<property name="toolTip">
<string>copy credentials to pilot section</string>
</property>
<property name="text">
<string> override pilot </string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pb_OtherServersGotoSettings">
<property name="text">
<string> goto settings </string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -329,6 +254,32 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>3</number> <number>3</number>
</property> </property>
<item row="2" column="4">
<widget class="BlackGui::Components::CDbAirlineIcaoSelectorComponent" name="selector_AirlineIcao">
<property name="minimumSize">
<size>
<width>75</width>
<height>0</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="BlackGui::Components::CDbAircraftIcaoSelectorComponent" name="selector_AircraftIcao">
<property name="minimumSize">
<size>
<width>75</width>
<height>0</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
<item row="0" column="1" colspan="5"> <item row="0" column="1" colspan="5">
<widget class="QWidget" name="wi_SimulatorModel" native="true"> <widget class="QWidget" name="wi_SimulatorModel" native="true">
<layout class="QHBoxLayout" name="hl_AircraftModel"> <layout class="QHBoxLayout" name="hl_AircraftModel">
@@ -379,29 +330,20 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="1" column="4"> <item row="1" column="2">
<widget class="BlackGui::Components::CDbAircraftIcaoSelectorComponent" name="selector_AircraftIcao"> <widget class="BlackGui::CTickLabel" name="lblp_Callsign">
<property name="minimumSize"> <property name="text">
<size> <string/>
<width>75</width>
<height>0</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="4"> <item row="0" column="0">
<widget class="BlackGui::Components::CDbAirlineIcaoSelectorComponent" name="selector_AirlineIcao"> <widget class="QLabel" name="lbl_Model">
<property name="minimumSize"> <property name="toolTip">
<size> <string>Launch </string>
<width>75</width>
<height>0</height>
</size>
</property> </property>
<property name="focusPolicy"> <property name="text">
<enum>Qt::StrongFocus</enum> <string>Model</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -422,25 +364,8 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="2" column="5">
<widget class="BlackGui::CTickLabel" name="lblp_Callsign"> <widget class="BlackGui::CTickLabel" name="lblp_AirlineIcao">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_Model">
<property name="toolTip">
<string>Launch </string>
</property>
<property name="text">
<string>Model</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="BlackGui::CTickLabel" name="lblp_AircraftIcao">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@@ -456,29 +381,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_Callsign">
<property name="toolTip">
<string>e.g. DEMBZ</string>
</property>
<property name="inputMethodHints">
<set>Qt::ImhUppercaseOnly</set>
</property>
<property name="maxLength">
<number>10</number>
</property>
<property name="placeholderText">
<string>e.g. DEMBZ</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="BlackGui::CTickLabel" name="lblp_AirlineIcao">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QLineEdit" name="le_AircraftCombinedType"> <widget class="QLineEdit" name="le_AircraftCombinedType">
<property name="toolTip"> <property name="toolTip">
@@ -498,19 +400,29 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2"> <item row="1" column="5">
<widget class="BlackGui::CTickLabel" name="lblp_AircraftCombinedType"> <widget class="BlackGui::CTickLabel" name="lblp_AircraftIcao">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_Callsign">
<property name="toolTip">
<string>e.g. DEMBZ</string>
</property>
<property name="inputMethodHints">
<set>Qt::ImhUppercaseOnly</set>
</property>
<property name="maxLength">
<number>10</number>
</property>
<property name="placeholderText">
<string>e.g. DEMBZ</string>
</property>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="lbl_AircraftCombinedType"> <widget class="QLabel" name="lbl_AircraftCombinedType">
<property name="toolTip"> <property name="toolTip">
@@ -521,6 +433,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2">
<widget class="BlackGui::CTickLabel" name="lblp_AircraftCombinedType">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -568,58 +493,46 @@
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
<height>80</height> <height>100</height>
</size> </size>
</property> </property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QFrame" name="fr_CurrentLoginAddInfo"> <widget class="QFrame" name="fr_CurrentLoginAddInfo">
<property name="frameShape"> <layout class="QGridLayout" name="gl_AddInfo" columnstretch="1,2,1">
<enum>QFrame::StyledPanel</enum> <item row="0" column="2">
</property> <widget class="QLineEdit" name="le_HomeBase">
<property name="frameShadow"> <property name="readOnly">
<enum>QFrame::Raised</enum> <bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="lbl_LoginAsAircraft">
<property name="text">
<string>Your aircraft:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="1" column="0">
<widget class="QLabel" name="lbl_LoginSince"> <widget class="QLabel" name="lbl_LoginSince">
<property name="text"> <property name="text">
<string>Login since:</string> <string>Login since:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="0" column="1">
<widget class="QLineEdit" name="le_LoginAsAircaft"> <widget class="QLineEdit" name="le_LoginAsAircaft">
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2"> <item row="0" column="0">
<widget class="QLineEdit" name="le_LoginSince"> <widget class="QLabel" name="lbl_LoginAsAircraft">
<property name="readOnly"> <property name="text">
<bool>true</bool> <string>Aircraft/home:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" colspan="3"> <item row="1" column="1" colspan="2">
<widget class="BlackGui::CLoginModeButtons" name="gbp_LoginWithMode"> <widget class="QLineEdit" name="le_LoginSince">
<property name="title"> <property name="readOnly">
<string>Login mode</string> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
@@ -755,12 +668,6 @@
<extends>QLabel</extends> <extends>QLabel</extends>
<header>blackgui/ticklabel.h</header> <header>blackgui/ticklabel.h</header>
</customwidget> </customwidget>
<customwidget>
<class>BlackGui::CLoginModeButtons</class>
<extends>QGroupBox</extends>
<header>blackgui/loginmodebuttons.h</header>
<container>1</container>
</customwidget>
<customwidget> <customwidget>
<class>BlackGui::Components::CServerListSelector</class> <class>BlackGui::Components::CServerListSelector</class>
<extends>QComboBox</extends> <extends>QComboBox</extends>
@@ -773,25 +680,25 @@
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget> <customwidget>
<class>BlackGui::Editors::CFsdSetupForm</class> <class>BlackGui::CLoginModeButtons</class>
<extends>QFrame</extends> <extends>QFrame</extends>
<header>blackgui/editors/fsdsetupform.h</header> <header>blackgui/loginmodebuttons.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Editors::CPilotForm</class>
<extends>QFrame</extends>
<header>blackgui/editors/pilotform.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>tw_Network</tabstop> <tabstop>tw_Network</tabstop>
<tabstop>le_VatsimId</tabstop>
<tabstop>le_VatsimPassword</tabstop>
<tabstop>le_VatsimRealName</tabstop>
<tabstop>le_VatsimHomeAirport</tabstop>
<tabstop>comp_VatsimServer</tabstop>
<tabstop>le_Callsign</tabstop> <tabstop>le_Callsign</tabstop>
<tabstop>selector_AircraftIcao</tabstop> <tabstop>selector_AircraftIcao</tabstop>
<tabstop>le_AircraftCombinedType</tabstop> <tabstop>le_AircraftCombinedType</tabstop>
<tabstop>selector_AirlineIcao</tabstop> <tabstop>selector_AirlineIcao</tabstop>
<tabstop>comp_OtherServers</tabstop> <tabstop>comp_OtherServers</tabstop>
<tabstop>pb_OtherServersGotoSettings</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="../../blackmisc/blackmisc.qrc"/> <include location="../../blackmisc/blackmisc.qrc"/>