fix: input monitor / output monitor didn't work
dynamic_cast was used while not fully constructed
Dieser Commit ist enthalten in:
Ursprung
8e0de0e410
Commit
a308165ed1
@ -30,11 +30,9 @@
|
||||
#include "../../utils/inrange.hpp"
|
||||
#include "../../world/world.hpp"
|
||||
|
||||
InputController::InputController(IdObject& interface, InputListColumn columns)
|
||||
InputController::InputController(IdObject& interface)
|
||||
: inputs{&interface, "inputs", nullptr, PropertyFlags::ReadOnly | PropertyFlags::NoStore | PropertyFlags::SubObject}
|
||||
{
|
||||
inputs.setValueInternal(std::make_shared<InputList>(interface, inputs.name(), columns));
|
||||
|
||||
Attributes::addDisplayName(inputs, DisplayName::Hardware::inputs);
|
||||
}
|
||||
|
||||
@ -130,9 +128,10 @@ std::shared_ptr<InputMonitor> InputController::inputMonitor(uint32_t channel)
|
||||
return monitor;
|
||||
}
|
||||
|
||||
void InputController::addToWorld()
|
||||
void InputController::addToWorld(InputListColumn columns)
|
||||
{
|
||||
auto& object = interface();
|
||||
inputs.setValueInternal(std::make_shared<InputList>(object, inputs.name(), columns));
|
||||
object.world().inputControllers->add(std::dynamic_pointer_cast<InputController>(object.shared_from_this()));
|
||||
}
|
||||
|
||||
|
||||
@ -73,9 +73,9 @@ class InputController
|
||||
InputMap m_inputs;
|
||||
std::unordered_map<uint32_t, std::weak_ptr<InputMonitor>> m_inputMonitors;
|
||||
|
||||
InputController(IdObject& interface, InputListColumn columns);
|
||||
InputController(IdObject& interface);
|
||||
|
||||
void addToWorld();
|
||||
void addToWorld(InputListColumn columns);
|
||||
void destroying();
|
||||
|
||||
public:
|
||||
|
||||
@ -26,7 +26,6 @@
|
||||
#include "../../../core/objectlist.hpp"
|
||||
#include "inputlistcolumn.hpp"
|
||||
#include "../../../core/method.hpp"
|
||||
//#include "../input.hpp"
|
||||
#include "../monitor/inputmonitor.hpp"
|
||||
|
||||
class Input;
|
||||
|
||||
@ -40,8 +40,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
DCCPlusPlusInterface::DCCPlusPlusInterface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, DecoderController(*this, decoderListColumns)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, device{this, "device", "", PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
, baudrate{this, "baudrate", 115200, PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
, dccplusplus{this, "dccplusplus", nullptr, PropertyFlags::ReadOnly | PropertyFlags::Store | PropertyFlags::SubObject}
|
||||
@ -193,8 +193,8 @@ void DCCPlusPlusInterface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
DecoderController::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void DCCPlusPlusInterface::loaded()
|
||||
|
||||
@ -39,8 +39,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
ECoSInterface::ECoSInterface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, DecoderController(*this, decoderListColumns)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, hostname{this, "hostname", "", PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
, ecos{this, "ecos", nullptr, PropertyFlags::ReadOnly | PropertyFlags::Store | PropertyFlags::SubObject}
|
||||
{
|
||||
@ -188,8 +188,8 @@ void ECoSInterface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
DecoderController::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void ECoSInterface::destroying()
|
||||
|
||||
@ -37,7 +37,7 @@ constexpr auto inputListColumns = InputListColumn::Id | InputListColumn::Name |
|
||||
|
||||
HSI88Interface::HSI88Interface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, InputController(*this, inputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, m_ioContext{1}
|
||||
, m_serialPort{m_ioContext}
|
||||
, device{this, "device", "", PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
@ -63,7 +63,6 @@ HSI88Interface::HSI88Interface(World& world, std::string_view _id)
|
||||
}}
|
||||
{
|
||||
name = "HSI-88";
|
||||
inputs.setValueInternal(std::make_shared<InputList>(*this, inputs.name(), inputListColumns));
|
||||
|
||||
const bool editable = contains(m_world.state, WorldState::Edit);
|
||||
|
||||
@ -114,7 +113,7 @@ void HSI88Interface::inputSimulateChange(uint32_t channel, uint32_t address)
|
||||
void HSI88Interface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
InputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
}
|
||||
|
||||
void HSI88Interface::destroying()
|
||||
|
||||
@ -42,8 +42,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
LocoNetInterface::LocoNetInterface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, DecoderController(*this, decoderListColumns)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, type{this, "type", LocoNetInterfaceType::Serial, PropertyFlags::ReadWrite | PropertyFlags::Store,
|
||||
[this](LocoNetInterfaceType /*value*/)
|
||||
{
|
||||
@ -235,8 +235,8 @@ void LocoNetInterface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
DecoderController::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void LocoNetInterface::loaded()
|
||||
|
||||
@ -37,8 +37,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
|
||||
TraintasticDIYInterface::TraintasticDIYInterface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, type{this, "type", TraintasticDIYInterfaceType::Serial, PropertyFlags::ReadWrite | PropertyFlags::Store,
|
||||
[this](TraintasticDIYInterfaceType /*value*/)
|
||||
{
|
||||
@ -184,8 +184,8 @@ bool TraintasticDIYInterface::setOnline(bool& value, bool simulation)
|
||||
void TraintasticDIYInterface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void TraintasticDIYInterface::loaded()
|
||||
|
||||
@ -42,8 +42,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
XpressNetInterface::XpressNetInterface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, DecoderController(*this, decoderListColumns)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, type{this, "type", XpressNetInterfaceType::Serial, PropertyFlags::ReadWrite | PropertyFlags::Store,
|
||||
[this](XpressNetInterfaceType /*value*/)
|
||||
{
|
||||
@ -291,8 +291,8 @@ void XpressNetInterface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
DecoderController::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void XpressNetInterface::loaded()
|
||||
|
||||
@ -39,8 +39,8 @@ constexpr auto outputListColumns = OutputListColumn::Id | OutputListColumn::Name
|
||||
Z21Interface::Z21Interface(World& world, std::string_view _id)
|
||||
: Interface(world, _id)
|
||||
, DecoderController(*this, decoderListColumns)
|
||||
, InputController(*this, inputListColumns)
|
||||
, OutputController(*this, outputListColumns)
|
||||
, InputController(static_cast<IdObject&>(*this))
|
||||
, OutputController(static_cast<IdObject&>(*this))
|
||||
, hostname{this, "hostname", "192.168.1.203", PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
, port{this, "port", 21105, PropertyFlags::ReadWrite | PropertyFlags::Store}
|
||||
, z21{this, "z21", nullptr, PropertyFlags::ReadOnly | PropertyFlags::Store | PropertyFlags::SubObject}
|
||||
@ -221,8 +221,8 @@ void Z21Interface::addToWorld()
|
||||
{
|
||||
Interface::addToWorld();
|
||||
DecoderController::addToWorld();
|
||||
InputController::addToWorld();
|
||||
OutputController::addToWorld();
|
||||
InputController::addToWorld(inputListColumns);
|
||||
OutputController::addToWorld(outputListColumns);
|
||||
}
|
||||
|
||||
void Z21Interface::destroying()
|
||||
|
||||
@ -29,11 +29,9 @@
|
||||
#include "../../utils/inrange.hpp"
|
||||
#include "../../world/world.hpp"
|
||||
|
||||
OutputController::OutputController(IdObject& interface, OutputListColumn columns)
|
||||
OutputController::OutputController(IdObject& interface)
|
||||
: outputs{&interface, "outputs", nullptr, PropertyFlags::ReadOnly | PropertyFlags::NoStore | PropertyFlags::SubObject}
|
||||
{
|
||||
outputs.setValueInternal(std::make_shared<OutputList>(interface, outputs.name(), columns));
|
||||
|
||||
Attributes::addDisplayName(outputs, DisplayName::Hardware::outputs);
|
||||
}
|
||||
|
||||
@ -129,9 +127,10 @@ std::shared_ptr<OutputKeyboard> OutputController::outputKeyboard(uint32_t channe
|
||||
return keyboard;
|
||||
}
|
||||
|
||||
void OutputController::addToWorld()
|
||||
void OutputController::addToWorld(OutputListColumn columns)
|
||||
{
|
||||
auto& object = interface();
|
||||
outputs.setValueInternal(std::make_shared<OutputList>(object, outputs.name(), columns));
|
||||
object.world().outputControllers->add(std::dynamic_pointer_cast<OutputController>(object.shared_from_this()));
|
||||
}
|
||||
|
||||
|
||||
@ -72,9 +72,9 @@ class OutputController
|
||||
OutputMap m_outputs;
|
||||
std::unordered_map<uint32_t, std::weak_ptr<OutputKeyboard>> m_outputKeyboards;
|
||||
|
||||
OutputController(IdObject& interface, OutputListColumn columns);
|
||||
OutputController(IdObject& interface);
|
||||
|
||||
void addToWorld();
|
||||
void addToWorld(OutputListColumn columns);
|
||||
void destroying();
|
||||
|
||||
public:
|
||||
|
||||
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren