21 #include <QDomElement>
25 #include <QTreeWidgetItem>
26 #include <QXmlStreamWriter>
42 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled );
49 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
50 while( __pqTreeWidgetItem )
53 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
79 double __fdZoom = _poChart->
getZoom();
80 if( __fdZoom < 0.5 ) __fdZoom = 0.5;
81 else if( __fdZoom > 2.0 ) __fdZoom = 2.0;
85 __qPenMultiSelected.setWidth( __qPenLine.width() * __fdZoom );
88 int __iCount = QTreeWidgetItem::childCount();
89 if( !__iCount )
return;
98 if( __poOverlayObjectSelected == __poTrackPointFrom ||
99 __poOverlayObjectSelected ==
this ||
100 __poOverlayObjectSelected == QTreeWidgetItem::parent() )
101 __poTrackPointFrom->COverlayPoint::drawMarker( _poChart, _pqPainter, 0,
true );
102 __poTrackPointFrom->COverlayPoint::drawTag( _poChart, _pqPainter );
105 for(
int __i = 1; __i < __iCount; __i++ )
107 __poTrackPointTo = (
CTrackPoint*)QTreeWidgetItem::child( __i );
108 __poTrackPointFrom->
drawLine( _poChart, _pqPainter, __poTrackPointTo );
111 _pqPainter->setPen( __qPenMultiSelected );
112 _pqPainter->drawPoint( _poChart->
toDrawPosition( *__poTrackPointFrom ) );
114 __poTrackPointFrom = __poTrackPointTo;
117 if( __poTrackPointTo &&
124 _pqPainter->setPen( __qPenMultiSelected );
125 _pqPainter->drawPoint( _poChart->
toDrawPosition( *__poTrackPointTo ) );
127 if( __poOverlayObjectSelected == __poTrackPointTo ||
128 __poOverlayObjectSelected ==
this ||
129 __poOverlayObjectSelected == QTreeWidgetItem::parent() )
130 __poTrackPointTo->COverlayPoint::drawMarker( _poChart, _pqPainter, 0,
true );
131 __poTrackPointTo->COverlayPoint::drawTag( _poChart, _pqPainter );
152 int __iCount = QTreeWidgetItem::childCount();
153 for(
int __i = __iCount-1 ; __i >= 0; __i-- )
157 return __poOverlayPoint;
170 int __iCount = QTreeWidgetItem::childCount();
171 for(
int __i = 0; __i < __iCount; __i++ )
178 int __iCount = QTreeWidgetItem::childCount();
179 for(
int __i = 0; __i < __iCount; __i++ )
186 int __iCount = QTreeWidgetItem::childCount();
187 for(
int __i = 0; __i < __iCount; __i++ )
196 int __iCount = QTreeWidgetItem::childCount();
197 for(
int __i = 0; __i < __iCount; __i++ )
217 int __iCount = QTreeWidgetItem::childCount();
218 if( !__iCount )
return 0;
219 return (
CTrackPoint*)QTreeWidgetItem::child( __iCount-1 );
226 QTreeWidgetItem::addChild( __poTrackPoint );
227 return __poTrackPoint;
232 int __iCount = QTreeWidgetItem::childCount();
233 if( __iCount < 2 )
return 0.0;
236 double __fdLength = 0;
237 for(
int __i = 1; __i < __iCount; __i++ )
239 __poTrackPointTo = (
CTrackPoint*)QTreeWidgetItem::child( __i );
241 __poTrackPointFrom = __poTrackPointTo;
248 int __iCount = QTreeWidgetItem::childCount();
249 if( __iCount < 2 )
return 0.0;
252 if( __poTrackPointFirst->
getTime() < 0 || __poTrackPointLast->
getTime() < 0 )
return 0.0;
253 return( __poTrackPointLast->
getTime() - __poTrackPointFirst->
getTime() );
261 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Point" );
262 !__qDomElement.isNull();
263 __qDomElement = __qDomElement.nextSiblingElement(
"Point" ) )
267 QString __qsName_aux = __qDomElement.attribute(
"time" );
268 if( !__qsName_aux.isEmpty() ) __qsName =
CUnitTime::toString( QDateTime::fromString( __qsName_aux, Qt::ISODate ).toTime_t() );
269 if( __qsName.isEmpty() ) __qsName = __qDomElement.firstChildElement(
"name" ).text();
272 __poTrackPoint->
parseQVCT( __qDomElement );
273 addChild( __poTrackPoint );
282 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"trkpt" );
283 !__qDomElement.isNull();
284 __qDomElement = __qDomElement.nextSiblingElement(
"trkpt" ) )
288 QString __qsName_aux = __qDomElement.firstChildElement(
"time" ).text();
289 if( !__qsName_aux.isEmpty() ) __qsName =
CUnitTime::toString( QDateTime::fromString( __qsName_aux, Qt::ISODate ).toTime_t() );
290 if( __qsName.isEmpty() ) __qsName = __qDomElement.firstChildElement(
"name" ).text();
293 __poTrackPoint->
parseGPX( __qDomElement );
294 addChild( __poTrackPoint );
301 int __iCount = QTreeWidgetItem::childCount();
302 if( !__iCount )
return;
305 _rqXmlStreamWriter.writeStartElement(
"Segment" );
309 for(
int __i = 0; __i < __iCount; __i++ )
313 __poTrackPoint->
dumpQVCT( _rqXmlStreamWriter );
316 _rqXmlStreamWriter.writeEndElement();
322 int __iCount = QTreeWidgetItem::childCount();
323 if( !__iCount )
return;
326 _rqXmlStreamWriter.writeStartElement(
"trkseg" );
328 for(
int __i = 0; __i < __iCount; __i++ )
332 __poTrackPoint->
dumpGPX( _rqXmlStreamWriter );
335 _rqXmlStreamWriter.writeEndElement();
341 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
347 QTreeWidgetItem::removeChild( __poTrackPoint );
348 delete __poTrackPoint;
COverlayObject * getOverlayObjectSelected() const
Returns the currently selected overlay object.
void setOverlayObjectSelected(COverlayObject *_poOverlayObject)
Sets the currently selected overlay object.
double getZoom() const
Returns the current zoom factor.
QRectF getDrawArea() const
Returns the viewport draw area.
QPointF toDrawPosition(const CDataPosition &_roGeoPosition) const
Converts the given (geographical) position [long,lat,elev] to chart draw point [px].
(Geographical) Position data [long,lat,elev]
static double distanceRL(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the rhumb-line distance between two points, in meters.
static const CDataPosition UNDEFINED
Specific value for an undefined position.
double getTime() const
Returns this time's time, in seconds from Unix epoch.
Generic overlay container.
void switchView(EView eView)
Displays the requested container/item details (switching to the appropriate widget)
@ TRACK_SUBCONTAINER
Track sub-container (segment)
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 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 drawLine(const CChart *_poChart, QPainter *_pqPainter, const COverlayPoint *_poOverlayPoint)
Draws a line (between this and the other specified point), including distance/bearing data.
bool bVisibleRouting
Routing's (data) 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 setVisibleRouting(bool _bVisibleRouting)
Sets the routing's (data) 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.
bool isVisible() const
Returns the point's (marker) visibility status.
int getVisibility() const
Returns the global (coded) visibility status.
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
const QPen & getPenMarkerSelected() const
const QPen & getPenLine() const
int getScreenDpi()
[Misc] Returns the screen Dots-per-Inch (DPI)
@ VISIBLE
Track visibility status.
[UI] Track overlay point (item)
void parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
void parseGPX(const QDomElement &_rqDomElement)
Retrieves this object's content from the given GPX source (file)
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter) const
Stores this object's content to the given QVCT destination (file)
void dumpGPX(QXmlStreamWriter &_rqXmlStreamWriter) const
Stores this object's content to the given GPX destination (file)
virtual void refreshContent()
Refreshes the content of the underlying widget.
int parseGPX(const QDomElement &_rqDomElement)
Retrieves this object's content from the given GPX source (file)
virtual void showDetail()
Displays this object's details (in the appropriate widget/view)
virtual void setVisibleRouting(bool _bVisibleRouting)
Sets the routing's (data) visibility status.
CTrackSubContainer(const QString &_rqsName)
int deleteSelection()
Deletes selected items within this sub-container.
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
double getLengthRL()
Returns the track's (rhumb-line) length.
virtual void draw(const CChart *_poChart, QPainter *_pqPainter)
Draws this object (itself or its content)
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given QVCT destination (file)
virtual void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
CTrackPoint * getLastPoint()
Returns the last track (item/point) from this sub-container (0 if none is found)
CTrackPoint * addPoint(const QString &_rqsName, const CDataPosition &_roDataPosition=CDataPosition::UNDEFINED)
Add a new track (item/point) to this sub-container.
double getTimeElapsed()
Returns the track's elapsed time.
virtual void setVisiblePosition(bool _bVisiblePosition)
Sets the position's visibility status.
int parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
virtual void toggleVisibility()
virtual ~CTrackSubContainer()
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 dumpGPX(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given GPX destination (file)
static QString toString(double _fdValue, CUnitTimeZone::EUnit _eUnitTimeZone, EUnit _eUnit, int _iPrecision=0)
Returns the formatted represention of the given value, using the specified format/unit and decimal pr...
static COverlayDetailView * useOverlayDetailView()
static COverlayListView * useOverlayListView()
static CChartTable * useChartTable()
static CTrackSubContainerDetailView * useTrackSubContainerDetailView()
static CSettings * useSettings()
static CTrackOverlay * useTrackOverlay()