refs #681, GUI FSD setup

* form base class adjusted
* GUI form UI
This commit is contained in:
Klaus Basan
2016-06-26 19:47:32 +02:00
parent 0939b1f08f
commit 2d00ff42fe
7 changed files with 360 additions and 23 deletions

View File

@@ -10,7 +10,7 @@
#include "blackconfig/buildconfig.h"
#include "blackcore/contextapplication.h"
#include "blackcore/data/globalsetup.h"
#include "blackgui/components/serverform.h"
#include "blackgui/editors/serverform.h"
#include "blackgui/components/settingsnetworkserverscomponent.h"
#include "blackgui/guiapplication.h"
#include "blackgui/views/serverview.h"
@@ -71,12 +71,12 @@ namespace BlackGui
void CSettingsNetworkServersComponent::ps_serverSelected(const QModelIndex &index)
{
const CServer clickedServer = this->ui->tvp_Servers->at(index);
this->ui->frp_ServerForm->setServer(clickedServer);
this->ui->form_Server->setServer(clickedServer);
}
void CSettingsNetworkServersComponent::ps_alterTrafficServer()
{
CServer server(this->ui->frp_ServerForm->getServer());
CServer server(this->ui->form_Server->getServer());
CStatusMessageList msgs = server.validate();
if (!msgs.isEmpty()) { msgs.addCategories(this); }

View File

@@ -6,10 +6,16 @@
<rect>
<x>0</x>
<y>0</y>
<width>282</width>
<height>334</height>
<width>322</width>
<height>310</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>150</height>
</size>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
@@ -52,11 +58,11 @@
</widget>
</item>
<item>
<widget class="BlackGui::Components::CServerForm" name="frp_ServerForm">
<widget class="BlackGui::Editors::CServerForm" name="form_Server">
<property name="minimumSize">
<size>
<width>0</width>
<height>120</height>
<height>150</height>
</size>
</property>
<property name="frameShape">
@@ -138,12 +144,12 @@
</widget>
</item>
<item>
<spacer name="vs_SettingsTnServersWorkaround">
<spacer name="vs_Buttons">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -156,17 +162,17 @@
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BlackGui::Components::CServerForm</class>
<extends>QFrame</extends>
<header>blackgui/components/serverform.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Views::CServerView</class>
<extends>QTableView</extends>
<header>blackgui/views/serverview.h</header>
</customwidget>
<customwidget>
<class>BlackGui::Editors::CServerForm</class>
<extends>QFrame</extends>
<header>blackgui/editors/serverform.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@@ -9,8 +9,8 @@
#include "blackgui/editors/form.h"
class QWidget;
namespace BlackMisc { namespace Network { class CAuthenticatedUser; } }
using namespace BlackMisc;
using namespace BlackMisc::Network;
namespace BlackGui
{
@@ -21,7 +21,18 @@ namespace BlackGui
CForm::~CForm() { }
const BlackMisc::Network::CAuthenticatedUser &CForm::getSwiftDbUser() const
void CForm::setSelectOnly()
{
this->setReadOnly(true);
}
CStatusMessageList CForm::validate(bool withNestedObjects) const
{
Q_UNUSED(withNestedObjects);
return CStatusMessageList();
}
const CAuthenticatedUser &CForm::getSwiftDbUser() const
{
return this->m_swiftDbUser.getThreadLocal();
}

View File

@@ -13,10 +13,8 @@
#define BLACKGUI_EDITORS_FORM_H
#include "blackgui/overlaymessagesframe.h"
#include "blackgui/blackguiexport.h"
#include "blackcore/data/authenticateduser.h"
#include "blackmisc/datacache.h"
#include <QFrame>
#include <QObject>
@@ -31,7 +29,7 @@ namespace BlackGui
/*!
* Form base class
*/
class BLACKGUI_EXPORT CForm : public COverlayMessagesFrame
class CForm : public COverlayMessagesFrame
{
Q_OBJECT
@@ -47,7 +45,10 @@ namespace BlackGui
//! Read only, but entity can be selected (normally used in mapping).
//! Use setReadOnly to reset this very state
virtual void setSelectOnly() = 0;
virtual void setSelectOnly();
//! Validate, empty list means OK
virtual BlackMisc::CStatusMessageList validate(bool withNestedObjects = true) const;
//! Is read only?
bool isReadOnly() const { return m_readOnly; }
@@ -63,7 +64,6 @@ namespace BlackGui
//! User has been changed
virtual void ps_userChanged();
};
} // ns
} // ns

View File

@@ -0,0 +1,113 @@
/* Copyright (C) 2016
* swift project Community / Contributors
*
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#include "fsdsetupform.h"
#include "ui_fsdsetupform.h"
#include "blackmisc/stringutils.h"
#include "blackgui/guiutility.h"
#include <QCompleter>
using namespace BlackMisc;
using namespace BlackMisc::Network;
namespace BlackGui
{
namespace Editors
{
CFsdSetupForm::CFsdSetupForm(QWidget *parent) :
CForm(parent),
ui(new Ui::CFsdSetupForm)
{
ui->setupUi(this);
this->showEnableInfo(false);
ui->cb_Enabled->setChecked(true);
ui->le_TextCodec->setCompleter(new QCompleter(textCodecNames(true, true), this));
connect(ui->cb_Enabled, &QCheckBox::toggled, this, &CFsdSetupForm::ps_enabledToggled);
}
CFsdSetupForm::~CFsdSetupForm()
{ }
CFsdSetup CFsdSetupForm::getValue() const
{
if (!this->isEnabled()) { return this->getDisabledValue(); }
CFsdSetup s(ui->le_TextCodec->text().trimmed().toLower());
s.setSendReceiveDetails(
ui->cb_AircraftPartsSend->isChecked(), ui->cb_AircraftPartsReceive->isChecked(),
ui->cb_FastPositionSend->isChecked(), ui->cb_FastPositionReceive->isChecked()
);
return s;
}
const CFsdSetup &CFsdSetupForm::getDisabledValue() const
{
static const CFsdSetup fsd;
return fsd;
}
void CFsdSetupForm::setValue(const BlackMisc::Network::CFsdSetup &setup)
{
ui->le_TextCodec->setText(setup.getTextCodec());
const CFsdSetup::SendReceiveDetails d = setup.getSendReceiveDetails();
ui->cb_AircraftPartsReceive->setChecked(d & CFsdSetup::ReceiveAircraftParts);
ui->cb_AircraftPartsSend->setChecked(d & CFsdSetup::SendAircraftParts);
ui->cb_FastPositionReceive->setChecked(d & CFsdSetup::ReceiveInterimPositions);
ui->cb_FastPositionSend->setChecked(d & CFsdSetup::SendIterimPositions);
}
bool CFsdSetupForm::isFsdSetuoEnabled() const
{
return ui->cb_Enabled->isChecked();
}
void CFsdSetupForm::setFsdSetupEnabled(bool enabled)
{
ui->cb_Enabled->setChecked(enabled);
}
void CFsdSetupForm::showEnableInfo(bool visible)
{
ui->cb_Enabled->setVisible(visible);
ui->lbl_Enabled->setVisible(visible);
}
void CFsdSetupForm::setReadOnly(bool readonly)
{
ui->le_TextCodec->setReadOnly(readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_AircraftPartsReceive, readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_AircraftPartsSend, readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_FastPositionReceive, readonly);
CGuiUtility::checkBoxReadOnly(ui->cb_FastPositionSend, readonly);
}
CStatusMessageList CFsdSetupForm::validate(bool nested) const
{
Q_UNUSED(nested);
const CFsdSetup val(getValue());
CStatusMessageList msgs(val.validate());
if (this->isReadOnly())
{
// in readonly I cannot change the data anyway, so skip warnings
msgs.removeWarningsAndBelow();
}
return msgs;
}
void CFsdSetupForm::ps_enabledToggled(bool enabled)
{
Q_UNUSED(enabled);
this->setReadOnly(!enabled);
if (!enabled)
{
this->setValue(CFsdSetup());
}
}
} // ns
} // ns

View File

@@ -0,0 +1,74 @@
/* Copyright (C) 2013
* swift project Community / Contributors
*
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKGUI_EDITORS_FSDSETUPCOMPONENT_H
#define BLACKGUI_EDITORS_FSDSETUPCOMPONENT_H
#include "blackmisc/network/fsdsetup.h"
#include "form.h"
#include <QFrame>
#include <QScopedPointer>
namespace Ui { class CFsdSetupForm; }
namespace BlackGui
{
namespace Editors
{
/*!
* Setup for FSD
*/
class CFsdSetupForm : public CForm
{
Q_OBJECT
public:
//! Constructor
explicit CFsdSetupForm(QWidget *parent = nullptr);
//! Constructor
~CFsdSetupForm();
//! FSD setup from GUI
BlackMisc::Network::CFsdSetup getValue() const;
//! FSD setup when disabled
const BlackMisc::Network::CFsdSetup &getDisabledValue() const;
//! Set to GUI
void setValue(const BlackMisc::Network::CFsdSetup &setup);
//! Enabled?
bool isFsdSetuoEnabled() const;
//! Set enabled / disabled
void setFsdSetupEnabled(bool enabled);
//! Show the enable info
void showEnableInfo(bool visible);
//! \name Form class implementations
//! @{
virtual void setReadOnly(bool readonly) override;
virtual BlackMisc::CStatusMessageList validate(bool nested = false) const override;
//! @}
private slots:
//! Enable / disable
void ps_enabledToggled(bool enabled);
private:
QScopedPointer<Ui::CFsdSetupForm> ui;
};
} // ns
} // ns
#endif // guard

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CFsdSetupForm</class>
<widget class="QFrame" name="CFsdSetupForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>189</width>
<height>102</height>
</rect>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QFormLayout" name="fl_FsdSetupForm">
<property name="leftMargin">
<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 row="1" column="0">
<widget class="QLabel" name="lbl_TextCodec">
<property name="text">
<string>Text codec</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_TextCodec">
<property name="placeholderText">
<string>e.g. &quot;latin1&quot;</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QFrame" name="fr_SendReceive">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<layout class="QGridLayout" name="gl_SendReceive">
<property name="leftMargin">
<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 row="1" column="0">
<widget class="QLabel" name="lbl_FastPositions">
<property name="text">
<string>Fast positions</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_AircraftParts">
<property name="text">
<string>Aircraft parts</string>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignHCenter">
<widget class="QCheckBox" name="cb_AircraftPartsSend">
<property name="text">
<string>send</string>
</property>
</widget>
</item>
<item row="0" column="2" alignment="Qt::AlignHCenter">
<widget class="QCheckBox" name="cb_AircraftPartsReceive">
<property name="text">
<string>receive</string>
</property>
</widget>
</item>
<item row="1" column="1" alignment="Qt::AlignHCenter">
<widget class="QCheckBox" name="cb_FastPositionSend">
<property name="text">
<string>send</string>
</property>
</widget>
</item>
<item row="1" column="2" alignment="Qt::AlignHCenter">
<widget class="QCheckBox" name="cb_FastPositionReceive">
<property name="text">
<string>receive</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_Enabled">
<property name="text">
<string>Enabled:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="cb_Enabled">
<property name="text">
<string>override defaults</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>