The Gui Thread VRF Remote Controller example adds a new menu and menu item to the gui that will allow the user to bring up a console and type in simple commands to manipulate the simulation. More commands may be added to extend this example
In the Launcher, click the Plug-ins button to bring up the Plug-ins Selection dialog. Enable the plugin.
#include <QtWidgets/QMenu>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QLineEdit>
#include <QApplication>
#include <boost/bind.hpp>
using namespace makVrv;
using namespace makVrf;
class DtSimulationStatusToolbar :
public DtToolbar
{
public:
DtSimulationStatusToolbar (
DtDe& de);
virtual ~DtSimulationStatusToolbar() override;
virtual QToolBar* createToolbar(
DtDe&, QWidget* parent)
override;
};
DtSimulationStatusToolbar::DtSimulationStatusToolbar(
DtDe& de)
:
DtToolbar(de, std::string(
"SimulationStatusToolbar") )
{
}
DtSimulationStatusToolbar::~DtSimulationStatusToolbar()
{
}
QToolBar* DtSimulationStatusToolbar::createToolbar(
DtDe&, QWidget* parent)
{
tb->setWindowTitle("Simulation Status Toolbar");
return tb;
}
class DtSimulationStatusDisplay :
public QLabel
{
public:
DtSimulationStatusDisplay(
DtDe& de, QWidget* parent)
, myDe(de)
{
simulationStatusChanged(DtVrfSimBackendManager::instance(myDe).simulationStatus());
DtVrfSimBackendManager::instance(myDe).signal_simulationStatusChanged.connect(
boost::bind(&DtSimulationStatusDisplay::simulationStatusChanged, this, boost::placeholders::_1));
}
virtual ~DtSimulationStatusDisplay() override
{
if (!DtVrfGuiApplication::applicationIsTerminating(myDe))
{
DtVrfSimBackendManager::instance(myDe).signal_simulationStatusChanged.disconnect(
boost::bind(&DtSimulationStatusDisplay::simulationStatusChanged, this, boost::placeholders::_1));
}
}
{
if (s != mySimulationStatus)
{
mySimulationStatus = s;
QString status = "Simulation Status: ";
switch (s)
{
status += "Unknown";
break;
status += "Not Ready to Simulate";
break;
status += "No Simulation Loaded";
break;
status += "Ready to Simulate";
break;
status += "Scenario Playing";
break;
status += "Scenario Paused";
break;
status += "Scenario Loading";
break;
status += "Scenario Loaded";
break;
status += "Scenario Closing";
break;
status += "Scenario Closed";
break;
status += "Scenario Saving";
break;
status += "Scenario Saved";
break;
status += "Rolling Back Scenario";
break;
status += "Rolled Back Scenario";
break;
status += "Importing Scenario";
break;
status += "Imported Scenario";
break;
}
setText(status);
}
}
protected:
};
{
public:
DtSimulationStatusDisplayBuilder(
DtDe& de);
virtual ~DtSimulationStatusDisplayBuilder() override;
virtual QWidget*
create(
DtDe& de, QWidget* parent,
const Qt::WindowFlags& flags = 0)
override;
};
DtSimulationStatusDisplayBuilder::DtSimulationStatusDisplayBuilder(
DtDe& de)
{
}
DtSimulationStatusDisplayBuilder::~DtSimulationStatusDisplayBuilder()
{
}
QWidget* DtSimulationStatusDisplayBuilder::create(
DtDe& de, QWidget* parent,
const Qt::WindowFlags& flags)
{
return new DtSimulationStatusDisplay(de, parent);
}
class DtRemoteControlMenu :
public DtMenu
{
public:
DtRemoteControlMenu(
DtDe& de)
:
DtMenu(de,
"DtRemoteControlMenu")
{
}
virtual ~DtRemoteControlMenu() override {}
{
QMenu* menu =
new QMenu(QObject::tr(
"Remote Control"), parent);
return menu;
}
};
{
public:
DtRemoteControlMenuItem(
DtDe& de)
, myConsole(0)
, myDe(de)
{
}
virtual ~DtRemoteControlMenuItem() override {
delete myConsole;
}
{
return new QAction(tr(
"Remote Control Console..."), parent);
}
protected:
{
QWidget* parent = 0;
if(action)
{
parent = action->parentWidget();
}
if (!myConsole)
{
}
myConsole->show();
myConsole->raise();
qApp->setActiveWindow(myConsole);
myConsole->myCommand->setFocus();
}
protected:
};
{
DtQtMenuAssembler::instance(de).registerMenu(new DtRemoteControlMenu(de));
DtQtMenuAssembler::instance(de).registerMenu(new DtRemoteControlMenuItem(de));
DtMenuPath::mainMenu("DtTaskMenu"));
DtMenuPath::mainMenu("DtRemoteControlMenu").item("DtRemoteControlMenuItem"));
}
{
DtToolbar * tb =
new DtSimulationStatusToolbar(de);
DtQtToolbarAssembler::instance(de).registerToolbar(tb);
DtSimulationStatusDisplayBuilder* bwb = new DtSimulationStatusDisplayBuilder(de);
DtQtToolbarAssembler::instance(de).registerWidgetBuilder(
"SimulationStatusDisplay", bwb);
DtToolbarPath::toolbar("SimulationStatusToolbar").widget("SimulationStatusDisplay"));
}
{
if(igApp)
{
initPluginMenus(*igApp, *de);
setupNewToolbar(*igApp, *de);
return true;
}
else
{
return false;
}
}
{
info.
pluginName =
"Cross Thread Vrf Remote Control";
info.
pluginDescription =
"This example shows how to use the DtCrossThreadVrfRemoteControl class to control the simulation back-ends.";
}