78 lines
1.8 KiB
C++
78 lines
1.8 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}
|
||
|
, hardware{doc}
|
||
|
{
|
||
|
auto& set = m_context.app.settings<Settings::Model>();
|
||
|
if(set.getEnabled())
|
||
|
{
|
||
|
create();
|
||
|
}
|
||
|
|
||
|
con(
|
||
|
set, &Settings::Model::EnabledChanged, this,
|
||
|
[this](bool b) {
|
||
|
if(b)
|
||
|
create();
|
||
|
else
|
||
|
cleanup();
|
||
|
},
|
||
|
Qt::QueuedConnection);
|
||
|
}
|
||
|
|
||
|
DocumentPlugin::~DocumentPlugin() { }
|
||
|
|
||
|
void DocumentPlugin::on_documentClosing()
|
||
|
{
|
||
|
cleanup();
|
||
|
}
|
||
|
|
||
|
void DocumentPlugin::create()
|
||
|
{
|
||
|
if(cstr)
|
||
|
cleanup();
|
||
|
|
||
|
auto& doc = m_context.document.model().modelDelegate();
|
||
|
auto scenar = safe_cast<Scenario::ScenarioDocumentModel*>(&doc);
|
||
|
cstr = &scenar->baseScenario().interval();
|
||
|
|
||
|
hardware.setup();
|
||
|
|
||
|
// Get Scenario::processModel
|
||
|
// adapted from
|
||
|
// src/plugins/score-plugin-scenario/Scenario/Document/ScenarioDocument/ScenarioDocumentModel.cpp#67
|
||
|
hardware.setup_scenario(qobject_cast<Scenario::ProcessModel*>(&*cstr->processes.begin()));
|
||
|
}
|
||
|
|
||
|
void DocumentPlugin::cleanup()
|
||
|
{
|
||
|
if(!cstr)
|
||
|
return;
|
||
|
|
||
|
cstr = nullptr;
|
||
|
}
|
||
|
}
|