Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Only one X and Y column
  • Loading branch information
YoannQDQ committed Apr 17, 2023
1 parent bb9b4a9 commit 191417e
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 48 deletions.
87 changes: 58 additions & 29 deletions src/app/qgsmeasuredialog.cpp
Expand Up @@ -63,7 +63,6 @@ QgsMeasureDialog::QgsMeasureDialog( QgsMeasureTool *tool, Qt::WindowFlags f )
// Toggle the coordinates columns visibility
connect( mShowCoordinates, &QCheckBox::clicked, this, &QgsMeasureDialog::showCoordinatesChanged );
showCoordinatesChanged();

}
else
{
Expand Down Expand Up @@ -148,10 +147,16 @@ void QgsMeasureDialog::crsChanged()

void QgsMeasureDialog::showCoordinatesChanged()
{
mTable->setColumnHidden( Columns::StartX, !mShowCoordinates->isChecked() );
mTable->setColumnHidden( Columns::StartY, !mShowCoordinates->isChecked() );
mTable->setColumnHidden( Columns::EndX, !mShowCoordinates->isChecked() );
mTable->setColumnHidden( Columns::EndY, !mShowCoordinates->isChecked() );
// if Show Coordinates is unchecked, Hide the X and Y columns
mTable->setColumnHidden( Columns::X, !mShowCoordinates->isChecked() );
mTable->setColumnHidden( Columns::Y, !mShowCoordinates->isChecked() );

// The first row contains the first point, with no computed distance
// so we hide it if Show Coordinates is unchecked
if ( mTable->topLevelItemCount() > 0 )
{
mTable->topLevelItem( 0 )->setHidden( !mShowCoordinates->isChecked() );
}
}

void QgsMeasureDialog::updateSettings()
Expand Down Expand Up @@ -256,10 +261,8 @@ void QgsMeasureDialog::mouseMove( const QgsPointXY &point )
QTreeWidgetItem *item = mTable->topLevelItem( mTable->topLevelItemCount() - 1 );
if ( item )
{
item->setText( Columns::StartX, QLocale().toString( p1.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::StartY, QLocale().toString( p1.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndX, QLocale().toString( p2.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndY, QLocale().toString( p2.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::X, QLocale().toString( p2.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( p2.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Distance, QLocale().toString( d, 'f', mDecimalPlaces ) );
}
}
Expand All @@ -277,12 +280,25 @@ void QgsMeasureDialog::addPoint()
{
if ( !mTool->done() )
{
if ( numPoints == 1 )
{
// First point, so we add a first item, with no computed distance and only the coordinates
QTreeWidgetItem *item = new QTreeWidgetItem();
QgsPointXY lastPoint = mTool->points().last();
item->setText( Columns::X, QLocale().toString( lastPoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( lastPoint.y(), 'f', mDecimalPlacesCoordinates ) );
mTable->addTopLevelItem( item );

// Hide the first item if Show Coordinates is unchecked
if ( !mShowCoordinates->isChecked() )
{
item->setHidden( true );
}
}
QTreeWidgetItem *item = new QTreeWidgetItem();
QgsPointXY lastPoint = mTool->points().last();
item->setText( Columns::StartX, QLocale().toString( lastPoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::StartY, QLocale().toString( lastPoint.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndX, QLocale().toString( lastPoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndY, QLocale().toString( lastPoint.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::X, QLocale().toString( lastPoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( lastPoint.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Distance, QLocale().toString( 0.0, 'f', mDecimalPlaces ) );
item->setTextAlignment( Columns::Distance, Qt::AlignRight );
mTable->addTopLevelItem( item );
Expand Down Expand Up @@ -331,10 +347,8 @@ void QgsMeasureDialog::removeLastPoint()
d = convertLength( d, mDistanceUnits );

QTreeWidgetItem *item = mTable->topLevelItem( mTable->topLevelItemCount() - 1 );
item->setText( Columns::StartX, QLocale().toString( p1.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::StartY, QLocale().toString( p1.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndX, QLocale().toString( mLastMousePoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndY, QLocale().toString( mLastMousePoint.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::X, QLocale().toString( mLastMousePoint.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( mLastMousePoint.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Distance, QLocale().toString( d, 'f', mDecimalPlaces ) );
editTotal->setText( formatDistance( mTotal + d ) );
}
Expand Down Expand Up @@ -633,15 +647,29 @@ void QgsMeasureDialog::updateUi()
else
{
QVector<QgsPointXY>::const_iterator it;
bool b = true; // first point
bool firstPoint = true;

QgsPointXY p1, p2;
mTotal = 0;
const QVector< QgsPointXY > tmpPoints = mTool->points();
for ( it = tmpPoints.constBegin(); it != tmpPoints.constEnd(); ++it )
{
p2 = *it;
if ( !b )
if ( firstPoint )
{
// Create an additional item for the first point (no distance)
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText( Columns::X, QLocale().toString( p2.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( p2.y(), 'f', mDecimalPlacesCoordinates ) );
mTable->addTopLevelItem( item );

// Hide the first row if the coordinates are not shown
if ( !mShowCoordinates->isChecked() )
{
item->setHidden( true );
}
}
else
{
double d = -1;
d = mDa.measureLine( p1, p2 );
Expand All @@ -654,17 +682,15 @@ void QgsMeasureDialog::updateUi()
}

QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText( Columns::StartX, QLocale().toString( p1.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::StartY, QLocale().toString( p1.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndX, QLocale().toString( p2.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::EndY, QLocale().toString( p2.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::X, QLocale().toString( p2.x(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Y, QLocale().toString( p2.y(), 'f', mDecimalPlacesCoordinates ) );
item->setText( Columns::Distance, QLocale().toString( d, 'f', mDecimalPlaces ) );
item->setTextAlignment( Columns::Distance, Qt::AlignRight );
mTable->addTopLevelItem( item );
mTable->scrollToItem( item );
}
p1 = p2;
b = false;
firstPoint = false;
}

mTotal = mDa.measureLine( mTool->points() );
Expand Down Expand Up @@ -719,19 +745,22 @@ double QgsMeasureDialog::convertArea( double area, Qgis::AreaUnit toUnit ) const
return mDa.convertAreaMeasurement( area, toUnit );
}

void QgsMeasureDialog::copyMeasurements( bool copyCoordinates )
void QgsMeasureDialog::copyMeasurements( bool copyCoordinates, QString separator )
{
QClipboard *clipboard = QApplication::clipboard();
QString text;
QTreeWidgetItemIterator it( mTable );
// Discard the first item if show coordinates is not checked
if ( !copyCoordinates )
{
it++;
}
while ( *it )
{
if ( copyCoordinates )
{
text += ( *it )->text( Columns::StartX ) + QStringLiteral( "\t" );
text += ( *it )->text( Columns::EndX ) + QStringLiteral( "\t" );
text += ( *it )->text( Columns::StartY ) + QStringLiteral( "\t" );
text += ( *it )->text( Columns::EndY ) + QStringLiteral( "\t" );
text += ( *it )->text( Columns::X ) + separator;
text += ( *it )->text( Columns::Y ) + separator;
}
text += ( *it )->text( Columns::Distance ) + QStringLiteral( "\n" );
it++;
Expand Down
8 changes: 3 additions & 5 deletions src/app/qgsmeasuredialog.h
Expand Up @@ -74,7 +74,7 @@ class APP_EXPORT QgsMeasureDialog : public QDialog, private Ui::QgsMeasureBase
* Copy measurements to the clipboard
* \param copyCoordinates \since QGIS 3.32 set to TRUE to also copy coordinates to clipboard
*/
void copyMeasurements( bool copyCoordinates = false );
void copyMeasurements( bool copyCoordinates = false, QString separator = QStringLiteral( "\t" ) );

void showCoordinatesChanged();

Expand All @@ -87,10 +87,8 @@ class APP_EXPORT QgsMeasureDialog : public QDialog, private Ui::QgsMeasureBase
//! \since QGIS 3.32 columns
enum Columns
{
StartX = 0,
StartY,
EndX,
EndY,
X = 0,
Y,
Distance,
};

Expand Down
18 changes: 4 additions & 14 deletions src/ui/qgsmeasurebase.ui
Expand Up @@ -48,29 +48,19 @@
<bool>false</bool>
</property>
<property name="columnCount">
<number>5</number>
<number>3</number>
</property>
<attribute name="headerDefaultSectionSize">
<number>85</number>
<number>100</number>
</attribute>
<column>
<property name="text">
<string>x1</string>
<string>x</string>
</property>
</column>
<column>
<property name="text">
<string>y1</string>
</property>
</column>
<column>
<property name="text">
<string>x2</string>
</property>
</column>
<column>
<property name="text">
<string>y2</string>
<string>y</string>
</property>
</column>
<column>
Expand Down

0 comments on commit 191417e

Please sign in to comment.