21 #include <QDataStream>
22 #include <QDomDocument>
28 #include <QStringList>
29 #include <QTreeWidget>
30 #include <QTreeWidgetItem>
32 #include <QXmlStreamWriter>
49 QTreeWidget::setColumnCount( 2 );
50 QTreeWidget::setColumnWidth(
NAME, 200 );
52 QTreeWidgetItem* __pqTreeWidgetItem =
new QTreeWidgetItem();
53 __pqTreeWidgetItem->setText(
NAME, tr(
"Name") );
54 __pqTreeWidgetItem->setIcon(
SELECT, QIcon(
":icons/16x16/select.png" ) );
55 QTreeWidget::setHeaderItem( __pqTreeWidgetItem );
56 QTreeWidget::resizeColumnToContents(
SELECT );
58 QTreeWidgetItem::setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable );
75 if( !_pqTreeWidgetItem )
return;
76 switch( _pqTreeWidgetItem->type() )
102 switch( _pqTreeWidgetItem->type() )
134 int __iCount = QTreeWidgetItem::childCount();
135 for(
int __i = 0; __i < __iCount; __i++ )
138 if( __poDevice->
getName() == _rqsName )
return __poDevice;
146 for(
int __i = QTreeWidgetItem::childCount()-1; __i >= 0; __i-- )
152 QTreeWidgetItem::removeChild( __poDevice );
161 QTreeWidgetItem* __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
162 while( __pqTreeWidgetItem )
164 delete (
CDevice*)__pqTreeWidgetItem;
165 __pqTreeWidgetItem = QTreeWidgetItem::takeChild( 0 );
171 QFileInfo __qFileInfo( _rqsFilename );
177 QFileInfo __qFileInfo( _rqsFilename );
178 QFile __qFile( __qFileInfo.absoluteFilePath() );
179 if( !__qFile.open( QIODevice::ReadOnly ) )
181 __qsError = QString(
"Failed to open file (%1)" ).arg( __qFile.fileName() );
184 QDomDocument __qDocDocument;
185 if( !__qDocDocument.setContent( &__qFile ) )
187 __qsError = QString(
"Failed to parse XML (%1)" ).arg( __qFile.fileName() );
194 QDomElement __qDomElement = __qDocDocument.documentElement();
195 QString __qDocType = __qDomElement.nodeName();
196 if( __qDomElement.isNull() || __qDocType !=
"QVCT" )
198 __qsError = QString(
"Invalid XML document type (%1); expected: 'QVCT'" ).arg( __qFile.fileName() );
204 if( !__qsError.isEmpty() )
206 qCritical(
"ERROR[%s]: %s", Q_FUNC_INFO, qPrintable( __qsError ) );
210 QTreeWidgetItem::setExpanded(
true );
218 for( QDomElement __qDomElement = _rqDomElement.firstChildElement(
"Device" );
219 !__qDomElement.isNull();
220 __qDomElement = __qDomElement.nextSiblingElement(
"Device" ) )
223 QString __qsName = __qDomElement.attribute(
"name" );
226 QString __qsDriver = __qDomElement.attribute(
"driver" );
230 qCritical(
"ERROR[%s]: Missing or invalid device driver code (%s)", Q_FUNC_INFO, qPrintable( __qsDriver ) );
235 QTreeWidgetItem::addChild( __poDevice );
237 if( _ppoDevice ) *_ppoDevice = __poDevice;
243 QFileInfo __qFileInfo( _rqsFilename );
244 QString __qsFormat = __qFileInfo.suffix();
245 if( __qsFormat !=
"qvct" )
247 qCritical(
"ERROR[%s]: Invalid file format/extention (%s); expected: 'qvct'", Q_FUNC_INFO, qPrintable( __qsFormat ) );
252 QFile __qFile( __qFileInfo.absoluteFilePath() );
253 if( !__qFile.open( QIODevice::WriteOnly ) )
255 qCritical(
"ERROR[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
260 QXmlStreamWriter __qXmlStreamWriter( &__qFile );
261 __qXmlStreamWriter.setAutoFormatting(
true );
262 __qXmlStreamWriter.writeStartDocument();
265 dumpQVCT( __qXmlStreamWriter, _poDevice, _bApplicationDump );
268 __qXmlStreamWriter.writeEndDocument();
277 _rqXmlStreamWriter.writeStartElement(
"QVCT" );
281 _poDevice->
dumpQVCT( _rqXmlStreamWriter );
285 int __iCount = QTreeWidgetItem::childCount();
286 for(
int __i = 0; __i < __iCount; __i++ )
290 __poDevice->
dumpQVCT( _rqXmlStreamWriter );
294 _rqXmlStreamWriter.writeEndElement();
@ UNDEFINED
Undefined driver.
static CDevice * createDevice(const QString &_rqsDeviceName, EDriver _eDriver)
Create a new device based on the specified driver.
static EDriver fromCode(const QString &_rqsCode)
Returns the device driver ID corresponding to the given machine-friendly code.
CDeviceOverlay(QWidget *_pqParent=0)
int deleteSelection()
Deletes selected devices from this overlay.
void clear()
Clear the entire content of this overlay.
CDevice * pickDevice(const QString &_rqsName)
Returns the device matching the given name (0 if none is found)
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, CDevice *_poDevice=0, bool _bApplicationDump=false) const
Stores this object's content to the given QVCT destination (file)
virtual void showDetail(const QTreeWidgetItem *_pqTreeWidgetItem) const
Displays the given overlay object's details (in the appropriate widget/view)
@ SELECT
Device selection status.
int parseQVCT(const QDomElement &_rqDomElement, CDevice **_ppoDevice=0)
Retrieves this object's content from the given QVCT source (file)
void save(const QString &_rqsFilename, CDevice *_poDevice=0, bool _bApplicationDump=false) const
Save this object's content (device) to the given file (all selected items if no device is given)
virtual void onChange(QTreeWidgetItem *_pqTreeWidgetItem, int __iColumn)
Handles item (content) changes in the underlying QTreeWidget.
virtual ~CDeviceOverlay()
CDevice * load(const QString &_rqsFilename, bool _bSilent=false)
Load this object's content from the given file and returns the last loaded device (0 if none)
Generic navigation device (GPS, speedometer, compass, etc.)
virtual void showDetail()=0
Displays the device's details (in the appropriate widget/view)
virtual void parseQVCT(const QDomElement &_rqDomElement)=0
Retrieves the device's configuration from the given QVCT source (file)
virtual void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter) const =0
Stores the device's configuration to the given QVCT destination (file)
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.
bool isMultiSelected() const
Returns this item's selection status.
QString getName() const
Returns this object's name.
QString newChildName(const QString &_rqsName, int __iZeroPrefix=0, bool __bForceSuffix=false) const
Returns a valid name for a new sibling of this object.
QString qsName
Overlay name.
static CMainWindow * useMainWindow()