VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfHierarchyPageLogic.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
10 
11 #pragma once
12 
16 #include <vrvCore/DtElementData.h>
22 #include <boost/signals2.hpp>
23 #include <vrfutil/rwColor.h>
24 #include <vlutil/vlPerformanceStats.h>
25 
26 #include <QtCore/QPoint>
27 #include <QtCore/QObject>
28 
29 #include <map>
30 #include <unordered_map>
31 #include <unordered_set>
32 
33 class QTreeWidgetItem;
34 class QModelIndex;
35 
36 namespace makVrv
37 {
38  class DtDe;
39  class DtElementIDHierarchyNode;
40 };
41 
42 namespace makVrf
43 {
44  class DtVrfHierarchyPage;
45  class DtObjectListViewItem;
46  class DtVrfStateViewCollectionManager;
47  class DtExpandCollapseButton;
48 
52  {
53  public:
56 
57  void setParentItem(DtObjectListViewItem*);
58  void setForce(int) {};
59 
60  protected:
61  DtObjectListViewItem* myParentItem;
62  };
63 
65  {
66  Q_OBJECT
67 
68  public:
70  {
71  Aerodrome = 1,
72  UserStart = 16
73  };
74 
75  public:
78  virtual ~DtVrfHierarchyPageLogic();
79 
80  public:
81  virtual void slot_itemSelectionChanged();
82  virtual void slot_rightClickOnItem(QPoint global);
83  virtual QTreeWidgetItem* itemForState(const DtObjectListViewItem::DtVrfObjectState s) const;
84  virtual void expandToLevel(unsigned int i);
85  virtual void collapseToLevel(unsigned int i);
86  virtual void viewItemExpanded(QTreeWidgetItem* i);
87  virtual void viewItemCollapsed(QTreeWidgetItem* i);
88  virtual DtObjectListViewItem* itemByUUID(const DtUUID& uuid) const;
89 
90  virtual bool isForceRootNode(makVrv::DtUniqueID) const;
91  virtual bool isOrganizedRootNode(QTreeWidgetItem*) const;
92  virtual int forceForRootNode(makVrv::DtUniqueID) const;
93 
94  virtual void deparent(const QStringList&) = 0;
95  virtual void reparent(const QStringList& children, makVrv::DtUniqueID parentId) = 0;
96  virtual bool hierarchyStateFor(makVrv::DtUniqueID, makVrv::DtElementIDHierarchyState&) const = 0;
97 
99  virtual bool processHierarchyItem(makVrv::DtElementIDHierarchyNode*, bool force = false);
100 
101  virtual void setShowObjectConsoleWarning(bool b);
102  virtual bool showObjectConsoleWarningIcon() const;
103 
104  virtual void setTextFilter(const QString&);
105 
106  virtual void setShowCountsOnObjectList(bool);
107 
109  virtual void setShowEchelonIdColumn(bool);
110  virtual bool showEchelonIdColumn() const;
111  virtual QTreeWidgetItem* rootNodeForItem(DtObjectListViewItem*) const;
112  virtual QTreeWidgetItem* parentNodeForItem(DtObjectListViewItem*) const;
113 
115  virtual void activate();
116 
118  virtual int sortColumn() const;
119 
120  virtual int initialSortColumn() const;
121 
122  virtual void setDoubleClickAttachesAndCenters(bool b)
123  {
124  myDoubleClickAttachesAndCenters = b;
125  }
126 
128  {
129  return myDoubleClickAttachesAndCenters;
130  }
131 
132  virtual void setInitiallyExpand(bool);
133  bool initiallyExpand() const
134  {
135  return myInitiallyExpand;
136  }
137 
138  virtual void setGrayOutHiddenItems(bool);
139  bool grayOutHiddenItems() const
140  {
141  return myGrayOutHiddenItems;
142  }
143 
154  virtual DtObjectListViewItem* addOrganizedRootNode(const QString& name, const DtFilename& iconFile, const DtVrfSelectionFilter& filter, int index = -1,
155  const QString& beforeItem = "", bool keepUnderThisNodeIfTacticalGraphic = false);
156 
159  virtual bool removeOrganizedRootNode(const QString&);
160 
167  virtual void addOrganizedParentNode(ParentNodeContext, const DtVrfSelectionFilter& potentialParent, const DtVrfSelectionFilter& potentialChild);
168  virtual void removeOrganizedParentNode(ParentNodeContext);
170 
176  virtual bool showCountsOnObjectList() const;
177 
179  virtual bool canDisplayChildCounts() const;
181 
182  boost::signals2::signal<void (makVrv::DtUniqueID)> signal_itemRemoved;
183 
184  protected slots:
185  virtual void addToChildCount(const QModelIndex&, int, int);
186  virtual void removeFromChildCount(const QModelIndex&, int, int);
187 
188  protected:
189  virtual void enableChildCount();
190  virtual void disableChildCount();
191 
193  virtual bool handleStealthObjects() const;
194 
195  virtual void slot_gumballSettingsChanged(bool b);
196 
197  virtual void checkForInitialExpansion(DtObjectListViewItem*);
198  virtual bool passesFogOfWarFilters(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>* s) const;
199  virtual void scenarioClosed();
200  virtual void moveItemToNewForceNode(makVrv::DtUniqueID, int force);
202  void clearChildrenInAdvanceOfDelete(DtObjectListViewItem* item);
203 
205  virtual void entityStateChanged(makVrv::DtElementID, DtSharedVrfVrlApplicationSettings::EntityStates, bool);
206 
207  virtual void slot_onTick();
208 
211  virtual void slot_onStateViewAdded(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>* s);
212 
214  virtual bool addNode(makVrv::DtElementIDHierarchyNode*) const;
215 
218  virtual bool isValidState(makVrv::DtUniqueID) const;
219  virtual bool isValidState(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>* s) const;
220 
222  virtual void filterItems();
223 
225  virtual void filterTDLItems();
226 
227  virtual void stateViewUpdated();
228 
229  virtual void resorted();
230 
231  virtual DtVrfStateViewCollectionManager& vrfStateViewCollectionManager() const;
232 
240  virtual DtObjectListViewItem* addForceLevelRootNode(int, const DtString& forceName, bool includeUnkownForForce = false);
241 
243 
244  virtual void hookOrganizedParentToChildren();
245  virtual void onDataChanged(DtObjectListViewItem* item);
246 
247  protected:
248  virtual void forcesChanged();
249  virtual void unhandledStateView(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*);
250 
251  virtual void slot_itemDoubleClicked(QTreeWidgetItem*);
252 
253  virtual void clearExpansionStateFor(DtObjectListViewItem*);
254 
255  virtual void removeNode(makVrv::DtElementID);
256  virtual bool positionNodeInHierarchy(makVrv::DtElementIDHierarchyNode*, bool force = false);
257  virtual void hookChildToParent(makVrv::DtElementIDHierarchyNode*, bool forceUpdate = false);
258  virtual void hookParentToChildren(makVrv::DtElementIDHierarchyNode*, bool forceUpdate = false);
260  virtual QVariant echelonId(const DtObjectListViewItem*) const;
261  virtual void slot_stateViewAboutToBeRemoved(const makVrv::DtStateView<DtVrfObjectDataState>& s);
262 
263  virtual void cleanupHierarchyItem(DtObjectListViewItem* item);
264  virtual void createdHierarchyItem(DtObjectListViewItem* item);
265 
267  virtual void deferredItemSelectionChanged();
268 
269  protected:
270  virtual bool performOperationsImmediately() const;
271  virtual void addDataFunctions(DtObjectListViewItem* item);
272  virtual void addSortingFunctions(DtObjectListViewItem* item);
273  virtual void slot_externalSelectionChanged(
274  const makVrv::DtSelectionManager::IdSet& selected,
275  const makVrv::DtSelectionManager::IdSet& deselected );
276 
277  virtual void updateCollapseButtons();
278  virtual void updateCollapseButtons(QTreeWidgetItem*);
279 
280  virtual void createCollapseButton(unsigned int);
281  virtual void expandToLevel(unsigned int level, QTreeWidgetItem* lvi);
282  virtual void collapseToLevel(unsigned int level, QTreeWidgetItem* lvi);
283 
285  virtual void hierarchyItemsModified(const makVrv::DtElementAttributeManager::EntryAttributesList&) = 0;
286  virtual short supportsAttribute() const = 0;
287 
288  virtual void hierarchyItemsRemoved(const makVrv::DtElementData::UniqueIdList&);
289  virtual void setupForceRootNodes();
290  virtual bool sortBySubordinatePosition(const DtObjectListViewItem& rhs, const DtObjectListViewItem& lhs);
291 
292  virtual void checkPendingOperations();
293  virtual void checkFogOfWar(DtObjectListViewItem*, int oldForce = -1, int newForce = -1);
294  virtual void onForceChanged(DtObjectListViewItem*, int oldForce = -1, int newForce = -1);
295  virtual void onDamageStateChanged(DtObjectListViewItem*, bool isDestroyed = false);
296  virtual void onActivatedStateChanged(DtObjectListViewItem*, bool isActivated = true);
297  virtual void onMarkingTextFilterChanged(DtObjectListViewItem*);
298  virtual void slot_extendedApplicationOptionsChanged();
299  virtual void updateRootNodeVisibility(DtObjectListViewItem*);
300 
303  virtual DtObjectListViewItem* itemFor(makVrv::DtElementIDHierarchyNode* node) const;
304 
305  virtual void slot_onUpdateRateChanged(makVrv::DtUniqueID id, int rate);
306  virtual void completeRateChange(makVrv::DtUniqueID id);
307 
309  virtual void itemPositioned(DtObjectListViewItem*);
310 
313  virtual void checkParentVisibility(DtObjectListViewItem*);
314 
315  virtual void restoreExpansionState(QTreeWidgetItem*, bool expanded);
316 
317  virtual void initialize();
318 
319  virtual void resetVisuals();
321  virtual void resetIconColor(DtRwColor, const std::vector<makVrv::DtUniqueID>& ids);
322 
323  virtual void slot_uuidChanged(makVrv::DtUniqueID id, const DtUUID& oldUUID, const DtUUID& newUUID);
324 
325  virtual void slot_objectVisibilityChanged(makVrv::DtUniqueID id, bool);
326 
327  virtual void addToPotentialParents(DtObjectListViewItem*);
328  virtual void removeFromPotentialParents(DtObjectListViewItem*);
329 
330  protected:
331  typedef std::unordered_map<makVrv::DtElementID, DtObjectListViewItem*> DtHierarchyListItemMap;
332  typedef std::unordered_map<makVrv::DtElementID, double> PendingOperationsMap;
333 
336  std::vector<DtExpandCollapseButton*> myCollapseButtonVector;
337  boost::signals2::connection myGrayIfHiddenConnection;
339  std::set<DtObjectListViewItem*> myItemsToCheckForFurtherOrgainization;
340 
348  std::set<QTreeWidgetItem*> myRootNodesForVisibilityCheck;
349 
355  boost::signals2::scoped_connection myDeferredSelectionSignalConnection;
356  boost::signals2::scoped_connection myRightClickSignalConnection;
357 
359 
360  std::map<DtUUID, bool> myExpandedNodes;
361  std::map<DtUUID, DtObjectListViewItem*> myItemsByUUID;
362 
364  {
365  OrganizedRootNode() : selectionFilter(nullptr), stateData(nullptr), uniqueID(0), objectListViewItem(nullptr), keepUnderThisNodeIfTacticalGraphic(false) {};
366 
367  DtVrfSelectionFilter* selectionFilter;
372  };
373 
374  typedef std::vector<OrganizedRootNode> OrganizationOrder;
376 
377  typedef std::map<makVrv::DtUniqueID, OrganizedRootNode> OrganizedRootNodes;
379 
380  typedef std::map<int, OrganizedRootNode> ForceRootNodes;
382 
384  {
385  OrganizedParentNode() : parentFilter(nullptr), childFilter(nullptr) {};
386  virtual ~OrganizedParentNode();
387 
388  std::shared_ptr<DtVrfSelectionFilter> parentFilter;
389  std::shared_ptr<DtVrfSelectionFilter> childFilter;
390  std::set<DtObjectListViewItem*> parentNodes;
391  };
392 
393  typedef std::map<ParentNodeContext, OrganizedParentNode> OrganizedParentNodes;
395 
396  std::map<makVrv::DtUniqueID, makVrv::DtSignalConnectionManager*> myRateChanges;
397 
399 
400  QString myTextFilter;
401 
405  bool myWaitForStateAddition = false;
406  int myLastPendingOperationsSize = 0;
407  };
408 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
OrganizedParentNodes myOrganizedParentNodes
Definition: vrfHierarchyPageLogic.h:394
DtObjectListViewItem * objectListViewItem
Definition: vrfHierarchyPageLogic.h:370
OrganizedParentNode()
Definition: vrfHierarchyPageLogic.h:385
class DtVrfSelectionFilter
Definition: vrfSelectionFilters.h:32
PendingOperationsMap myPendingOperations
Definition: vrfHierarchyPageLogic.h:353
std::shared_ptr< DtVrfSelectionFilter > parentFilter
Definition: vrfHierarchyPageLogic.h:388
bool myShowEchelonIdColumn
Definition: vrfHierarchyPageLogic.h:342
boost::signals2::scoped_connection myDeferredSelectionSignalConnection
Definition: vrfHierarchyPageLogic.h:355
makVrv::DtUniqueID uniqueID
Definition: vrfHierarchyPageLogic.h:369
DtSimpleObjectDataState * stateData
Definition: vrfHierarchyPageLogic.h:368
int myDeferredSelectionCounter
Definition: vrfHierarchyPageLogic.h:404
std::map< int, OrganizedRootNode > ForceRootNodes
Definition: vrfHierarchyPageLogic.h:380
UpdateRate
Definition: DtSimEntryUpdater.h:31
#define DT_DLL_VRFGUICOREQT
Definition: vrfGuiCoreQt.h:26
bool myNeedsResort
Definition: vrfHierarchyPageLogic.h:346
OrganizationOrder myOrganizationOrder
Definition: vrfHierarchyPageLogic.h:375
std::map< makVrv::DtUniqueID, makVrv::DtSignalConnectionManager * > myRateChanges
Definition: vrfHierarchyPageLogic.h:396
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
Contains makVrv:DtSelectionManager class.
Definition: vrfHierarchyPageLogic.h:64
std::map< makVrv::DtUniqueID, OrganizedRootNode > OrganizedRootNodes
Definition: vrfHierarchyPageLogic.h:377
bool myShowObjectConsoleWarningIcon
Definition: vrfHierarchyPageLogic.h:358
bool myFirstTick
Definition: vrfHierarchyPageLogic.h:343
Contains makVrv::DtElementData class.
ParentNodeContext
Definition: vrfHierarchyPageLogic.h:69
std::set< DtObjectListViewItem * > parentNodes
Definition: vrfHierarchyPageLogic.h:390
Definition: objectSettingsManager.h:50
OrganizedRootNodes myOrganizedRootNodes
Definition: vrfHierarchyPageLogic.h:378
The DtElementIDHierarchyState class contains information about the element and its place in the eleme...
Definition: DtElementIDHierarchyState.h:20
bool myUseForceRootOrganization
Default is false. Before initialization set to true in order to use force root nodes for organization...
Definition: vrfHierarchyPageLogic.h:352
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:23
bool initiallyExpand() const
Definition: vrfHierarchyPageLogic.h:133
makVrv::DtDe & myDe
Definition: vrfHierarchyPageLogic.h:334
Definition: vrfHierarchyPageLogic.h:363
std::set< DtObjectListViewItem * > myItemsToCheckForFurtherOrgainization
Definition: vrfHierarchyPageLogic.h:339
makVrv::DtSignalConnectionManager myConnectionManager
Definition: vrfHierarchyPageLogic.h:354
Contains makVrf:DtSharedVrfVrlApplicationSettings class. This class will share settings between the d...
Reader-Writer color specified by red, green, blue components.
Definition: rwColor.h:19
boost::signals2::scoped_connection myRightClickSignalConnection
Definition: vrfHierarchyPageLogic.h:356
std::map< DtUUID, DtObjectListViewItem * > myItemsByUUID
Definition: vrfHierarchyPageLogic.h:361
DtVrfHierarchyPage * myInterface
Definition: vrfHierarchyPageLogic.h:335
Contains makVrv::DtElementIDHierarchy class. This is an arbitrary hierarchy class that will allow hie...
The DtVrfChildToParentSelectionFilter specialized filter that must be used as a child filter when org...
Definition: vrfHierarchyPageLogic.h:51
Definition: vrfHierarchyPage.h:111
std::map< DtUUID, bool > myExpandedNodes
Definition: vrfHierarchyPageLogic.h:360
std::vector< EntryAttributes > EntryAttributesList
Define the type used to signal changes to one or more attributes for one or more elements.
Definition: DtElementAttributeManager.h:44
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
The DtElementIDHierarchyNode class will contain information about an element, its children and its pa...
Definition: DtElementIDHierarchy.h:33
bool myHideForceLevelNodesWhenNoChildren
Definition: vrfHierarchyPageLogic.h:347
This class is the central point for looking up information about a particular object in the VRF GUI...
Definition: vrfStateViewCollectionManager.h:143
bool myUpdateCollapseButtons
Definition: vrfHierarchyPageLogic.h:341
EntityStates
Definition: sharedVrfVrlApplicationSettings.h:30
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
void setForce(int)
Definition: vrfHierarchyPageLogic.h:58
boost::signals2::connection myGrayIfHiddenConnection
Definition: vrfHierarchyPageLogic.h:337
virtual void setDoubleClickAttachesAndCenters(bool b)
Definition: vrfHierarchyPageLogic.h:122
Base class to provide boost signal/slot management.
Data that is used for folders in the organized object list view.
Definition: simpleObjectDataState.h:18
std::set< QTreeWidgetItem * > myRootNodesForVisibilityCheck
Definition: vrfHierarchyPageLogic.h:348
std::vector< DtExpandCollapseButton * > myCollapseButtonVector
Definition: vrfHierarchyPageLogic.h:336
int myLastForceType
Definition: vrfHierarchyPageLogic.h:403
bool keepUnderThisNodeIfTacticalGraphic
Definition: vrfHierarchyPageLogic.h:371
std::vector< DtElementID > UniqueIdList
Public Type Definitions.
Definition: DtElementData.h:49
bool myGrayOutHiddenItems
Definition: vrfHierarchyPageLogic.h:402
DtHierarchyListItemMap myItems
Definition: vrfHierarchyPageLogic.h:338
Contains the DtElementAttributeManager class declaration.
std::vector< OrganizedRootNode > OrganizationOrder
Definition: vrfHierarchyPageLogic.h:374
std::map< ParentNodeContext, OrganizedParentNode > OrganizedParentNodes
Definition: vrfHierarchyPageLogic.h:393
ForceRootNodes myForceRootNodes
Definition: vrfHierarchyPageLogic.h:381
Definition: vrfHierarchyPageLogic.h:383
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
QString myTextFilter
Definition: vrfHierarchyPageLogic.h:400
boost::signals2::signal< void(makVrv::DtUniqueID)> signal_itemRemoved
Definition: vrfHierarchyPageLogic.h:182
std::unordered_map< makVrv::DtElementID, DtObjectListViewItem * > DtHierarchyListItemMap
Definition: vrfHierarchyPageLogic.h:331
DtVrfStateViewCollectionManager * myVrfStateViewCollectionManager
Definition: vrfHierarchyPageLogic.h:398
std::shared_ptr< DtVrfSelectionFilter > childFilter
Definition: vrfHierarchyPageLogic.h:389
This tree widget item can be used in any tree that wants to display an icon next to the name of an ob...
Definition: objectListViewItem.h:55
bool myDoubleClickAttachesAndCenters
Definition: vrfHierarchyPageLogic.h:345
std::set< DtUniqueID > IdSet
Definition: DtSelectionManager.h:32
bool doubleClickAttachesAndCenters() const
Definition: vrfHierarchyPageLogic.h:127
std::unordered_map< makVrv::DtElementID, double > PendingOperationsMap
Definition: vrfHierarchyPageLogic.h:332
bool grayOutHiddenItems() const
Definition: vrfHierarchyPageLogic.h:139
bool myInitiallyExpand
Definition: vrfHierarchyPageLogic.h:344

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)