refs #300, moved components in own namespace and directory

This commit is contained in:
Klaus Basan
2014-07-27 14:56:51 +02:00
parent c500a561be
commit 3d41414d9e
64 changed files with 4104 additions and 3476 deletions

View File

@@ -0,0 +1,163 @@
#include "settingssimulatorcomponent.h"
#include "ui_settingssimulatorcomponent.h"
#include "blackcore/context_settings.h"
#include "blacksim/simulatorinfolist.h"
#include "blacksim/setsimulator.h"
#include "blackmisc/settingutilities.h"
#include <QComboBox>
using namespace BlackMisc;
using namespace BlackMisc::Settings;
using namespace BlackMisc::PhysicalQuantities;
using namespace BlackSim;
using namespace BlackSim::Settings;
using namespace BlackCore;
namespace BlackGui
{
namespace Components
{
CSettingsSimulatorComponent::CSettingsSimulatorComponent(QWidget *parent) :
QFrame(parent), CRuntimeBasedComponent(nullptr, false),
ui(new Ui::CSettingsSimulatorComponent)
{
ui->setupUi(this);
}
CSettingsSimulatorComponent::~CSettingsSimulatorComponent()
{
delete ui;
}
void CSettingsSimulatorComponent::runtimeHasBeenSet()
{
Q_ASSERT(this->getIContextSimulator());
Q_ASSERT(this->getIContextSettings());
if (this->getIContextSimulator())
{
QStringList plugins = this->getIContextSimulator()->getAvailableSimulatorPlugins().toStringList(true);
CSimulatorInfo currentPlugin = this->getIContextSimulator()->getSimulatorInfo();
this->ui->cb_Plugins->addItems(plugins);
this->setCurrentPlugin(currentPlugin);
// disable / enable driver specific GUI parts
bool fsxDriver =
this->getIContextSimulator()->getAvailableSimulatorPlugins().supportsSimulator(CSimulatorInfo::FSX());
this->ui->comp_SettingsSimulatorFsx->setVisible(fsxDriver);
// time sync
bool timeSynced = this->getIContextSimulator()->isTimeSynchronized();
this->ui->cb_TimeSync->setChecked(timeSynced);
CTime timeOffset = this->getIContextSimulator()->getTimeSynchronizationOffset();
this->ui->le_TimeSyncOffset->setText(timeOffset.formattedHrsMin());
// only with simulator context set GUI values
bool connected = this->connect(this->ui->cb_Plugins, SIGNAL(currentIndexChanged(int)), this, SLOT(ps_pluginHasChanged(int)));
Q_ASSERT(connected);
Q_UNUSED(connected);
}
if (this->getIContextSettings())
{
connect(this->getIContextSettings(), &IContextSettings::changedSettings, this, &CSettingsSimulatorComponent::ps_settingsHaveChanged);
}
connect(this->ui->cb_TimeSync, &QCheckBox::released, this, &CSettingsSimulatorComponent::ps_guiValueHasChanged);
connect(this->ui->le_TimeSyncOffset, &QLineEdit::returnPressed, this, &CSettingsSimulatorComponent::ps_guiValueHasChanged);
}
void CSettingsSimulatorComponent::setCurrentPlugin(const CSimulatorInfo &plugin)
{
if (plugin.isUnspecified()) return;
const QString searchFor = plugin.getShortName();
for (int i = 0; i < this->ui->cb_Plugins->count(); ++i)
{
const QString t = ui->cb_Plugins->itemText(i);
if (t.indexOf(searchFor, 0, Qt::CaseInsensitive) >= 0)
{
if (i == this->ui->cb_Plugins->currentIndex()) return;
this->ui->cb_Plugins->setCurrentIndex(i);
break;
}
}
}
void CSettingsSimulatorComponent::ps_pluginHasChanged(int index)
{
Q_ASSERT(this->getIContextSimulator());
Q_ASSERT(this->getIContextSettings());
if (!this->getIContextSimulator() || !this->getIContextSettings()) return;
CSimulatorInfoList simDrivers = this->getIContextSimulator()->getAvailableSimulatorPlugins();
if (simDrivers.isEmpty())
{
this->sendStatusMessage(CStatusMessage::getErrorMessage("No drivers available", CStatusMessage::TypeSimulator));
return;
}
if (simDrivers.size() <= index)
{
this->sendStatusMessage(CStatusMessage::getErrorMessage("Wrong driver index", CStatusMessage::TypeSimulator));
return;
}
// update
CSimulatorInfo currentDriver = simDrivers[index];
const QString path = CSettingUtilities::appendPaths(IContextSettings::PathSimulatorSettings(), CSettingsSimulator::ValueSelectedDriver());
this->sendStatusMessages(
this->getIContextSettings()->value(path, CSettingUtilities::CmdUpdate(), currentDriver.toCVariant())
);
}
void CSettingsSimulatorComponent::ps_settingsHaveChanged(uint settingsType)
{
Q_ASSERT(this->getIContextSettings());
IContextSettings::SettingsType type = static_cast<IContextSettings::SettingsType>(settingsType);
if (type != IContextSettings::SettingsSimulator || !this->getIContextSettings()) return;
CSettingsSimulator simSettings = this->getIContextSettings()->getSimulatorSettings();
this->setCurrentPlugin(simSettings.getSelectedPlugin());
this->ui->le_TimeSyncOffset->setText(simSettings.getSyncTimeOffset().formattedHrsMin());
this->ui->cb_TimeSync->setChecked(simSettings.isTimeSyncEnabled());
}
void CSettingsSimulatorComponent::ps_guiValueHasChanged()
{
Q_ASSERT(this->getIContextSettings());
if (!this->getIContextSettings()) return;
QObject *sender = QObject::sender();
if (!sender) return;
const QString ps = IContextSettings::PathSimulatorSettings();
CStatusMessageList msgs;
if (sender == this->ui->cb_TimeSync)
{
bool timeSync = this->ui->cb_TimeSync->isChecked();
msgs = this->getIContextSettings()->value(CSettingUtilities::appendPaths(ps, CSettingsSimulator::ValueSyncTime()), CSettingUtilities::CmdUpdate(), QVariant(timeSync));
}
else if (sender == this->ui->le_TimeSyncOffset)
{
const QString os = this->ui->le_TimeSyncOffset->text();
CTime ost(0, CTimeUnit::hrmin());
if (!os.isEmpty())
{
ost.parseFromString(os);
}
if (ost.isNull())
{
msgs.push_back(CStatusMessage::getValidationError("Invalid offset time"));
}
else
{
msgs = this->getIContextSettings()->value(CSettingUtilities::appendPaths(ps, CSettingsSimulator::ValueSyncTimeOffset()), CSettingUtilities::CmdUpdate(), ost.toQVariant());
}
}
if (!msgs.isEmpty())
{
this->getIContextApplication()->sendStatusMessages(msgs);
}
}
}
} // namespace