The DtEntityList class is a Qt-based dialog/ widget class that displays all existing entities as well as their current task and, if available, their destination.
#include <vlpi/appearance.h>
#include <QtGui/QPixmap>
using namespace makVrf;
namespace makVrfEntityListExample
{
DtEntityList::DtEntityList( makVrv::DtDe& de,
QWidget* parent, Qt ::WindowFlags flags)
{
setObjectName(tr("Entity List"));
setupUi(this);
mySimulatedEntityStateView = DtVrfStateViewCollectionManager::instance(de).simulatedEntityStateViewCollection();
populateEntityList();
mySimulatedEntityStateView->signal_stateViewAdded.connect(
boost::bind(&DtEntityList::slot_onObjectAdded, this, _1));
mySimulatedEntityStateView->signal_stateViewAboutToBeRemoved.connect(
boost::bind(&DtEntityList::slot_onObjectAboutToBeRemoved, this, _1));
boost::bind(&DtEntityList::slot_onCurrentTaskChanged, this, _1));
}
DtEntityList::~DtEntityList()
{
mySimulatedEntityStateView->signal_stateViewAdded.disconnect(
boost::bind(&DtEntityList::slot_onObjectAdded, this, _1));
mySimulatedEntityStateView->signal_stateViewAboutToBeRemoved.disconnect(
boost::bind(&DtEntityList::slot_onObjectAboutToBeRemoved, this, _1));
boost::bind(&DtEntityList::slot_onCurrentTaskChanged, this, _1));
}
QIcon DtEntityList::icon()
{
return QIcon();
}
QString DtEntityList::title()
{
return tr("Entity List");
}
const std::string& DtEntityList::pageClassName() const
{
return myClassName;
}
void DtEntityList::activate()
{
}
void DtEntityList::deactivate()
{
}
std::string DtEntityList::thePageClassName()
{
return "DtEntityList";
}
void DtEntityList::setupUi(
QWidget* p)
{
myUi.setupUi(this);
}
void DtEntityList::clear()
{
myUi.myEntityTree->clear();
}
void DtEntityList::populateEntityList()
{
DtVrfSimulatedEntityStateViewCollection::StateViewMap::const_iterator iter =
mySimulatedEntityStateView->stateViewMap().begin();
while (iter != mySimulatedEntityStateView->stateViewMap().end())
{
makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>* entityState = iter->second;
slot_onObjectAdded(*entityState);
++iter;
}
}
void DtEntityList::slot_onObjectAdded(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>& entityState)
{
makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>* nonConstStateView =
const_cast<makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*>(&entityState);
if(myLineToStateViewMap[nonConstStateView] != 0)
{
return;
}
nonConstStateView->signal_stateViewUpdated.connect(
boost::bind(&DtEntityList::slot_onObjectUpdated, this, _1));
nonConstStateView->setUpdateRate(makVrv::DtSimEntryUpdater::AnyUpdates);
myLineToStateViewMap[nonConstStateView] = displayEntityItem;
nonConstStateView->forceUpdate();
myUi.myEntityTree->addTopLevelItem(displayEntityItem);
}
void DtEntityList::slot_onObjectAboutToBeRemoved(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>& entityState)
{
makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>* nonConstStateView =
const_cast<makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*>(&entityState);
nonConstStateView->signal_stateViewUpdated.disconnect(
boost::bind(&DtEntityList::slot_onObjectUpdated, this, _1));
QTreeWidgetItem* displayEntityItem = myLineToStateViewMap[nonConstStateView];
if(displayEntityItem)
{
myUi.myEntityTree->takeTopLevelItem(
myUi.myEntityTree->indexOfTopLevelItem(displayEntityItem));
myLineToStateViewMap[nonConstStateView] = 0;
}
}
void DtEntityList::slot_onObjectUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>* entityState)
{
if(entityState->state().myMarkingText.empty())
{
entityState->forceUpdate();
return;
}
if(displayEntityItem)
{
if(displayEntityItem->text(0).isEmpty())
{
slot_onCurrentTaskChanged(entityState->state().myMarkingText.c_str());
manager.subscribeForTaskInformation(entityState->id());
}
if(displayEntityItem->text(0).toLatin1().constData() != entityState->state().myMarkingText)
{
displayEntityItem->setText(0,entityState->state().myMarkingText.c_str());
}
bool destroyed = false;
if (key.kind() == 11)
{
destroyed = (entityState->state().myAppearance == DtDamageDestroyed);
}
else
{
DtAppearance app(DtEntityType(entityState->state().myEntityType.c_str()));
app.setAppearance(entityState->state().myAppearance);
destroyed = (app.damageState() == DtDamageDestroyed);
}
key, destroyed, 48, false, &entityState->state());
if (pMap.serialNumber() != displayEntityItem->icon(0).serialNumber())
{
displayEntityItem->setIcon(0, pMap);
}
}
}
void DtEntityList::slot_onCurrentTaskChanged(const std::string& entityName)
{
if(entityName == "") return;
makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>* entityState = 0;
DtVrfSimulatedEntityStateViewCollection::StateViewMap::const_iterator iter =
mySimulatedEntityStateView->stateViewMap().begin();
while (iter != mySimulatedEntityStateView->stateViewMap().end())
{
if(iter->second->state().myMarkingText == entityName)
{
entityState = iter->second;
break;
}
++iter;
}
if(displayEntityItem)
{
if (allTasks)
{
if(allTasks->size() == 0)
{
displayEntityItem->setText(1,"");
}
else
{
displayEntityItem->setText(1,taskType.
string().c_str());
fillDestinationLine(((*allTasks)[0]).
task.get(),displayEntityItem);
}
}
}
}
{
{
displayEntityItem->setText(2,formatSourceToDisplay(locTask->
aimingPoint()).c_str());
}
{
DtVrfStateViewCollectionManager::instance(DtPage::myDe).environmentStateViewCollection();
makVrf::DtEnvironmentStateViewCollection::StateViewMap::const_iterator iter =
envStateView->stateViewMap().begin();
while (iter != envStateView->stateViewMap().end())
{
makVrv::DtStateView<makVrf::DtVrlinkSimulatedEnvironmentProcess>* waypointState = iter->second;
if(waypointState->state().myMarkingText == controlPtName.c_str())
{
DtString destinationText = waypointState->state().myPoints[0].string() +
" (" + controlPtName +
")";
displayEntityItem->setText(2,destinationText.c_str());
return;
}
++iter;
}
}
}
}