Skip to content

Commit

Permalink
Avoid complex editable combobox logic
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jun 29, 2018
1 parent 2d810fa commit 40b838d
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 58 deletions.
61 changes: 13 additions & 48 deletions src/app/gps/qgsgpsinformationwidget.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@
#include <QPixmap> #include <QPixmap>
#include <QPen> #include <QPen>



const int MAXACQUISITIONINTERVAL = 3000; // max gps information acquisition suspension interval (in seconds)
const int MAXDISTANCETHRESHOLD = 200; // max gps distance threshold (in meters)


QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *thepCanvas, QWidget *parent, Qt::WindowFlags f ) QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *thepCanvas, QWidget *parent, Qt::WindowFlags f )
: QWidget( parent, f ) : QWidget( parent, f )
, mpCanvas( thepCanvas ) , mpCanvas( thepCanvas )
Expand Down Expand Up @@ -263,39 +268,28 @@ QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *thepCanvas, QWid
mDistanceThresholdValidator = new QIntValidator( 0, MAXDISTANCETHRESHOLD, this ); mDistanceThresholdValidator = new QIntValidator( 0, MAXDISTANCETHRESHOLD, this );
mAcquisitionTimer = std::unique_ptr<QTimer>( new QTimer( this ) ); mAcquisitionTimer = std::unique_ptr<QTimer>( new QTimer( this ) );
mAcquisitionTimer->setSingleShot( true ); mAcquisitionTimer->setSingleShot( true );
mCboAcquisitionInterval->setInsertPolicy( QComboBox::NoInsert );
mCboDistanceThreshold->setInsertPolicy( QComboBox::NoInsert );
mCboAcquisitionInterval->addItem( QStringLiteral( "0" ), 0 ); mCboAcquisitionInterval->addItem( QStringLiteral( "0" ), 0 );
mCboAcquisitionInterval->addItem( QStringLiteral( "2" ), 2 ); mCboAcquisitionInterval->addItem( QStringLiteral( "2" ), 2 );
mCboAcquisitionInterval->addItem( QStringLiteral( "5" ), 5 ); mCboAcquisitionInterval->addItem( QStringLiteral( "5" ), 5 );
mCboAcquisitionInterval->addItem( QStringLiteral( "10" ), 10 ); mCboAcquisitionInterval->addItem( QStringLiteral( "10" ), 10 );
mCboAcquisitionInterval->addItem( QStringLiteral( "15" ), 15 ); mCboAcquisitionInterval->addItem( QStringLiteral( "15" ), 15 );
mCboAcquisitionInterval->addItem( QStringLiteral( "30" ), 30 ); mCboAcquisitionInterval->addItem( QStringLiteral( "30" ), 30 );
mCboAcquisitionInterval->addItem( QStringLiteral( "60" ), 60 ); mCboAcquisitionInterval->addItem( QStringLiteral( "60" ), 60 );
mCboAcquisitionInterval->addItem( tr( "" ) );
mCboDistanceThreshold->addItem( QStringLiteral( "0" ), 0 ); mCboDistanceThreshold->addItem( QStringLiteral( "0" ), 0 );
mCboDistanceThreshold->addItem( QStringLiteral( "3" ), 3 ); mCboDistanceThreshold->addItem( QStringLiteral( "3" ), 3 );
mCboDistanceThreshold->addItem( QStringLiteral( "5" ), 5 ); mCboDistanceThreshold->addItem( QStringLiteral( "5" ), 5 );
mCboDistanceThreshold->addItem( QStringLiteral( "10" ), 10 ); mCboDistanceThreshold->addItem( QStringLiteral( "10" ), 10 );
mCboDistanceThreshold->addItem( QStringLiteral( "15" ), 15 ); mCboDistanceThreshold->addItem( QStringLiteral( "15" ), 15 );
mCboDistanceThreshold->addItem( tr( "" ) );
mCboAcquisitionInterval->setCurrentIndex( 0 ); mCboAcquisitionInterval->setCurrentIndex( 0 );
mCboAcquisitionInterval->setCurrentIndex( 0 ); mCboAcquisitionInterval->setCurrentIndex( 0 );
connect( mAcquisitionTimer.get(), &QTimer::timeout, connect( mAcquisitionTimer.get(), &QTimer::timeout,
this, &QgsGpsInformationWidget::switchAcquisition ); this, &QgsGpsInformationWidget::switchAcquisition );
connect( mCboAcquisitionInterval, qgis::overload< const QString & >::of( &QComboBox::activated ), connect( mCboAcquisitionInterval, qgis::overload< const QString & >::of( &QComboBox::currentTextChanged ),
this, &QgsGpsInformationWidget::cboAcquisitionIntervalActivated );
connect( mCboDistanceThreshold, qgis::overload< const QString & >::of( &QComboBox::activated ),
this, &QgsGpsInformationWidget::cboDistanceThresholdActivated );
mAcIntervalEdit = new QLineEdit;
mDistThresholdEdit = new QLineEdit;
mAcIntervalEdit->setValidator( mAcquisitionIntValidator );
mDistThresholdEdit->setValidator( mDistanceThresholdValidator );
connect( mAcIntervalEdit, &QLineEdit::editingFinished,
this, &QgsGpsInformationWidget::cboAcquisitionIntervalEdited ); this, &QgsGpsInformationWidget::cboAcquisitionIntervalEdited );
connect( mDistThresholdEdit, &QLineEdit::editingFinished, connect( mCboDistanceThreshold, qgis::overload< const QString & >::of( &QComboBox::currentTextChanged ),
this, &QgsGpsInformationWidget::cboDistanceThresholdEdited ); this, &QgsGpsInformationWidget::cboDistanceThresholdEdited );

mCboAcquisitionInterval->setValidator( mAcquisitionIntValidator );
mCboDistanceThreshold->setValidator( mDistanceThresholdValidator );
} }


QgsGpsInformationWidget::~QgsGpsInformationWidget() QgsGpsInformationWidget::~QgsGpsInformationWidget()
Expand Down Expand Up @@ -1193,7 +1187,7 @@ void QgsGpsInformationWidget::showStatusBarMessage( const QString &msg )
{ {
QgisApp::instance()->statusBarIface()->showMessage( msg ); QgisApp::instance()->statusBarIface()->showMessage( msg );
} }
void QgsGpsInformationWidget::setAcquisitionInterval( int interval ) void QgsGpsInformationWidget::setAcquisitionInterval( uint interval )
{ {
mAcquisitionInterval = interval * 1000; mAcquisitionInterval = interval * 1000;
if ( mAcquisitionTimer->isActive() ) if ( mAcquisitionTimer->isActive() )
Expand All @@ -1202,48 +1196,19 @@ void QgsGpsInformationWidget::setAcquisitionInterval( int interval )
switchAcquisition(); switchAcquisition();


} }
void QgsGpsInformationWidget::setDistanceThreshold( int distance ) void QgsGpsInformationWidget::setDistanceThreshold( uint distance )
{ {
mDistanceThreshold = distance; mDistanceThreshold = distance;
} }


void QgsGpsInformationWidget::cboAcquisitionIntervalActivated( const QString &text )
{
if ( text == "" )
{
mCboAcquisitionInterval->setEditable( true );
mCboAcquisitionInterval->setLineEdit( mAcIntervalEdit );
mCboAcquisitionInterval->clearEditText();
}
else
{
setAcquisitionInterval( text.toInt() );
}
}

void QgsGpsInformationWidget::cboDistanceThresholdActivated( const QString &text )
{
if ( text == "" )
{
mCboDistanceThreshold->setEditable( true );
mCboDistanceThreshold->setLineEdit( mDistThresholdEdit );
mCboDistanceThreshold->clearEditText();

}
else
{
setDistanceThreshold( text.toInt() );
}
}

void QgsGpsInformationWidget::cboAcquisitionIntervalEdited() void QgsGpsInformationWidget::cboAcquisitionIntervalEdited()
{ {
setAcquisitionInterval( mAcIntervalEdit->text().toInt() ); setAcquisitionInterval( mCboAcquisitionInterval->currentText().toUInt() );
} }


void QgsGpsInformationWidget::cboDistanceThresholdEdited() void QgsGpsInformationWidget::cboDistanceThresholdEdited()
{ {
setDistanceThreshold( mDistThresholdEdit->text().toInt() ); setDistanceThreshold( mCboDistanceThreshold->currentText().toUInt() );
} }


void QgsGpsInformationWidget::switchAcquisition() void QgsGpsInformationWidget::switchAcquisition()
Expand Down
10 changes: 2 additions & 8 deletions src/app/gps/qgsgpsinformationwidget.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@
#include <qwt_polar_grid.h> #include <qwt_polar_grid.h>
#include <qwt_polar_marker.h> #include <qwt_polar_marker.h>
#endif #endif
#define MAXACQUISITIONINTERVAL 300 // max gps information acquisition suspension interval (in seconds)
#define MAXDISTANCETHRESHOLD 10 // max gps distance threshold (in meters)


class QextSerialPort; class QextSerialPort;
class QgsGpsConnection; class QgsGpsConnection;
Expand Down Expand Up @@ -76,8 +74,6 @@ class QgsGpsInformationWidget: public QWidget, private Ui::QgsGpsInformationWidg
void connected( QgsGpsConnection * ); void connected( QgsGpsConnection * );
void timedout(); void timedout();
void switchAcquisition(); void switchAcquisition();
void cboAcquisitionIntervalActivated( const QString & );
void cboDistanceThresholdActivated( const QString & );
void cboAcquisitionIntervalEdited(); void cboAcquisitionIntervalEdited();
void cboDistanceThresholdEdited(); void cboDistanceThresholdEdited();
private: private:
Expand All @@ -92,8 +88,8 @@ class QgsGpsInformationWidget: public QWidget, private Ui::QgsGpsInformationWidg
void populateDevices(); void populateDevices();
void setStatusIndicator( FixStatus statusValue ); void setStatusIndicator( FixStatus statusValue );
void showStatusBarMessage( const QString &msg ); void showStatusBarMessage( const QString &msg );
void setAcquisitionInterval( int ); void setAcquisitionInterval( uint );
void setDistanceThreshold( int ); void setDistanceThreshold( uint );
QgsGpsConnection *mNmea = nullptr; QgsGpsConnection *mNmea = nullptr;
QgsMapCanvas *mpCanvas = nullptr; QgsMapCanvas *mpCanvas = nullptr;
QgsGpsMarker *mpMapMarker = nullptr; QgsGpsMarker *mpMapMarker = nullptr;
Expand All @@ -119,8 +115,6 @@ class QgsGpsInformationWidget: public QWidget, private Ui::QgsGpsInformationWidg
QColor mTrackColor; QColor mTrackColor;
QIntValidator *mAcquisitionIntValidator = nullptr; QIntValidator *mAcquisitionIntValidator = nullptr;
QIntValidator *mDistanceThresholdValidator = nullptr; QIntValidator *mDistanceThresholdValidator = nullptr;
QLineEdit *mAcIntervalEdit = nullptr;
QLineEdit *mDistThresholdEdit = nullptr;
nmeaPOS mLastNmeaPosition; nmeaPOS mLastNmeaPosition;
std::unique_ptr<QTimer> mAcquisitionTimer; std::unique_ptr<QTimer> mAcquisitionTimer;
bool mAcquisitionEnabled = true; bool mAcquisitionEnabled = true;
Expand Down
15 changes: 13 additions & 2 deletions src/ui/qgsgpsinformationwidgetbase.ui
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -1030,6 +1030,9 @@ gray = no data
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QPushButton" name="mBtnLogFile"> <widget class="QPushButton" name="mBtnLogFile">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>23</horstretch> <horstretch>23</horstretch>
Expand Down Expand Up @@ -1214,7 +1217,11 @@ gray = no data
</property> </property>
<layout class="QGridLayout" name="gridLayout_14" columnstretch="0,1"> <layout class="QGridLayout" name="gridLayout_14" columnstretch="0,1">
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="mCboDistanceThreshold"/> <widget class="QComboBox" name="mCboDistanceThreshold">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
Expand All @@ -1231,7 +1238,11 @@ gray = no data
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="mCboAcquisitionInterval"/> <widget class="QComboBox" name="mCboAcquisitionInterval">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
Expand Down

0 comments on commit 40b838d

Please sign in to comment.