score-addon-hardware/Hardware/DocumentPlugin.cpp

64 lines
1.6 KiB
C++

#include <Scenario/Application/ScenarioActions.hpp>
#include <Scenario/Application/ScenarioApplicationPlugin.hpp>
#include <Scenario/Document/BaseScenario/BaseScenario.hpp>
#include <score/actions/Action.hpp>
#include <score/actions/ActionManager.hpp>
#include <score/document/DocumentInterface.hpp>
#include <score/model/path/PathSerialization.hpp>
#include <score/model/tree/TreeNodeSerialization.hpp>
#include <score/serialization/VisitorCommon.hpp>
#include <score/tools/Bind.hpp>
#include <core/document/Document.hpp>
#include <core/document/DocumentModel.hpp>
#include <QBuffer>
#include <Hardware/Settings/Model.hpp>
#include "DocumentPlugin.hpp"
namespace Hardware
{
using namespace std::literals;
DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* parent)
: score::DocumentPlugin{doc, "Hardware::DocumentPlugin", parent}
, ctrlr{nullptr}
{
auto& set = m_context.app.settings<Settings::Model>();
create(set.getDevice());
con(set,
&Settings::Model::DeviceChanged,
this,
&DocumentPlugin::create,
Qt::QueuedConnection);
}
void DocumentPlugin::on_documentClosing()
{
cleanup();
}
void DocumentPlugin::create(const QString& device_name)
{
if (ctrlr) cleanup();
if (device_name == "None") return;
auto& doc = m_context.document.model().modelDelegate();
auto scenar = safe_cast<Scenario::ScenarioDocumentModel*>(&doc);
auto cstr = &scenar->baseScenario().interval();
ctrlr = new Controller{m_context, *cstr, device_name.toStdString()};
}
void DocumentPlugin::cleanup()
{
if (!ctrlr) return;
delete ctrlr;
ctrlr = nullptr;
}
} // namespace Hardware