#include <QLayout>
#include <QMouseEvent>
+//! Profile data structre constructor
+HYDROGUI_GeoreferencementDlg::ProfileGeoData::ProfileGeoData(
+ const QString& theXg, const QString& theYg,
+ const QString& theXd, const QString& theYd)
+{
+ this->isEmpty = theXg.isEmpty() && theYg.isEmpty() &&
+ theXd.isEmpty() && theYd.isEmpty();
+ this->isIncomplete = !isEmpty;
+
+ if ( isIncomplete ) {
+ bool isOk = false;
+
+ this->Xg= theXg.toDouble( &isOk );
+ if ( isOk ) {
+ this->Yg = theYg.toDouble( &isOk );
+ if ( isOk ) {
+ this->Xd = theXd.toDouble( &isOk );
+ if ( isOk ) {
+ this->Yd = theYd.toDouble( &isOk );
+ this->isIncomplete = !isOk;
+ }
+ }
+ }
+ }
+}
+
//! Custom item delegate (line edit with double validator)
class HYDROGUI_GeoreferencementDlg::Delegate : public QItemDelegate
{
QWidget* anEditor = 0;
if ( theIndex.column() > 0 ) {
- QVariant aData = theIndex.data( Qt::DisplayRole );
-
QLineEdit* aLineEdit = new QLineEdit( theParent );
aLineEdit->setValidator( new QDoubleValidator( aLineEdit ) );
- aLineEdit->setText( aData.toString() );
-
anEditor = aLineEdit;
- }
-
- if ( !anEditor) {
+ } else {
anEditor = QItemDelegate::createEditor( theParent, theOption, theIndex );
}
void HYDROGUI_GeoreferencementDlg::Delegate::setEditorData(
QWidget* theEditor, const QModelIndex& theIndex ) const
{
- QLineEdit* anEditor = qobject_cast<QLineEdit*>( theEditor );
- if ( anEditor ) {
- anEditor->setText( theIndex.data( Qt::EditRole ).toString() );
+ if ( QLineEdit* aLineEdit = dynamic_cast<QLineEdit*>( theEditor ) ) {
+ aLineEdit->setText( theIndex.data( Qt::EditRole ).toString() );
+ } else {
+ QItemDelegate::setEditorData( theEditor, theIndex );
}
}
void HYDROGUI_GeoreferencementDlg::Delegate::setModelData(
QWidget* theEditor, QAbstractItemModel* theModel, const QModelIndex& theIndex) const
{
- QLineEdit* anEditor = qobject_cast<QLineEdit*>( theEditor );
- if ( anEditor ) {
- theModel->setData( theIndex, anEditor->text() );
+ if ( QLineEdit* aLineEdit = dynamic_cast<QLineEdit*>( theEditor ) ) {
+ theModel->setData( theIndex, aLineEdit->text() );
+ } else {
+ QItemDelegate::setModelData( theEditor, theModel, theIndex );
}
}
// Get georeferencement data for the current profile
ProfileGeoData aGeoData = theMap.value( aProfileName );
QString aXg, anYg, aXd, anYd;
- if ( aGeoData.isValid ) {
+ if ( !aGeoData.isEmpty ) {
aXg = getString( aGeoData.Xg );
anYg = getString( aGeoData.Yg );
aXd = getString( aGeoData.Xd );
// Fill the map
bool isOk = false;
+ QString aXg, anYg, aXd, anYd;
for ( int aRow = 0; aRow < myTable->rowCount(); aRow++ ) {
QString aProfileName = myTable->item( aRow, 0 )->text();
- theMap.insert( aProfileName, ProfileGeoData() );
-
- double aXg, anYg, aXd, anYd;
-
- aXg = myTable->item( aRow, 1 )->text().toDouble( &isOk );
- if ( !isOk ) continue;
-
- anYg = myTable->item( aRow, 2 )->text().toDouble( &isOk );
- if ( !isOk ) continue;
-
- aXd = myTable->item( aRow, 3 )->text().toDouble( &isOk );
- if ( !isOk ) continue;
-
- anYd = myTable->item( aRow, 4 )->text().toDouble( &isOk );
- if ( !isOk ) continue;
+ aXg = myTable->item( aRow, 1 )->text();
+ anYg = myTable->item( aRow, 2 )->text();
+ aXd = myTable->item( aRow, 3 )->text();
+ anYd = myTable->item( aRow, 4 )->text();
- theMap[aProfileName] = ProfileGeoData( aXg, anYg, aXd, anYd );
+ theMap.insert( aProfileName, ProfileGeoData( aXg, anYg, aXd, anYd ) );
}
}