21 #include <QDomElement>
23 #include <QFileDialog>
27 #include <QTreeWidgetItem>
51 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled );
84 int __iCount = QTreeWidgetItem::childCount();
85 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
86 ((
CVesselPoint*)QTreeWidgetItem::child( __i ))->draw( _poChart, _pqPainter );
101 if( __poVesselContainerEditView->exec() == QDialog::Accepted )
showDetail();
102 delete __poVesselContainerEditView;
113 int __iCount = QTreeWidgetItem::childCount();
114 for(
int __i = __iCount-1 ; __i >=
bDynamic ? 1 : 0; __i-- )
118 return __poOverlayPoint;
131 int __iCount = QTreeWidgetItem::childCount();
132 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
139 int __iCount = QTreeWidgetItem::childCount();
140 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
147 int __iCount = QTreeWidgetItem::childCount();
148 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
157 int __iCount = QTreeWidgetItem::childCount();
158 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
181 __pqMutexDataChange->lock();
184 __pqMutexDataChange->unlock();
194 int __iCount = QTreeWidgetItem::childCount();
195 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
208 QTreeWidgetItem::addChild( _poVesselContainerDevice );
214 int __iCount = QTreeWidgetItem::childCount();
215 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
216 ((
CVesselPoint*)QTreeWidgetItem::child( __i ))->connectDevice();
223 int __iCount = QTreeWidgetItem::childCount();
224 for(
int __i =
bDynamic ? 1 : 0; __i < __iCount; __i++ )
225 ((
CVesselPoint*)QTreeWidgetItem::child( __i ))->disconnectDevice();
239 QTreeWidgetItem::addChild( __poVesselPoint );
240 return __poVesselPoint;
246 int __iCount = QTreeWidgetItem::childCount();
247 for(
int __i = 1; __i < __iCount; __i++ )
253 __poVesselPoint->
setType( tr(
"Dynamic Vessel") );
254 __poVesselPoint->
setDescription( tr(
"This vessel has been automatically added as a result of the parent flotilla's device activity.") );
255 __poVesselPoint->
setSymbol(
"DynamicVessel" );
257 QTreeWidgetItem::addChild( __poVesselPoint );
263 __poVesselPoint->addChild( __poVesselPointDevice );
264 __poVesselPointDevice->
syncDataFix( _roDeviceDataFix );
271 double __fdCurrentTime = (double)QDateTime::currentDateTime().toTime_t();
273 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 1; __i-- )
276 double __fdVesselTime = __poVesselPoint->
getTime();
278 && __fdCurrentTime - __fdVesselTime > (
double)_iTTL )
281 QTreeWidgetItem::removeChild( __poVesselPoint );
282 delete __poVesselPoint;
292 qsType = _rqDomElement.attribute(
"type" );
293 qsUrl = _rqDomElement.attribute(
"url" );
294 qsDescription = _rqDomElement.firstChildElement(
"Description" ).text();
295 qsComment = _rqDomElement.firstChildElement(
"Comment" ).text();
296 QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Device" );
297 if( !__qDomElement.isNull() )
300 __poVesselContainerDevice->
parseQVCT( __qDomElement );
305 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Vessel" );
306 !__qDomElement.isNull();
307 __qDomElement = __qDomElement.nextSiblingElement(
"Vessel" ) )
310 QString __qsName = __qDomElement.attribute(
"name" );
313 __poVesselPoint->
parseQVCT( __qDomElement );
314 addChild( __poVesselPoint );
322 _rqXmlStreamWriter.writeStartElement(
"Flotilla" );
324 if( !
qsName.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"name",
qsName );
328 if( !
qsType.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"type",
qsType );
330 if( !
qsUrl.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"url",
qsUrl );
334 _rqXmlStreamWriter.writeStartElement(
"Description" );
336 _rqXmlStreamWriter.writeEndElement();
341 _rqXmlStreamWriter.writeStartElement(
"Comment" );
342 _rqXmlStreamWriter.writeCDATA(
qsComment );
343 _rqXmlStreamWriter.writeEndElement();
348 int __iCount = QTreeWidgetItem::childCount();
349 for(
int __i = 0; __i < __iCount; __i++ )
353 __poVesselPoint->
dumpQVCT( _rqXmlStreamWriter );
359 __poVesselContainerDevice->
dumpQVCT( _rqXmlStreamWriter );
362 _rqXmlStreamWriter.writeEndElement();
368 for(
int __i = QTreeWidgetItem::childCount()-1; __i >=
bDynamic ? 1 : 0; __i-- )
374 QTreeWidgetItem::removeChild( __poVesselPoint );
375 delete __poVesselPoint;
383 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
384 if( __pqTreeWidgetItem &&
bDynamic )
387 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
389 while( __pqTreeWidgetItem )
392 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
void setOverlayObjectSelected(COverlayObject *_poOverlayObject)
Sets the currently selected overlay object.
(Geographical) Position data [long,lat,elev]
double getTime() const
Returns this time's time, in seconds from Unix epoch.
static constexpr double UNDEFINED_TIME
Specific value for an undefined time.
Fix data [source,time,position,course,DOPs,...].
QString getSourceName() const
Returns the source name.
Generic overlay container.
void switchView(EView eView)
Displays the requested container/item details (switching to the appropriate widget)
@ VESSEL_CONTAINER
Vessel container.
bool isMultiSelected() const
Returns this item's selection status.
void switchView(EView eView)
Displays the requested overlay (switching to the appropriate tab)
void setOverlayObject(COverlayObject *_poOverlayObject)
Sets the overlay object to be displayed (and refreshes the underlying widget)
virtual void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
QString getName() const
Returns this object's name.
virtual void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
QString newChildName(const QString &_rqsName, int _iZeroPrefix=0, bool _bForceSuffix=false) const
Returns a valid (non-duplicate) name for a new sibling of this object.
QString qsName
Object name.
virtual bool matchScrPosition(const CChart *_poChart, const QPointF &_rqPointFScrPosition) const
Returns whether this point matches the given screen position.
virtual void setVisibleCourse(bool _bVisibleCourse)
Sets the course's visibility status.
virtual void setVisiblePosition(bool _bVisiblePosition)
Sets the position's visibility status.
void setVisibility(int _iVisibilityCode)
Sets the global (coded) visibility status.
virtual void toggleVisibility(bool _bIncludeCourse, bool _bIncludeRouting)
Toggle the visibility status.
bool bVisible
Global (marker) visibility status.
bool bVisiblePosition
Position's visibility status.
bool bVisibleName
Name's (tag) visibility status.
int getVisibility() const
Returns the global (coded) visibility status.
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
bool bVisibleCourse
Course's visibility status.
virtual void refreshContent()
Refreshes the content of the underlying widget.
int getTTL() const
Returns the (vessels) time-to-live.
bool connectDevice()
Connects to the actual device.
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter) const
Stores this object's content to the given QVCT destination (file)
void parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
[UI] Vessel container's edit view
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
bool bDynamic
Dynamic status.
QTimer * pqTimerDynamicCleanup
Dynamic flotilla clean-up timer.
void clearDevice()
Clears the device set to dynamically generate this flotilla.
QString qsComment
Vessel's comment.
CVesselContainer(const QString &_rqsName)
void addPointDynamic(const CDeviceDataFix &_roDeviceDataFix, const QString &_rqsDeviceName)
Add a new dynamic vessel (item/point) with the given data fix to this container.
virtual ~CVesselContainer()
virtual void setVisibleCourse(bool _bVisibleCourse)
Sets the course's visibility status.
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
bool isDeviceConnected() const
Returns whether this flotilla's vessels devices are all connected.
virtual void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
virtual void draw(const CChart *_poChart, QPainter *_pqPainter)
Draws this object (itself or its content)
virtual void showEdit()
Displays this object's edit widget/view.
QString qsType
Vessel's type.
int cleanPointDynamic(int _iTTL)
Deletes dynamic vessels (items/points) that have not been updated for the given "time-to-live" second...
int deleteSelection()
Deletes selected items within this container.
CVesselPoint * addPoint(const QString &_rqsName, const CDataPosition &_roDataPosition=CDataPosition::UNDEFINED)
Add a new vessel (item/point) to this container.
virtual COverlayPoint * matchScrPosition(const CChart *_poChart, const QPointF &_rqPointFScrPosition) const
Returns the overlay container's point that (first) matches the given screen position (0 if none is fo...
QString qsDescription
Vessel's description.
QString qsUrl
Vessel's URL.
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given QVCT destination (file)
void setDevice(CVesselContainerDevice *_poVesselContainerDevice)
Sets a device to dynamically generate this flotilla.
void disconnectDevice()
Disconnects all children vessels devices.
int parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
virtual void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
void clear()
Clear the entire content of this container.
virtual void toggleVisibility()
void connectDevice()
Connects all children vessels devices.
void slotTimerDynamicCleanup()
[Slot] Slot to handle activity signal emitted by device
virtual void setVisiblePosition(bool _bVisiblePosition)
Sets the position's visibility status.
@ VISIBLE
Vessel visibility status.
void syncDataFix(const CDeviceDataFix &_roDeviceDataFix)
Synchronizes fix data (sent by device)
void setSynchronized(bool _bSynchronizePosition, bool _bSynchronizeElevation, bool _bSynchronizeTime, bool _bSynchronizeGroundBearing, bool _bSynchronizeGroundSpeed, bool _bSynchronizeGroundSpeedVertical, bool _bSynchronizeApparentBearing, bool _bSynchronizeApparentSpeed, bool _bSynchronizeApparentSpeedVertical, bool _bSynchronizeText)
Sets the synchronizazion flags.
bool connectDevice()
Connects to the actual device.
[UI] Vessel overlay point (item) / vessel
void setType(const QString &_rqsType)
Sets this vessel's type.
void setDescription(const QString &_rqsDescription)
Sets this vessel's description.
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter) const
Stores this object's content to the given QVCT destination (file)
void setSymbol(const QString &_rqsSymbol)
Sets this vessel's symbol.
void parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
static COverlayDetailView * useOverlayDetailView()
static CVesselContainerDetailView * useVesselContainerDetailView()
static QMutex * useMutexDataChange()
static COverlayListView * useOverlayListView()
static CChartTable * useChartTable()
static CSettings * useSettings()