Qt Virtual Chart Table (QVCT)
CLandmarkOverlay.cpp
Go to the documentation of this file.
1 // INDENTING (emacs/vi): -*- mode:c++; tab-width:2; c-basic-offset:2; intent-tabs-mode:nil; -*- ex: set tabstop=2 expandtab:
2 
3 /*
4  * Qt Virtual Chart Table (QVCT)
5  * Copyright (C) 2012 Cedric Dufour <http://cedric.dufour.name>
6  * Author: Cedric Dufour <http://cedric.dufour.name>
7  *
8  * The Qt Virtual Chart Table (QVCT) is free software:
9  * you can redistribute it and/or modify it under the terms of the GNU General
10  * Public License as published by the Free Software Foundation, Version 3.
11  *
12  * The Qt Virtual Chart Table (QVCT) is distributed in the hope
13  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  *
16  * See the GNU General Public License for more details.
17  */
18 
19 // QT
20 #include <QByteArray>
21 #include <QDataStream>
22 #include <QDomDocument> // QtXml module
23 #include <QFileInfo>
24 #include <QList>
25 #include <QMimeData>
26 #include <QPainter>
27 #include <QPointF>
28 #include <QStringList>
29 #include <QTreeWidget>
30 #include <QTreeWidgetItem>
31 #include <QWidget>
32 #include <QXmlStreamWriter>
33 
34 // QVCT
35 #include "QVCTRuntime.hpp"
40 
41 
42 //------------------------------------------------------------------------------
43 // CONSTRUCTORS / DESTRUCTOR
44 //------------------------------------------------------------------------------
45 
47  : COverlayBaseTree( _pqParent, tr("Landmarks") )
48 {
50 
51  // Tree widget
52  // ... columns
53  QTreeWidget::setColumnCount( 3 );
54  QTreeWidget::setColumnWidth( NAME, 184 );
55  // ... header
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 );
63  // ... top-level item
64  QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable );
65  QTreeWidgetItem::setText( NAME, COverlay::qsName );
66  QTreeWidgetItem::setCheckState( VISIBLE, Qt::Checked );
67  // ... drag 'n drop
68  QTreeWidget::setDragDropMode( QAbstractItemView::InternalMove );
69 }
70 
72 {
74  clear();
75 }
76 
77 
78 //------------------------------------------------------------------------------
79 // METHODS: QTreeWidget (implement/override)
80 //------------------------------------------------------------------------------
81 
82 QStringList CLandmarkOverlay::mimeTypes() const
83 {
84  static const QStringList __qStringList( "application/qvct.landmarkpoint" );
85  return __qStringList;
86 }
87 
88 QMimeData* CLandmarkOverlay::mimeData( const QList<QTreeWidgetItem*> _qListTreeWidgetItems ) const
89 {
90  QByteArray __qByteArray;
91  QDataStream __qDataStream( &__qByteArray, QIODevice::WriteOnly );
92  for( int __i=0; __i < _qListTreeWidgetItems.count(); __i++ )
93  {
94  QTreeWidgetItem* __pqTreeWidgetItem = _qListTreeWidgetItems.at( __i );
95  if( __pqTreeWidgetItem->type() != COverlayObject::ITEM ) continue;
96  ((CLandmarkPoint*)__pqTreeWidgetItem)->serialize( __qDataStream );
97  }
98  QMimeData* __pqMimeData = new QMimeData();
99  __pqMimeData->setData( "application/qvct.landmarkpoint", __qByteArray );
100  return __pqMimeData;
101 }
102 
103 bool CLandmarkOverlay::dropMimeData ( QTreeWidgetItem* _pqTreeWidgetItem, int _iIndex, const QMimeData* _pqMimeData, Qt::DropAction eAction )
104 {
105  if( !_pqTreeWidgetItem ) return false;
106  QByteArray __qByteArray = _pqMimeData->data( "application/qvct.landmarkpoint" );
107  QDataStream __qDataStream( &__qByteArray, QIODevice::ReadOnly );
108  CLandmarkPoint* __poLandmarkPoint = 0;
109  while( !__qDataStream.atEnd() )
110  {
111  __poLandmarkPoint = new CLandmarkPoint( "#MIMEDATA#" );
112  __poLandmarkPoint->unserialize( __qDataStream );
113  _pqTreeWidgetItem->insertChild( _iIndex, __poLandmarkPoint );
114  }
115  if( __poLandmarkPoint ) QTreeWidget::setCurrentItem( __poLandmarkPoint );
116  return true;
117 }
118 
119 
120 //------------------------------------------------------------------------------
121 // METHODS: COverlay (implement/override)
122 //------------------------------------------------------------------------------
123 
124 void CLandmarkOverlay::drawContent( const CChart* _poChart, QPainter* _pqPainter ) const
125 {
126  if( !bVisible ) return;
127  int __iCount = QTreeWidgetItem::childCount();
128  for( int __i = 0; __i < __iCount; __i++ )
129  ((CLandmarkContainer*)QTreeWidgetItem::child( __i ))->draw( _poChart, _pqPainter );
130 }
131 
132 void CLandmarkOverlay::showDetail( const QTreeWidgetItem* _pqTreeWidgetItem ) const
133 {
134  if( !_pqTreeWidgetItem ) return;
135  switch( _pqTreeWidgetItem->type() )
136  {
137 
139  {
140  CLandmarkContainer* __poLandmarkContainer = (CLandmarkContainer*)_pqTreeWidgetItem;
141  __poLandmarkContainer->showDetail();
142  }
143  break;
144 
146  {
147  CLandmarkPoint* __poLandmarkPoint = (CLandmarkPoint*)_pqTreeWidgetItem;
148  CChartTable* __poChartTable = QVCTRuntime::useChartTable();
149  if( __poLandmarkPoint->CDataPosition::operator!=( CDataPosition::UNDEFINED )
150  && ( __poChartTable->setPointerTarget( *__poLandmarkPoint )
151  || __poChartTable->extendPointerPath( *__poLandmarkPoint ) ) )
152  __poChartTable->showGeoPosition( *__poLandmarkPoint );
153  else
154  __poLandmarkPoint->showDetail();
155  }
156  break;
157 
158  default:;
159 
160  }
161 }
162 
163 void CLandmarkOverlay::setPosition( const QTreeWidgetItem* _pqTreeWidgetItem ) const
164 {
165  switch( _pqTreeWidgetItem->type() )
166  {
167 
169  if( _pqTreeWidgetItem->isExpanded() ) return; // NOTE: Expansion switch is handled *AFTER* this method is called
170  {
171  CDataPosition __oDataPositionLower, __oDataPositionUpper;
172  int __iCount = COverlayPoint::getPositionBox( (CLandmarkContainer*)_pqTreeWidgetItem, &__oDataPositionLower, &__oDataPositionUpper );
173  if( __iCount > 1 ) QVCTRuntime::useChartTable()->setScaleArea( __oDataPositionLower, __oDataPositionUpper, 0.9 );
174  else if( __iCount == 1 ) QVCTRuntime::useChartTable()->setGeoPosition( __oDataPositionLower );
175  }
176  break;
177 
179  {
180  CLandmarkPoint* __poLandmarkPoint = (CLandmarkPoint*)_pqTreeWidgetItem;
181  if( __poLandmarkPoint->CDataPosition::operator==( CDataPosition::UNDEFINED ) ) return;
182  QVCTRuntime::useChartTable()->setGeoPosition( *__poLandmarkPoint );
183  }
184  break;
185 
186  default:;
187 
188  }
189 }
190 
191 COverlayPoint* CLandmarkOverlay::matchScrPosition( const CChart* _poChart, const QPointF& _rqPointFScrPosition ) const
192 {
193  if( !bVisible ) return 0;
194  int __iCount = QTreeWidgetItem::childCount();
195  for( int __i = __iCount-1 ; __i >= 0; __i-- ) // we must go in the reverse order of CLandmarkOverlay::draw() to pick the correct (overlapping) item
196  {
197  CLandmarkContainer* __poLandmarkContainer = (CLandmarkContainer*)QTreeWidgetItem::child( __i );
198  COverlayPoint* __poOverlayPoint = __poLandmarkContainer->matchScrPosition( _poChart, _rqPointFScrPosition );
199  if( __poOverlayPoint ) return __poOverlayPoint;
200  }
201  return 0;
202 }
203 
204 
205 //------------------------------------------------------------------------------
206 // METHODS: COverlayBaseTree (implement/override)
207 //------------------------------------------------------------------------------
208 
209 void CLandmarkOverlay::onChange( QTreeWidgetItem* _pqTreeWidgetItem, int _iColumn )
210 {
211  bool bRedraw = false;
212  switch( _pqTreeWidgetItem->type() )
213  {
214 
216  {
217  switch( _iColumn )
218  {
219  case VISIBLE:
220  COverlay::setVisible( _pqTreeWidgetItem->checkState( VISIBLE ) == Qt::Checked );
221  bRedraw = true;
222  break;
223  default:;
224  }
225  }
226  break;
227 
229  {
230  CLandmarkContainer* __poLandmarkContainer = (CLandmarkContainer*)_pqTreeWidgetItem;
231  switch( _iColumn )
232  {
233  case NAME:
234  __poLandmarkContainer->setName( _pqTreeWidgetItem->text( NAME ) );
235  break;
236  case VISIBLE:
237  __poLandmarkContainer->setVisible( _pqTreeWidgetItem->checkState( VISIBLE ) == Qt::Checked );
238  bRedraw = true;
239  break;
240  default:;
241  }
242  }
243  break;
244 
246  {
247  CLandmarkPoint* __poLandmarkPoint = (CLandmarkPoint*)_pqTreeWidgetItem;
248  switch( _iColumn )
249  {
250  case NAME:
251  __poLandmarkPoint->setName( _pqTreeWidgetItem->text( NAME ) );
252  bRedraw = true;
253  break;
254  case VISIBLE:
255  __poLandmarkPoint->setVisible( _pqTreeWidgetItem->checkState( VISIBLE ) == Qt::Checked );
256  bRedraw = true;
257  break;
258  case SELECT:
259  __poLandmarkPoint->setMultiSelected( _pqTreeWidgetItem->checkState( SELECT ) == Qt::Checked );
260  bRedraw = true;
261  break;
262  default:;
263  }
264  }
265  break;
266 
267  default:;
268 
269  }
270 
271  // Redraw
272  if( bRedraw )
273  {
276  }
277 }
278 
279 
280 //------------------------------------------------------------------------------
281 // METHODS
282 //------------------------------------------------------------------------------
283 
284 //
285 // OTHER
286 //
287 
289 {
290  QColor __qColor = QVCTRuntime::useSettings()->getColorLandmark();
291  __qColor.setAlpha( 128 );
292  qBrushMarker.setColor( __qColor );
293  __qColor.setAlpha( 192 );
294  qPenText.setColor( QColor::fromHsv( __qColor.hue(), __qColor.saturation(), std::min( 128, __qColor.value() ), 192 ) );
295  qPenMarker.setColor( __qColor );
296  qPenLine.setColor( __qColor );
297  qPenVector.setColor( __qColor );
298 }
299 
301 {
302  CLandmarkContainer* __poLandmarkContainer = new CLandmarkContainer( _rqsName );
303  QTreeWidgetItem::addChild( __poLandmarkContainer );
304  QTreeWidgetItem::setExpanded( true );
305  return __poLandmarkContainer;
306 }
307 
309 {
310  int __iCount = QTreeWidgetItem::childCount();
311  if( !__iCount ) return addContainer( COverlay::newChildName( "Landmarks", 1, true ) );
312  if( __iCount == 1 ) return (CLandmarkContainer*)QTreeWidgetItem::child( 0 );
313  // else: we must have the user choose among the available containers
314  COverlayObject* __poOverlayObject = 0;
315  CLandmarkContainerPickView* __poLandmarkContainerPickView = new CLandmarkContainerPickView( this, &__poOverlayObject );
316  __poLandmarkContainerPickView->exec();
317  delete __poLandmarkContainerPickView;
318  return (CLandmarkContainer*)__poOverlayObject;
319 }
320 
322 {
323  int __iCount = 0;
324  for( int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
325  __iCount += ((CLandmarkContainer*)QTreeWidgetItem::child( __i ))->deleteSelection();
326  return __iCount;
327 }
328 
330 {
331  QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
332  while( __pqTreeWidgetItem )
333  {
334  delete (CLandmarkContainer*)__pqTreeWidgetItem;
335  __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
336  }
337 }
338 
339 CLandmarkContainer* CLandmarkOverlay::load( const QString& _rqsFilename )
340 {
341  QFileInfo __qFileInfo( _rqsFilename );
342  CLandmarkContainer* __poLandmarkContainer = 0;
343  QString __qsError;
344  do // error-catching context [begin]
345  {
346  // File
347  QFileInfo __qFileInfo( _rqsFilename );
348  QFile __qFile( __qFileInfo.absoluteFilePath() );
349  if( !__qFile.open( QIODevice::ReadOnly ) )
350  {
351  __qsError = QString( "Failed to open file (%1)" ).arg( __qFile.fileName() );
352  break;
353  }
354  QDomDocument __qDocDocument;
355  if( !__qDocDocument.setContent( &__qFile ) )
356  {
357  __qsError = QString( "Failed to parse XML (%1)" ).arg( __qFile.fileName() );
358  __qFile.close();
359  break;
360  }
361  __qFile.close();
362 
363  // XML
364  QDomElement __qDomElement = __qDocDocument.documentElement();
365  QString __qDocType = __qDomElement.nodeName();
366  if( __qDomElement.isNull() || ( __qDocType != "QVCT" && __qDocType != "gpx" ) )
367  {
368  __qsError = QString( "Invalid XML document type (%1); expected: 'QVCT' or 'gpx'" ).arg( __qFile.fileName() );
369  break;
370  }
371  if( __qDocType == "QVCT" ) parseQVCT( __qDomElement, &__poLandmarkContainer );
372  else if( __qDocType == "gpx" )
373  {
374  __poLandmarkContainer = new CLandmarkContainer( COverlay::newChildName( __qFileInfo.baseName() ) );
375  __poLandmarkContainer->parseGPX( __qDomElement );
376  QTreeWidgetItem::addChild( __poLandmarkContainer );
377  }
378  }
379  while( false ); // error-catching context [end]
380  if( !__qsError.isEmpty() )
381  {
382  qCritical( "ERROR[%s]: %s", Q_FUNC_INFO, qPrintable( __qsError ) );
383  QVCTRuntime::useMainWindow()->fileError( QVCT::OPEN, _rqsFilename );
384  return 0;
385  }
386  QTreeWidgetItem::setExpanded( true );
387  return __poLandmarkContainer;
388 }
389 
390 int CLandmarkOverlay::parseQVCT( const QDomElement& _rqDomElement, CLandmarkContainer** _ppoLandmarkContainer )
391 {
392  CLandmarkContainer* __poLandmarkContainer = 0;
393  int __iCount = 0;
394  for( QDomElement __qDomElement = _rqDomElement.firstChildElement( "Landmarks" );
395  !__qDomElement.isNull();
396  __qDomElement = __qDomElement.nextSiblingElement( "Landmarks" ) )
397  {
398  __iCount++;
399  __poLandmarkContainer = new CLandmarkContainer( COverlay::newChildName( __qDomElement.attribute( "name", tr("Landmarks") ) ) );
400  __poLandmarkContainer->parseQVCT( __qDomElement );
401  QTreeWidgetItem::addChild( __poLandmarkContainer );
402  }
403  if( _ppoLandmarkContainer ) *_ppoLandmarkContainer = __poLandmarkContainer;
404  return __iCount;
405 }
406 
407 void CLandmarkOverlay::save( const QString& _rqsFilename, CLandmarkContainer* _poLandmarkContainer ) const
408 {
409  QFileInfo __qFileInfo( _rqsFilename );
410  QString __qsFormat = __qFileInfo.suffix();
411  if( __qsFormat != "qvct" && __qsFormat != "gpx" )
412  {
413  qCritical( "ERROR[%s]: Invalid file format/extention (%s); expected: 'qvct' or 'gpx'", Q_FUNC_INFO, qPrintable( __qsFormat ) );
414  return;
415  }
416 
417  // File [open]
418  QFile __qFile( __qFileInfo.absoluteFilePath() );
419  if( !__qFile.open( QIODevice::WriteOnly ) )
420  {
421  qCritical( "ERROR[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
422  return;
423  }
424 
425  // XML [start]
426  QXmlStreamWriter __qXmlStreamWriter( &__qFile );
427  __qXmlStreamWriter.setAutoFormatting( true );
428  __qXmlStreamWriter.writeStartDocument();
429 
430  // Data
431  if( __qsFormat == "qvct" ) dumpQVCT( __qXmlStreamWriter, _poLandmarkContainer );
432  else if( __qsFormat == "gpx" ) dumpGPX( __qXmlStreamWriter, _poLandmarkContainer );
433 
434  // XML [end]
435  __qXmlStreamWriter.writeEndDocument();
436 
437  // File [close]
438  __qFile.close();
439 }
440 
441 void CLandmarkOverlay::dumpQVCT( QXmlStreamWriter & _rqXmlStreamWriter, CLandmarkContainer* _poLandmarkContainer, bool _bProjectDump ) const
442 {
443  // Data
444  if( !_bProjectDump ) _rqXmlStreamWriter.writeStartElement( "QVCT" );
445  // ... containers
446  if( _poLandmarkContainer )
447  {
448  _poLandmarkContainer->dumpQVCT( _rqXmlStreamWriter, false );
449  }
450  else // no container given; assume selection dump or full dump
451  {
452  int __iCount = QTreeWidgetItem::childCount();
453  for( int __i = 0; __i < __iCount; __i++ )
454  ((CLandmarkContainer*)QTreeWidgetItem::child( __i ))->dumpQVCT( _rqXmlStreamWriter, !_bProjectDump );
455  }
456  // ... [end]
457  if( !_bProjectDump ) _rqXmlStreamWriter.writeEndElement(); // QVCT
458 }
459 
460 void CLandmarkOverlay::dumpGPX( QXmlStreamWriter & _rqXmlStreamWriter, CLandmarkContainer* _poLandmarkContainer ) const
461 {
462  // GPX format reference: see http://www.topografix.com/GPX/1/1/
463 
464  // Data
465  _rqXmlStreamWriter.writeStartElement( "gpx" );
466  _rqXmlStreamWriter.writeAttribute( "version", "1.1" );
467  _rqXmlStreamWriter.writeAttribute( "creator", "Qt Virtual Chart Table (QVCT)" );
468  // ... containers
469  if( _poLandmarkContainer )
470  {
471  _poLandmarkContainer->dumpGPX( _rqXmlStreamWriter, false );
472  }
473  else // no container given; assume selection dump
474  {
475  int __iCount = QTreeWidgetItem::childCount();
476  for( int __i = 0; __i < __iCount; __i++ )
477  ((CLandmarkContainer*)QTreeWidgetItem::child( __i ))->dumpGPX( _rqXmlStreamWriter, true );
478  }
479  // ... [end]
480  _rqXmlStreamWriter.writeEndElement(); // gpx
481 }
[UI] Virtual "chart table" (view)
Definition: CChartTable.hpp:55
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.
[UI] Chart (view)
Definition: CChart.hpp:44
(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.
@ NAME
Landmark name.
@ 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.
Generic overlay object.
@ CONTAINER
Container.
@ OVERLAY
(Base) overlay
void setName(const QString &_rqsName)
Sets this object's name.
Generic overlay point.
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.
Definition: COverlay.hpp:113
QString newChildName(const QString &_rqsName, int __iZeroPrefix=0, bool __bForceSuffix=false) const
Returns a valid name for a new sibling of this object.
Definition: COverlay.cpp:123
QPen qPenLine
QPen used to draw lines on this overlay.
Definition: COverlay.hpp:91
QPen qPenVector
QPen used to draw vectors on this overlay.
Definition: COverlay.hpp:94
QPen qPenText
QPen used to draw text on this overlay.
Definition: COverlay.hpp:76
bool bVisible
Overlay items' global visibility status.
Definition: COverlay.hpp:56
void forceRedraw()
Forces this overlay's rendering (not matter its cache content)
Definition: COverlay.hpp:115
QString qsName
Overlay name.
Definition: COverlay.hpp:52
QBrush qBrushMarker
QBrush used to draw markers on this overlay.
Definition: COverlay.hpp:79
QPen qPenMarker
QPen used to draw markers on this overlay.
Definition: COverlay.hpp:82
QColor getColorLandmark()
[Color] Returns the landmark overlay's base color
Definition: CSettings.hpp:414
static CMainWindow * useMainWindow()
static CChartTable * useChartTable()
static CSettings * useSettings()
@ OPEN
Definition: QVCT.hpp:42