refs #207, added simulator setup to CSimulatorInfo

* setup will provide some metadata about the flight simulator, such as path, version etc.
* there will be a sim independent setup class, providing common information such as path, is simulator installed, etc.
* a sim dependent class on top will provide the values specific to one sim
* setup will contain the logic to fetch its values: setup->init
This commit is contained in:
Klaus Basan
2014-04-14 12:12:09 +02:00
parent 9db245c843
commit 89cb48bbfc
8 changed files with 162 additions and 5 deletions

View File

@@ -1,13 +1,15 @@
#include "blacksimfreefunctions.h"
#include "fsx/simconnectutilities.h"
#include "fscommon/aircraftcfgentrieslist.h"
#include "fscommon/aircraftmappinglist.h"
#include "fsx/simconnectutilities.h"
#include "simulatorinfo.h"
namespace BlackSim
{
void registerMetadata()
{
BlackSim::CSimulatorInfo::registerMetadata();
BlackSim::FsCommon::CAircraftCfgEntries::registerMetadata();
BlackSim::FsCommon::CAircraftMapping::registerMetadata();
BlackSim::FsCommon::CAircraftCfgEntriesList::registerMetadata();

View File

@@ -0,0 +1,14 @@
#include "fsxsimulatorsetup.h"
#include "../fsx/simconnectutilities.h"
namespace BlackSim
{
namespace Fsx
{
void CFsxSimulatorSetup::init()
{
CSimulatorSetup::init();
this->m_setup.addValue(SetupSimConnectCfgFile, CSimConnectUtilities::getLocalSimConnectCfgFilename());
}
}
}

View File

@@ -0,0 +1,43 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BLACKSIM_FSX_SIMSETUP_H
#define BLACKSIM_FSX_SIMSETUP_H
#include "../simulatorsetup.h"
#include <QString>
namespace BlackSim
{
namespace Fsx
{
/*!
* \brief Simulator settings for FSX Flight sims
*/
class CFsxSimulatorSetup : public BlackSim::CSimulatorSetup
{
public:
enum
{
SetupSimConnectCfgFile = 1000
};
//! Default constructor
CFsxSimulatorSetup() : BlackSim::CSimulatorSetup() {}
//! Constructor
CFsxSimulatorSetup(const BlackMisc::CIndexVariantMap &map) : BlackSim::CSimulatorSetup(map) {}
//! Init, to be used where FSX runs
void init();
};
} // namespace
} // namespace
#endif // guard

View File

@@ -27,8 +27,12 @@ namespace BlackSimPlugin
m_isConnected(false),
m_simRunning(false),
m_hSimConnect(nullptr),
m_nextObjID(1)
m_nextObjID(1),
m_simulatorInfo(CSimulatorInfo::FSX())
{
CFsxSimulatorSetup setup;
setup.init(); // this fetches important setting on local side
this->m_simulatorInfo.setSimulatorSetup(setup.getSettings());
QTimer::singleShot(5000, this, SLOT(checkConnection()));
}
@@ -81,6 +85,11 @@ namespace BlackSimPlugin
// TODO
}
CSimulatorInfo CSimulatorFSX::getSimulatorInfo() const
{
return this->m_simulatorInfo;
}
void CALLBACK CSimulatorFSX::SimConnectProc(SIMCONNECT_RECV *pData, DWORD /* cbData */, void *pContext)
{
CSimulatorFSX *simulatorFsx = static_cast<CSimulatorFSX *>(pContext);

View File

@@ -5,7 +5,6 @@ using namespace BlackMisc;
namespace BlackSim
{
CSimulatorInfo::CSimulatorInfo(const QString &shortname, const QString &fullname) : m_fullname(fullname), m_shortname(shortname)
{ }
@@ -17,6 +16,23 @@ namespace BlackSim
return qHash(TupleConverter<CSimulatorInfo>::toTuple(*this));
}
QVariant CSimulatorInfo::getSimulatorSetupValue(int index) const
{
return this->m_simsetup.value(index);
}
QString CSimulatorInfo::getSimulatorSetupValueAsString(int index) const
{
QVariant qv = getSimulatorSetupValue(index);
Q_ASSERT(qv.canConvert<QString>());
return qv.toString();
}
void CSimulatorInfo::setSimulatorSetup(const BlackMisc::CIndexVariantMap &setup)
{
this->m_simsetup = setup;
}
QString CSimulatorInfo::convertToQString(bool i18n) const
{
Q_UNUSED(i18n);

View File

@@ -1,11 +1,11 @@
#ifndef BLACKSIM_SIMULATORINFO_H
#define BLACKSIM_SIMULATORINFO_H
#include "blackmisc/indexvariantmap.h"
#include "blackmisc/valueobject.h"
namespace BlackSim
{
//! \brief Describing a simulator
class CSimulatorInfo : public BlackMisc::CValueObject
{
@@ -34,6 +34,15 @@ namespace BlackSim
//! \copydoc CValueObject::getValueHash()
virtual uint getValueHash() const override;
//! Single setting value
QVariant getSimulatorSetupValue(int index) const;
//! Single setting value
QString getSimulatorSetupValueAsString(int index) const;
//! Set single settings
void setSimulatorSetup(const BlackMisc::CIndexVariantMap &setup);
//! \brief Simulator is FS9 - Microsoft Flight Simulator 2004
static const CSimulatorInfo &FS9()
{
@@ -85,10 +94,11 @@ namespace BlackSim
BLACK_ENABLE_TUPLE_CONVERSION(CSimulatorInfo)
QString m_fullname;
QString m_shortname;
BlackMisc::CIndexVariantMap m_simsetup; //!< allows to access simulator keys requried on remote side
};
}
BLACK_DECLARE_TUPLE_CONVERSION(BlackSim::CSimulatorInfo, (o.m_fullname, o.m_shortname))
BLACK_DECLARE_TUPLE_CONVERSION(BlackSim::CSimulatorInfo, (o.m_fullname, o.m_shortname, o.m_simsetup))
Q_DECLARE_METATYPE(BlackSim::CSimulatorInfo)
#endif // guard

View File

@@ -0,0 +1,14 @@
#include "simulatorsetup.h"
namespace BlackSim
{
void CSimulatorSetup::setSettings(const BlackMisc::CIndexVariantMap &map)
{
this->m_setup = map;
}
void CSimulatorSetup::init()
{
// void
}
}

View File

@@ -0,0 +1,49 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BLACKSIM_SIMSETUP_H
#define BLACKSIM_SIMSETUP_H
#include "blackmisc/indexvariantmap.h"
#include <QMap>
#include <QString>
namespace BlackSim
{
/*!
* \brief Simulator settings for MS Flight sims
*/
class CSimulatorSetup
{
protected:
BlackMisc::CIndexVariantMap m_setup; //!< values describing the simulator setup (path, config files)
protected:
//! Default constructor
CSimulatorSetup() {}
//! Constructor
CSimulatorSetup(const BlackMisc::CIndexVariantMap &map) : m_setup(map) {}
public:
enum
{
SetupSimPath
};
//! Settings
BlackMisc::CIndexVariantMap getSettings() const { return this->m_setup;}
//! Settings
void setSettings(const BlackMisc::CIndexVariantMap &map);
//! Init, to be used where simulator runs
void init();
};
} // namespace
#endif // guard