21 #include <QDataStream>
22 #include <QDomDocument>
28 #include <QStringList>
29 #include <QTreeWidget>
30 #include <QTreeWidgetItem>
32 #include <QXmlStreamWriter>
53 QTreeWidget::setColumnCount( 3 );
54 QTreeWidget::setColumnWidth(
NAME, 184 );
56 QTreeWidgetItem* __pqTreeWidgetItem =
new QTreeWidgetItem();
57 __pqTreeWidgetItem->setText(
NAME, tr(
"Name") );
58 __pqTreeWidgetItem->setIcon(
VISIBLE, QIcon(
":icons/16x16/visible.png" ) );
59 __pqTreeWidgetItem->setIcon(
SELECT, QIcon(
":icons/16x16/select.png" ) );
60 QTreeWidget::setHeaderItem( __pqTreeWidgetItem );
61 QTreeWidget::resizeColumnToContents(
VISIBLE );
62 QTreeWidget::resizeColumnToContents(
SELECT );
64 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable );
66 QTreeWidgetItem::setCheckState(
VISIBLE, Qt::Checked );
68 QTreeWidget::setDragDropMode( QAbstractItemView::InternalMove );
84 static const QStringList __qStringList(
"application/qvct.landmarkpoint" );
90 QByteArray __qByteArray;
91 QDataStream __qDataStream( &__qByteArray, QIODevice::WriteOnly );
92 for(
int __i=0; __i < _qListTreeWidgetItems.count(); __i++ )
94 QTreeWidgetItem* __pqTreeWidgetItem = _qListTreeWidgetItems.at( __i );
98 QMimeData* __pqMimeData =
new QMimeData();
99 __pqMimeData->setData(
"application/qvct.landmarkpoint", __qByteArray );
105 if( !_pqTreeWidgetItem )
return false;
106 QByteArray __qByteArray = _pqMimeData->data(
"application/qvct.landmarkpoint" );
107 QDataStream __qDataStream( &__qByteArray, QIODevice::ReadOnly );
109 while( !__qDataStream.atEnd() )
113 _pqTreeWidgetItem->insertChild( _iIndex, __poLandmarkPoint );
115 if( __poLandmarkPoint ) QTreeWidget::setCurrentItem( __poLandmarkPoint );
127 int __iCount = QTreeWidgetItem::childCount();
128 for(
int __i = 0; __i < __iCount; __i++ )
134 if( !_pqTreeWidgetItem )
return;
135 switch( _pqTreeWidgetItem->type() )
165 switch( _pqTreeWidgetItem->type() )
169 if( _pqTreeWidgetItem->isExpanded() )
return;
194 int __iCount = QTreeWidgetItem::childCount();
195 for(
int __i = __iCount-1 ; __i >= 0; __i-- )
199 if( __poOverlayPoint )
return __poOverlayPoint;
211 bool bRedraw =
false;
212 switch( _pqTreeWidgetItem->type() )
234 __poLandmarkContainer->
setName( _pqTreeWidgetItem->text(
NAME ) );
237 __poLandmarkContainer->
setVisible( _pqTreeWidgetItem->checkState(
VISIBLE ) == Qt::Checked );
251 __poLandmarkPoint->
setName( _pqTreeWidgetItem->text(
NAME ) );
255 __poLandmarkPoint->
setVisible( _pqTreeWidgetItem->checkState(
VISIBLE ) == Qt::Checked );
291 __qColor.setAlpha( 128 );
293 __qColor.setAlpha( 192 );
294 qPenText.setColor( QColor::fromHsv( __qColor.hue(), __qColor.saturation(), std::min( 128, __qColor.value() ), 192 ) );
303 QTreeWidgetItem::addChild( __poLandmarkContainer );
304 QTreeWidgetItem::setExpanded(
true );
305 return __poLandmarkContainer;
310 int __iCount = QTreeWidgetItem::childCount();
316 __poLandmarkContainerPickView->exec();
317 delete __poLandmarkContainerPickView;
324 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
331 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
332 while( __pqTreeWidgetItem )
335 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
341 QFileInfo __qFileInfo( _rqsFilename );
347 QFileInfo __qFileInfo( _rqsFilename );
348 QFile __qFile( __qFileInfo.absoluteFilePath() );
349 if( !__qFile.open( QIODevice::ReadOnly ) )
351 __qsError = QString(
"Failed to open file (%1)" ).arg( __qFile.fileName() );
354 QDomDocument __qDocDocument;
355 if( !__qDocDocument.setContent( &__qFile ) )
357 __qsError = QString(
"Failed to parse XML (%1)" ).arg( __qFile.fileName() );
364 QDomElement __qDomElement = __qDocDocument.documentElement();
365 QString __qDocType = __qDomElement.nodeName();
366 if( __qDomElement.isNull() || ( __qDocType !=
"QVCT" && __qDocType !=
"gpx" ) )
368 __qsError = QString(
"Invalid XML document type (%1); expected: 'QVCT' or 'gpx'" ).arg( __qFile.fileName() );
371 if( __qDocType ==
"QVCT" )
parseQVCT( __qDomElement, &__poLandmarkContainer );
372 else if( __qDocType ==
"gpx" )
375 __poLandmarkContainer->
parseGPX( __qDomElement );
376 QTreeWidgetItem::addChild( __poLandmarkContainer );
380 if( !__qsError.isEmpty() )
382 qCritical(
"ERROR[%s]: %s", Q_FUNC_INFO, qPrintable( __qsError ) );
386 QTreeWidgetItem::setExpanded(
true );
387 return __poLandmarkContainer;
394 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Landmarks" );
395 !__qDomElement.isNull();
396 __qDomElement = __qDomElement.nextSiblingElement(
"Landmarks" ) )
400 __poLandmarkContainer->
parseQVCT( __qDomElement );
401 QTreeWidgetItem::addChild( __poLandmarkContainer );
403 if( _ppoLandmarkContainer ) *_ppoLandmarkContainer = __poLandmarkContainer;
409 QFileInfo __qFileInfo( _rqsFilename );
410 QString __qsFormat = __qFileInfo.suffix();
411 if( __qsFormat !=
"qvct" && __qsFormat !=
"gpx" )
413 qCritical(
"ERROR[%s]: Invalid file format/extention (%s); expected: 'qvct' or 'gpx'", Q_FUNC_INFO, qPrintable( __qsFormat ) );
418 QFile __qFile( __qFileInfo.absoluteFilePath() );
419 if( !__qFile.open( QIODevice::WriteOnly ) )
421 qCritical(
"ERROR[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
426 QXmlStreamWriter __qXmlStreamWriter( &__qFile );
427 __qXmlStreamWriter.setAutoFormatting(
true );
428 __qXmlStreamWriter.writeStartDocument();
431 if( __qsFormat ==
"qvct" )
dumpQVCT( __qXmlStreamWriter, _poLandmarkContainer );
432 else if( __qsFormat ==
"gpx" )
dumpGPX( __qXmlStreamWriter, _poLandmarkContainer );
435 __qXmlStreamWriter.writeEndDocument();
444 if( !_bProjectDump ) _rqXmlStreamWriter.writeStartElement(
"QVCT" );
446 if( _poLandmarkContainer )
448 _poLandmarkContainer->
dumpQVCT( _rqXmlStreamWriter,
false );
452 int __iCount = QTreeWidgetItem::childCount();
453 for(
int __i = 0; __i < __iCount; __i++ )
454 ((
CLandmarkContainer*)QTreeWidgetItem::child( __i ))->dumpQVCT( _rqXmlStreamWriter, !_bProjectDump );
457 if( !_bProjectDump ) _rqXmlStreamWriter.writeEndElement();
465 _rqXmlStreamWriter.writeStartElement(
"gpx" );
466 _rqXmlStreamWriter.writeAttribute(
"version",
"1.1" );
467 _rqXmlStreamWriter.writeAttribute(
"creator",
"Qt Virtual Chart Table (QVCT)" );
469 if( _poLandmarkContainer )
471 _poLandmarkContainer->
dumpGPX( _rqXmlStreamWriter,
false );
475 int __iCount = QTreeWidgetItem::childCount();
476 for(
int __i = 0; __i < __iCount; __i++ )
477 ((
CLandmarkContainer*)QTreeWidgetItem::child( __i ))->dumpGPX( _rqXmlStreamWriter,
true );
480 _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.
[UI] Landmark container's pick (select) view
[UI] Landmark overlay 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...
int parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given QVCT destination (file)
void dumpGPX(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given GPX destination (file)
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
int parseGPX(const QDomElement &_rqDomElement)
Retrieves this object's content from the given GPX source (file)
virtual void showDetail(const QTreeWidgetItem *_pqTreeWidgetItem) const
Displays the given overlay object's details (in the appropriate widget/view)
void importSettings()
Imports settings from the application's global settings.
void save(const QString &_rqsFilename, CLandmarkContainer *_poLandmarkContainer=0) const
Save this object's content (container) to the given file (all selected items if no container is given...
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)
CLandmarkContainer * addContainer(const QString &_rqsName)
Add a new landmarks set (container) to this overlay.
@ SELECT
Landmark selection status.
@ VISIBLE
Landmark visibility status.
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, CLandmarkContainer *_poLandmarkContainer=0, bool _bProjectDump=false) const
Stores this object's content to the given QVCT destination (file)
int parseQVCT(const QDomElement &_rqDomElement, CLandmarkContainer **_ppoLandmarkContainer=0)
Retrieves this object's content from the given QVCT source (file)
virtual void drawContent(const CChart *_poChart, QPainter *_pqPainter) const
Draws this overlay's content.
int deleteSelection()
Deletes selected items within this overlay's containers.
CLandmarkOverlay(QWidget *_pqParent=0)
CLandmarkContainer * load(const QString &_rqsFilename)
Load this object's content from the given file and returns the last loaded container (0 if none)
CLandmarkContainer * pickContainer()
Pick (select) a container among the available ones (0 if none is selected)
virtual QMimeData * mimeData(const QList< QTreeWidgetItem * > _qListTreeWidgetItems) const
void dumpGPX(QXmlStreamWriter &_rqXmlStreamWriter, CLandmarkContainer *_poLandmarkContainer=0) const
Stores this object's content to the given GPX destination (file)
virtual void setPosition(const QTreeWidgetItem *_pqTreeWidgetItem) const
Centers the chart on the given overlay object's position.
virtual void onChange(QTreeWidgetItem *_pqTreeWidgetItem, int __iColumn)
Handles item (content) changes in the underlying QTreeWidget.
virtual bool dropMimeData(QTreeWidgetItem *_pqTreeWidgetItem, int _iIndex, const QMimeData *_pqMimeData, Qt::DropAction eAction)
virtual ~CLandmarkOverlay()
virtual QStringList mimeTypes() const
void clear()
Clear the entire content of this overlay.
[UI] Landmark overlay point (item)
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
virtual void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
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.
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 getColorLandmark()
[Color] Returns the landmark overlay's base color
static CMainWindow * useMainWindow()
static CChartTable * useChartTable()
static CSettings * useSettings()