The class DtUnitStatusLogic class is repsonsible for displaying information about the currently selected entity
#include <vrvCore/DtWindowEllipseAgent.hpp>
#include <vlpi/appearance.h>
#include <vlpi/entityType.h>
#include <QtGui/QPixmap>
#include <stdio.h>
using namespace makVrv;
using namespace makVrf;
namespace makVrfUnitStatusExample
{
DtUnitStatusLogic::DtUnitStatusLogic(
DtDe& de, DtUnitStatusInterface* iFace )
: myDe(de)
, myInterface(iFace)
, mySimEntry(0)
, myIsDestroyed(false)
, myCircleVisualizer(0)
{
DtSelectionManager::instance(de).signal_currentSelectionChanged.connect(
boost::bind(
&DtUnitStatusLogic::slot_onCurrentSelectionChanged, this, _1, _2));
DtDisplayUnitsSettingsSignaler::instance(myDe.mainEventQueue());
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
}
DtUnitStatusLogic::~DtUnitStatusLogic()
{
DtSelectionManager::instance(myDe).signal_currentSelectionChanged.disconnect(
boost::bind(
&DtUnitStatusLogic::slot_onCurrentSelectionChanged, this, _1, _2));
DtDisplayUnitsSettingsSignaler::instance(myDe.mainEventQueue());
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged,
this));
if ( myCircleVisualizer )
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
}
resetUpdateRate();
}
void DtUnitStatusLogic::slot_onCurrentSelectionChanged(
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
if (!selected.size())
{
resetUpdateRate();
mySimEntry = 0;
myKey = "";
myInterface->clear();
}
else
{
DtSelectionManager::IdSet::const_iterator iter = selected.begin();
DtSimEntry* entry = myDe.dataBank().simData().findSimEntry(
id);
if (!entry)
{
myInterface->clear();
resetUpdateRate();
}
else
{
resetUpdateRate();
myKey = "";
if (stateView)
{
mySimEntry = entry;
slot_onStateViewUpdated(stateView);
}
else
{
myInterface->clear();
}
}
}
}
{
return (app.damageState() == DtDamageDestroyed);
}
{
if (myDe.destructing())
{
return;
}
type.subCategory(), type.specific(), type.extra());
bool destroyed = isDestroyed(s);
if ((key.string() != myKey.string()) || (myIsDestroyed != destroyed))
{
myKey = key;
myIsDestroyed = destroyed;
QPixmap pmap = DtVrfGuiSymbolMapper::instance(myDe).getIcon(myKey, myIsDestroyed);
myInterface->setIcon(pmap);
}
if ( !myCircleVisualizer )
{
myCircleVisualizer = createCircleVisualizer();
myCircleVisualizer->init();
}
updateMarkingText(s);
}
{
DtVrfStateViewCollectionManager::instance(myDe).objectDataStateViewCollection()->findStateView(s->
id()));
if (stateView)
{
}
}
void DtUnitStatusLogic::updateVelocity(
const DtVector& v)
{
QString velocity = DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertVelocityUnitNativeToDisplayString(v).c_str();
myInterface->setVelocity(velocity);
}
void DtUnitStatusLogic::updateAcceleration(
const DtVector& a)
{
QString acceleration = DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertAccelerationUnitNativeToDisplayString(a).c_str();
myInterface->setAcceleration(acceleration);
}
void DtUnitStatusLogic::updateOrientation(const DtTaitBryan& o)
{
std::vector<std::string> strings =
DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertOrientationUnitNativeToDisplayStrings(o);
QString orientation = strings[0].c_str();
orientation += ", ";
orientation += strings[1].c_str();
orientation += ", ";
orientation += strings[2].c_str();
myInterface->setHeading(orientation);
}
void DtUnitStatusLogic::updateLocation(
const DtVector& geoc)
{
if ( myCircleVisualizer )
{
myCircleVisualizer->update(geoc);
}
myInterface->setLocation(DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertPositionToStringList(geoc));
}
void DtUnitStatusLogic::resetUpdateRate()
{
if (mySimEntry)
{
if (stateView)
{
mySimEntry->setUpdateRate(DtSimEntryUpdater::NoUpdates, stateView);
}
}
}
void DtUnitStatusLogic::displayUnitSettingsChanged()
{
DtVrfStateViewCollectionManager::instance(myDe);
if (mySimEntry)
{
slot_onStateViewUpdated(stateView);
}
}
CircleVisualHandler * DtUnitStatusLogic::createCircleVisualizer()
{
CircleVisualHandler * visualHandler = new CircleVisualHandler(myDe, myDe.agentManager().createNewUniqueId());
return visualHandler;
}
}