21 #include <QDataStream>
22 #include <QDomDocument>
28 #include <QStringList>
29 #include <QTreeWidget>
30 #include <QTreeWidgetItem>
32 #include <QXmlStreamWriter>
54 QTreeWidget::setColumnCount( 3 );
55 QTreeWidget::setColumnWidth(
NAME, 184 );
57 QTreeWidgetItem* __pqTreeWidgetItem =
new QTreeWidgetItem();
58 __pqTreeWidgetItem->setText(
NAME, tr(
"Name") );
59 __pqTreeWidgetItem->setIcon(
VISIBLE, QIcon(
":icons/16x16/visible.png" ) );
60 __pqTreeWidgetItem->setIcon(
SELECT, QIcon(
":icons/16x16/select.png" ) );
61 QTreeWidget::setHeaderItem( __pqTreeWidgetItem );
62 QTreeWidget::resizeColumnToContents(
VISIBLE );
63 QTreeWidget::resizeColumnToContents(
SELECT );
65 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable );
67 QTreeWidgetItem::setCheckState(
VISIBLE, Qt::Checked );
69 QTreeWidget::setDragDropMode( QAbstractItemView::InternalMove );
85 static const QStringList __qStringList(
"application/qvct.vesselpoint" );
91 QByteArray __qByteArray;
92 QDataStream __qDataStream( &__qByteArray, QIODevice::WriteOnly );
93 for(
int __i=0; __i < _qListTreeWidgetItems.count(); __i++ )
95 QTreeWidgetItem* __pqTreeWidgetItem = _qListTreeWidgetItems.at( __i );
98 __poVesselPoint->
serialize( __qDataStream );
100 QMimeData* __pqMimeData =
new QMimeData();
101 __pqMimeData->setData(
"application/qvct.vesselpoint", __qByteArray );
107 if( !_pqTreeWidgetItem )
return false;
108 QByteArray __qByteArray = _pqMimeData->data(
"application/qvct.vesselpoint" );
109 QDataStream __qDataStream( &__qByteArray, QIODevice::ReadOnly );
111 while( !__qDataStream.atEnd() )
115 _pqTreeWidgetItem->insertChild( _iIndex, __poVesselPoint );
117 if( __poVesselPoint ) QTreeWidget::setCurrentItem( __poVesselPoint );
123 QTreeWidget::dropEvent( _pqDropEvent );
135 int __iCount = QTreeWidgetItem::childCount();
136 for(
int __i = 0; __i < __iCount; __i++ )
137 ((
CVesselContainer*)QTreeWidgetItem::child( __i ))->draw( _poChart, _pqPainter );
142 if( !_pqTreeWidgetItem )
return;
143 switch( _pqTreeWidgetItem->type() )
187 switch( _pqTreeWidgetItem->type() )
191 if( _pqTreeWidgetItem->isExpanded() )
return;
216 int __iCount = QTreeWidgetItem::childCount();
217 for(
int __i = __iCount-1 ; __i >= 0; __i-- )
221 if( __poOverlayPoint )
return __poOverlayPoint;
233 bool bRedraw =
false;
234 switch( _pqTreeWidgetItem->type() )
256 __poVesselContainer->
setName( _pqTreeWidgetItem->text(
NAME ) );
259 __poVesselContainer->
setVisible( _pqTreeWidgetItem->checkState(
VISIBLE ) == Qt::Checked );
273 __poVesselPoint->
setName( _pqTreeWidgetItem->text(
NAME ) );
277 __poVesselPoint->
setVisible( _pqTreeWidgetItem->checkState(
VISIBLE ) == Qt::Checked );
313 __qColor.setAlpha( 128 );
315 __qColor.setAlpha( 192 );
316 qPenText.setColor( QColor::fromHsv( __qColor.hue(), __qColor.saturation(), std::min( 128, __qColor.value() ), 192 ) );
325 QTreeWidgetItem::addChild( __poVesselContainer );
326 QTreeWidgetItem::setExpanded(
true );
327 return __poVesselContainer;
333 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
334 __iCount += ((
CVesselContainer*)QTreeWidgetItem::child( __i ))->deleteSelection();
340 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
341 while( __pqTreeWidgetItem )
344 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
350 QFileInfo __qFileInfo( _rqsFilename );
356 QFileInfo __qFileInfo( _rqsFilename );
357 QFile __qFile( __qFileInfo.absoluteFilePath() );
358 if( !__qFile.open( QIODevice::ReadOnly ) )
360 __qsError = QString(
"Failed to open file (%1)" ).arg( __qFile.fileName() );
363 QDomDocument __qDocDocument;
364 if( !__qDocDocument.setContent( &__qFile ) )
366 __qsError = QString(
"Failed to parse XML (%1)" ).arg( __qFile.fileName() );
373 QDomElement __qDomElement = __qDocDocument.documentElement();
374 QString __qDocType = __qDomElement.nodeName();
375 if( __qDomElement.isNull() || __qDocType !=
"QVCT" )
377 __qsError = QString(
"Invalid XML document type (%1); expected: 'QVCT'" ).arg( __qFile.fileName() );
380 parseQVCT( __qDomElement, &__poVesselContainer );
383 if( !__qsError.isEmpty() )
385 qCritical(
"ERROR[%s]: %s", Q_FUNC_INFO, qPrintable( __qsError ) );
389 QTreeWidgetItem::setExpanded(
true );
390 return __poVesselContainer;
397 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Flotilla" );
398 !__qDomElement.isNull();
399 __qDomElement = __qDomElement.nextSiblingElement(
"Flotilla" ) )
402 QString __qsName = __qDomElement.attribute(
"name" );
406 __poVesselContainer->
parseQVCT( __qDomElement );
407 QTreeWidgetItem::addChild( __poVesselContainer );
409 if( _ppoVesselContainer ) *_ppoVesselContainer = __poVesselContainer;
415 QFileInfo __qFileInfo( _rqsFilename );
416 QString __qsFormat = __qFileInfo.suffix();
417 if( __qsFormat !=
"qvct" )
419 qCritical(
"ERROR[%s]: Invalid file format/extention (%s); expected: 'qvct'", Q_FUNC_INFO, qPrintable( __qsFormat ) );
424 QFile __qFile( __qFileInfo.absoluteFilePath() );
425 if( !__qFile.open( QIODevice::WriteOnly ) )
427 qCritical(
"ERROR[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
432 QXmlStreamWriter __qXmlStreamWriter( &__qFile );
433 __qXmlStreamWriter.setAutoFormatting(
true );
434 __qXmlStreamWriter.writeStartDocument();
437 dumpQVCT( __qXmlStreamWriter, _poVesselContainer );
440 __qXmlStreamWriter.writeEndDocument();
449 if( !_bProjectDump ) _rqXmlStreamWriter.writeStartElement(
"QVCT" );
451 if( _poVesselContainer )
453 _poVesselContainer->
dumpQVCT( _rqXmlStreamWriter,
false );
457 int __iCount = QTreeWidgetItem::childCount();
458 for(
int __i = 0; __i < __iCount; __i++ )
459 ((
CVesselContainer*)QTreeWidgetItem::child( __i ))->dumpQVCT( _rqXmlStreamWriter, !_bProjectDump );
462 if( !_bProjectDump ) _rqXmlStreamWriter.writeEndElement();
[UI] Virtual "chart table" (view)
bool extendPointerPath(const CDataPosition &_roGeoPosition)
Extends the pointer path; returns true if is was actually extended, false otherwise.
void setScaleArea(const CDataPosition &_roGeoPosition1, const CDataPosition &_roGeoPosition2, double _fdScaleCorrection=1.0)
Sets the reference scale factor to display the given (geographical) area (defined by its opposite cor...
void updateChart()
Update the (current) chart content (on screen)
bool setPointerTarget(const CDataPosition &_roGeoPosition)
Sets the pointer target's position; returns true if is was actually set, false otherwise.
void showGeoPosition(const CDataPosition &_roGeoPosition)
Shows the given (geographical) position on chart.
void setGeoPosition(const CDataPosition &_roGeoPosition, bool _bSkipCurrent=false)
Sets the reference chart (geographical) position.
(Geographical) Position data [long,lat,elev]
static const CDataPosition UNDEFINED
Specific value for an undefined position.
void fileError(QVCT::EFileOperation _eFileOperation, const QString &_rqsFilename)
Displays a generic error message for an invalid file name and operation (open/save)
Generic overlay base (tree widget)
void destroy()
Prepare the underlying QTreeWidget for destruction.
void setMultiSelected(bool _bMultiSelected)
Sets this item's selection status.
@ SUBITEM1
Sub-item (type 1)
@ SUBITEM2
Sub-item (type 2)
void setName(const QString &_rqsName)
Sets this object's name.
static int getPositionBox(const QTreeWidgetItem *_pqTreeWidgetItem, CDataPosition *_poDataPositionLower, CDataPosition *_poDataPositionUpper, int _iIndexMin=0, int _iIndexMax=-1)
Returns the minimal geographical positions box containing the points in the given overlay/container.
void setVisible(bool _bVisible)
Sets the point's (marker) visibility status.
void setVisible(bool _bVisible)
Sets this overlay items' global visibility status.
QString newChildName(const QString &_rqsName, int __iZeroPrefix=0, bool __bForceSuffix=false) const
Returns a valid name for a new sibling of this object.
QPen qPenLine
QPen used to draw lines on this overlay.
QPen qPenVector
QPen used to draw vectors on this overlay.
QPen qPenText
QPen used to draw text on this overlay.
bool bVisible
Overlay items' global visibility status.
void forceRedraw()
Forces this overlay's rendering (not matter its cache content)
QString qsName
Overlay name.
QBrush qBrushMarker
QBrush used to draw markers on this overlay.
QPen qPenMarker
QPen used to draw markers on this overlay.
QColor getColorVessel()
[Color] Returns the vessel overlay's base color
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
[UI] Vessel overlay container / flotilla
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
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...
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given QVCT destination (file)
int parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
virtual void onChange(QTreeWidgetItem *_pqTreeWidgetItem, int __iColumn)
Handles item (content) changes in the underlying QTreeWidget.
CVesselOverlay(QWidget *_pqParent=0)
virtual COverlayPoint * matchScrPosition(const CChart *_poChart, const QPointF &_rqPointFScrPosition) const
Returns the overlay's point that (first) matches the given screen position (0 if none is found)
virtual QStringList mimeTypes() const
void save(const QString &_rqsFilename, CVesselContainer *_poVesselContainer=0) const
Save this object's content (container) to the given file (all selected items if no container is given...
void importSettings()
Imports settings from the application's global settings.
void clear()
Clear the entire content of this overlay.
virtual void drawContent(const CChart *_poChart, QPainter *_pqPainter) const
Draws this overlay's content.
virtual void dropEvent(QDropEvent *_pqDropEvent)
int deleteSelection()
Deletes selected items within this overlay's containers.
virtual bool dropMimeData(QTreeWidgetItem *_pqTreeWidgetItem, int _iIndex, const QMimeData *_pqMimeData, Qt::DropAction eAction)
@ SELECT
Vessel selection status.
@ VISIBLE
Vessel visibility status.
CVesselContainer * addContainer(const QString &_rqsName)
Add a new vessel (container) to this overlay.
virtual void showDetail(const QTreeWidgetItem *_pqTreeWidgetItem) const
Displays the given overlay object's details (in the appropriate widget/view)
int parseQVCT(const QDomElement &_rqDomElement, CVesselContainer **_ppoVesselContainer=0)
Retrieves this object's content from the given QVCT source (file)
virtual void setPosition(const QTreeWidgetItem *_pqTreeWidgetItem) const
Centers the chart on the given overlay object's position.
virtual ~CVesselOverlay()
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, CVesselContainer *_poVesselContainer=0, bool _bProjectDump=false) const
Stores this object's content to the given QVCT destination (file)
CVesselContainer * load(const QString &_rqsFilename)
Load this object's content from the given file and returns the last loaded container (0 if none)
virtual QMimeData * mimeData(const QList< QTreeWidgetItem * > _qListTreeWidgetItems) const
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
[UI] Vessel overlay point (item) / vessel
virtual void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
virtual void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
static CMainWindow * useMainWindow()
static CChartTable * useChartTable()
static CSettings * useSettings()