20 #include <QDomElement>
22 #include <QFileDialog>
25 #include <QTreeWidgetItem>
45 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled );
53 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
54 while( __pqTreeWidgetItem )
57 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
82 int __iCount = QTreeWidgetItem::childCount();
83 if( !__iCount )
return;
87 __poRoutePointFrom->
draw( _poChart, _pqPainter );
91 for(
int __i = 1; __i < __iCount; __i++ )
93 __poRoutePointTo = (
CRoutePoint*)QTreeWidgetItem::child( __i );
94 __poRoutePointFrom->
drawLine( _poChart, _pqPainter, __poRoutePointTo );
95 __poRoutePointFrom->
draw( _poChart, _pqPainter );
96 __poRoutePointFrom = __poRoutePointTo;
98 __poRoutePointTo->
draw( _poChart, _pqPainter );
113 if( __poRouteContainerEditView->exec() == QDialog::Accepted )
showDetail();
114 delete __poRouteContainerEditView;
125 int __iCount = QTreeWidgetItem::childCount();
126 for(
int __i = __iCount-1 ; __i >= 0; __i-- )
130 return __poOverlayPoint;
143 int __iCount = QTreeWidgetItem::childCount();
144 for(
int __i = 0; __i < __iCount; __i++ )
151 int __iCount = QTreeWidgetItem::childCount();
152 for(
int __i = 0; __i < __iCount; __i++ )
159 int __iCount = QTreeWidgetItem::childCount();
160 for(
int __i = 0; __i < __iCount; __i++ )
169 int __iCount = QTreeWidgetItem::childCount();
170 for(
int __i = 0; __i < __iCount; __i++ )
192 int __iCount = QTreeWidgetItem::childCount();
193 int __iIndex = __iCount;
194 if( _bMinimizeLength && __iCount > 1 )
196 QTreeWidgetItem::insertChild( __iIndex, __poRoutePoint );
197 return __poRoutePoint;
202 int __iCount = QTreeWidgetItem::childCount();
203 if( __iCount < 2 )
return 0.0;
206 double __fdLength = 0;
207 for(
int __i = 1; __i < __iCount; __i++ )
209 __poRoutePathTo = (
CRoutePoint*)QTreeWidgetItem::child( __i );
211 __poRoutePathFrom = __poRoutePathTo;
218 int __iCount = QTreeWidgetItem::childCount();
219 if( __iCount < 2 )
return __iCount;
226 double __fdLengthCurrent = 0;
227 for(
int __i = 1; __i < __iCount; __i++ )
229 __poRoutePathTo = (
CRoutePoint*)QTreeWidgetItem::child( __i );
233 __poRoutePathFrom = __poRoutePathTo;
237 int __iIndexBest = __iCount;
238 double __fdLengthBest = __fdLengthCurrent +
CDataPosition::length( *__poRoutePathFrom, _roDataPosition );
239 for(
int __iIndexCandidate = 1; __iIndexCandidate < __iCount; __iIndexCandidate++ )
241 double __fdLengthCandidate = __fdLengthCurrent;
242 for(
int __i = 1; __i < __iCount; __i++ )
244 if( __i == __iIndexCandidate )
246 __poRoutePathFrom = (
CRoutePoint*)QTreeWidgetItem::child( __i-1 );
247 __poRoutePathTo = (
CRoutePoint*)QTreeWidgetItem::child( __i );
253 if( __fdLengthCandidate <= __fdLengthBest || __fdLengthBest < 0 )
255 __iIndexBest = __iIndexCandidate;
256 __fdLengthBest = __fdLengthCandidate;
266 qsType = _rqDomElement.attribute(
"type" );
267 qsUrl = _rqDomElement.attribute(
"url" );
268 qsDescription = _rqDomElement.firstChildElement(
"Description" ).text();
269 qsComment = _rqDomElement.firstChildElement(
"Comment" ).text();
271 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Point" );
272 !__qDomElement.isNull();
273 __qDomElement = __qDomElement.nextSiblingElement(
"Point" ) )
276 QString __qsName = __qDomElement.attribute(
"name" );
279 __poRoutePoint->
parseQVCT( __qDomElement );
280 addChild( __poRoutePoint );
288 qsType = _rqDomElement.firstChildElement(
"type" ).text();
289 qsDescription = _rqDomElement.firstChildElement(
"desc" ).text();
290 qsComment = _rqDomElement.firstChildElement(
"cmt" ).text();
291 qsUrl = _rqDomElement.firstChildElement(
"link" ).attribute(
"href" );
293 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"rtept" );
294 !__qDomElement.isNull();
295 __qDomElement = __qDomElement.nextSiblingElement(
"rtept" ) )
298 QString __qsName = __qDomElement.firstChildElement(
"name" ).text();
301 __poRoutePoint->
parseGPX( __qDomElement );
302 addChild( __poRoutePoint );
310 _rqXmlStreamWriter.writeStartElement(
"Route" );
312 if( !
qsName.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"name",
qsName );
316 if( !
qsType.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"type",
qsType );
318 if( !
qsUrl.isEmpty() ) _rqXmlStreamWriter.writeAttribute(
"url",
qsUrl );
322 _rqXmlStreamWriter.writeStartElement(
"Description" );
324 _rqXmlStreamWriter.writeEndElement();
329 _rqXmlStreamWriter.writeStartElement(
"Comment" );
330 _rqXmlStreamWriter.writeCDATA(
qsComment );
331 _rqXmlStreamWriter.writeEndElement();
334 int __iCount = QTreeWidgetItem::childCount();
335 for(
int __i = 0; __i < __iCount; __i++ )
339 __poRoutePoint->
dumpQVCT( _rqXmlStreamWriter );
342 _rqXmlStreamWriter.writeEndElement();
350 _rqXmlStreamWriter.writeStartElement(
"rte" );
354 _rqXmlStreamWriter.writeStartElement(
"name" );
355 _rqXmlStreamWriter.writeCharacters(
qsName );
356 _rqXmlStreamWriter.writeEndElement();
361 _rqXmlStreamWriter.writeStartElement(
"type" );
362 _rqXmlStreamWriter.writeCharacters(
qsType );
363 _rqXmlStreamWriter.writeEndElement();
368 _rqXmlStreamWriter.writeStartElement(
"desc" );
370 _rqXmlStreamWriter.writeEndElement();
375 _rqXmlStreamWriter.writeStartElement(
"cmt" );
376 _rqXmlStreamWriter.writeCDATA(
qsComment );
377 _rqXmlStreamWriter.writeEndElement();
380 if( !
qsUrl.isEmpty() )
382 _rqXmlStreamWriter.writeStartElement(
"link" );
383 _rqXmlStreamWriter.writeAttribute(
"href",
qsUrl );
384 _rqXmlStreamWriter.writeEndElement();
387 int __iCount = QTreeWidgetItem::childCount();
388 for(
int __i = 0; __i < __iCount; __i++ )
392 __poRoutePoint->
dumpGPX( _rqXmlStreamWriter );
395 _rqXmlStreamWriter.writeEndElement();
401 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
407 QTreeWidgetItem::removeChild( __poRoutePoint );
408 delete __poRoutePoint;
void setOverlayObjectSelected(COverlayObject *_poOverlayObject)
Sets the currently selected overlay object.
(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 double length(const CDataPosition &_roPosition1, const CDataPosition &_roPosition2)
Returns the length (rhumb-line distance and elevation delta) between two points, in meters.
Generic overlay container.
void switchView(EView eView)
Displays the requested container/item details (switching to the appropriate widget)
@ ROUTE_CONTAINER
Route 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.
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.
int getVisibility() const
Returns the global (coded) visibility status.
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
virtual void refreshContent()
Refreshes the content of the underlying widget.
[UI] Route container's edit view
virtual void setVisiblePosition(bool _bVisiblePosition)
Sets the position's visibility status.
QString qsComment
Route's comment.
virtual void setVisibleRouting(bool _bVisibleRouting)
Sets the routing's (data) visibility status.
virtual void toggleVisibility()
virtual ~CRouteContainer()
virtual void setVisibleName(bool _bVisibleName)
Sets the name's (tag) visibility status.
virtual void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
CRoutePoint * addPoint(const QString &_rqsName, const CDataPosition &_roDataPosition=CDataPosition::UNDEFINED, bool _bMinimizeLength=false)
Add a new route (item/point) to this container.
virtual void draw(const CChart *_poChart, QPainter *_pqPainter)
Draws this object (itself or its content)
int deleteSelection()
Deletes selected items within this container.
double getLengthRL()
Returns the route's (rhumb-line) length.
QString qsUrl
Route's URL.
int getInsertIndexMinLength(const CDataPosition &_roDataPosition)
Returns the given point insertion index that minimizes the route's (rhumb-line) length.
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.
QString qsDescription
Route's description.
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...
CRouteContainer(const QString &_rqsName)
int parseGPX(const QDomElement &_rqDomElement)
Retrieves this object's content from the given GPX source (file)
virtual void showEdit()
Displays this object's edit widget/view.
QString qsType
Route's type.
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)
void dumpGPX(QXmlStreamWriter &_rqXmlStreamWriter, bool bOnlySelected=false) const
Stores this object's content to the given GPX destination (file)
@ VISIBLE
Route visibility status.
[UI] Route overlay point (item) / waypoint
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)
void parseQVCT(const QDomElement &_rqDomElement)
Retrieves this object's content from the given QVCT source (file)
virtual void draw(const CChart *_poChart, QPainter *_pqPainter)
Draws this object (itself or its content)
void parseGPX(const QDomElement &_rqDomElement)
Retrieves this object's content from the given GPX source (file)
static COverlayDetailView * useOverlayDetailView()
static COverlayListView * useOverlayListView()
static CChartTable * useChartTable()
static CRouteContainerDetailView * useRouteContainerDetailView()