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)
{
myConnections += DtSelectionManager::instance(de).signal_currentSelectionChanged.connect(boost::bind(
&DtUnitStatusLogic::slot_onCurrentSelectionChanged, this, boost::placeholders::_1, boost::placeholders::_2));
DtDisplayUnitsSettingsSignaler::instance(myDe.mainEventQueue());
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
}
DtUnitStatusLogic::~DtUnitStatusLogic()
{
if ( myCircleVisualizer )
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
}
myUpdateConnection.disconnect();
}
void DtUnitStatusLogic::slot_onCurrentSelectionChanged(
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
myUpdateConnection.disconnect();
if (!selected.size())
{
mySimEntry.reset();
myKey = "";
myInterface->clear();
}
else
{
DtSelectionManager::IdSet::const_iterator iter = selected.begin();
{
myInterface->clear();
}
else
{
myKey = "";
myUpdateConnection = entry->
signal_modified.connect(boost::bind(&DtUnitStatusLogic::slot_onStateViewUpdated,
this, boost::placeholders::_1));
mySimEntry = entry;
slot_onStateViewUpdated(entry);
}
}
}
{
}
{
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);
}
myInterface->setUnitName(s->
objectName().c_str());
if ( !myCircleVisualizer )
{
myCircleVisualizer = createCircleVisualizer();
myCircleVisualizer->init();
}
updateMarkingText(s);
{
updateVelocity(comp->worldVelocity());
updateAcceleration(comp->worldAcceleration());
updateOrientation(comp->worldOrientation());
}
}
{
}
void DtUnitStatusLogic::updateVelocity(const DtVector& v)
{
QString velocity = DtVrfDisplayUnitsSettingsManager::instance(myDe).
convertVelocityUnitNativeToDisplayString(v, DtSelectionManager::instance(myDe).currentSelections()).c_str();
myInterface->setVelocity(velocity);
}
void DtUnitStatusLogic::updateAcceleration(const DtVector& a)
{
QString acceleration = DtVrfDisplayUnitsSettingsManager::instance(myDe).
convertAccelerationUnitNativeToDisplayString(a).c_str();
myInterface->setAcceleration(acceleration);
}
void DtUnitStatusLogic::updateOrientation(const DtTaitBryan& o)
{
std::vector<std::string> strings =
DtVrfDisplayUnitsSettingsManager::instance(myDe).
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(DtVrfDisplayUnitsSettingsManager::instance(myDe).
convertPositionToStringList(geoc));
}
void DtUnitStatusLogic::displayUnitSettingsChanged()
{
if (mySimEntry.isValid())
{
slot_onStateViewUpdated(mySimEntry);
}
}
CircleVisualHandler * DtUnitStatusLogic::createCircleVisualizer()
{
CircleVisualHandler * visualHandler = new CircleVisualHandler(myDe, myDe.agentManager().createNewUniqueId());
return visualHandler;
}
}