The Display Metrics example demonstrates how to add a button to the toolbar which will display a new dialog containing scenario metrics. Metrics are updated by sending specially formatted text messages that are processed by the GUI plugin. Metrics are reset on scenario close or rewind. The formatted text messages are sent by lua scripts that are part of the scenario.
In the Launcher, click the Plug-ins button to bring up the Plug-ins Selection dialog. Enable the plugin.
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QLayout>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QLabel>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QToolBar>
#include <vlpi/entityType.h>
#include <boost/bind/bind.hpp>
{
public:
virtual ~DtMetricsToolbar() override;
};
: makVrv::DtToolbar(de, std::string("MetricsToolbar") )
{
}
DtMetricsToolbar::~DtMetricsToolbar()
{
}
{
tb->setWindowTitle("Metrics Toolbar");
return tb;
}
{
setWindowTitle("Metrics");
myLayout = new QVBoxLayout(this);
myMetricsLayout = new QGridLayout;
myLayout->addLayout(myMetricsLayout);
QHBoxLayout* closeLayout = new QHBoxLayout;
QSpacerItem* closeSpacer = new QSpacerItem(100, 10, QSizePolicy::Expanding, QSizePolicy::Minimum);
closeLayout->addItem(closeSpacer);
closeLayout->addWidget(myCloseButton);
myLayout->addLayout(closeLayout);
QSpacerItem* heightSpacer = new QSpacerItem(200, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding);
myLayout->addItem(heightSpacer);
connect(myCloseButton, SIGNAL(released()),
this, SLOT(hide()));
}
{
}
{
std::vector<LabelAndValue>::iterator lvIter =
myMetrics.begin();
std::vector<LabelAndValue>::iterator lvEnd =
myMetrics.end();
for (; lvIter != lvEnd; ++lvIter)
{
delete lvIter->lbl;
delete lvIter->val;
}
if ( metrics.size() == 0 )
std::map<DtString, int>::const_iterator mIter = metrics.begin();
std::map<DtString, int>::const_iterator mEnd = metrics.end();
for (int i = 0; mIter != mEnd; ++mIter, ++i)
{
LabelAndValue lv;
lv.lbl =
new QLabel(mIter->first.c_str(),
this);
lv.val =
new QLabel(QString::number(mIter->second),
this);
}
}
{
LabelAndValue lv;
lv.lbl =
new QLabel(
"Awaiting Input",
this);
}
const QString & text, QWidget* parent )
, myDe(de)
{
connect(
this, SIGNAL(clicked()),
this, SLOT(slot_onClicked()) );
myDialog->hide();
}
{
};
{
}
{
}
{
{
{
std::vector<DtString> tokens;
textRep->
text().tokenize(
';', tokens);
if (tokens.size() == 3 && tokens[0] == "[Metric]")
{
std::map<DtString, int>::iterator mIter =
{
myMetrics.insert(std::make_pair(tokens[1], tokens[2].toInt()));
}
else
{
mIter->second += tokens[2].toInt();
}
}
}
}
}
{
public:
virtual ~DtMetricsButtonBuilder() override;
virtual QWidget*
create(
makVrv::DtDe& de, QWidget* parent,
const Qt::WindowFlags& flags = 0)
override;
};
DtMetricsButtonBuilder::DtMetricsButtonBuilder(
makVrv::DtDe& de)
: DtWidgetBuilder()
{
}
DtMetricsButtonBuilder::~DtMetricsButtonBuilder()
{
}
QWidget* DtMetricsButtonBuilder::create(
makVrv::DtDe& de, QWidget* parent,
const Qt::WindowFlags& flags)
{
}
{
DtMetricsButtonBuilder* bwb = new DtMetricsButtonBuilder(de);
"ShowMetrics", bwb);
}
{
}
{
if (!qApp)
{
}
setupNewToolbar(app, de);
}
{
if(igApp)
{
setupInterface(*igApp, *de);
return true;
}
else
{
return false;
}
}
{
info.
pluginDescription =
"Compiles and display metrics received via specially formatted text messages.";
}