void QgsProjectionSelectionWidget::setOptionVisible( const QgsProjectionSelectionWidget::CrsOption option, const bool visible ) { int optionIndex = mCrsComboBox->findData( option ); if ( visible && optionIndex < 0 ) { //add missing CRS option switch ( option ) { case QgsProjectionSelectionWidget::LayerCrs: { setLayerCrs( mLayerCrs ); return; } case QgsProjectionSelectionWidget::ProjectCrs: { addProjectCrsOption(); return; } case QgsProjectionSelectionWidget::DefaultCrs: { addDefaultCrsOption(); return; } case QgsProjectionSelectionWidget::CurrentCrs: { addCurrentCrsOption(); return; } case QgsProjectionSelectionWidget::RecentCrs: //recently used CRS option cannot be readded return; case QgsProjectionSelectionWidget::CrsNotSet: { addNotSetOption(); if ( optionVisible( CurrentCrs ) && !mCrs.isValid() ) { // hide invalid option if not set option is shown setOptionVisible( CurrentCrs, false ); } return; } } } else if ( !visible && optionIndex >= 0 ) { //remove CRS option mCrsComboBox->removeItem( optionIndex ); if ( option == CrsNotSet ) { setOptionVisible( CurrentCrs, true ); } } }
QgsProjectionSelectionWidget::QgsProjectionSelectionWidget( QWidget *parent ) : QWidget( parent ) { mDialog = new QgsGenericProjectionSelector( this ); QHBoxLayout* layout = new QHBoxLayout(); layout->setContentsMargins( 0, 0, 0, 0 ); layout->setSpacing( 0 ); setLayout( layout ); mCrsComboBox = new QComboBox( this ); mCrsComboBox->addItem( tr( "invalid projection" ), QgsProjectionSelectionWidget::CurrentCrs ); mCrsComboBox->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Preferred ); if ( QgsProject::instance()->readNumEntry( "SpatialRefSys", "/ProjectionsEnabled", 0 ) ) { //only show project CRS if OTF reprojection is enabled - otherwise the //CRS stored in the project can be misleading QString projectCrsString = QgsProject::instance()->readEntry( "SpatialRefSys", "/ProjectCrs" ); mProjectCrs.createFromOgcWmsCrs( projectCrsString ); addProjectCrsOption(); } QSettings settings; QString defCrsString = settings.value( "/Projections/projectDefaultCrs", GEO_EPSG_CRS_AUTHID ).toString(); mDefaultCrs.createFromOgcWmsCrs( defCrsString ); if ( mDefaultCrs.authid() != mProjectCrs.authid() ) { //only show default CRS option if it's different to the project CRS, avoids //needlessly cluttering the widget addDefaultCrsOption(); } addRecentCrs(); layout->addWidget( mCrsComboBox ); mButton = new QToolButton( this ); mButton->setIcon( QgsApplication::getThemeIcon( "mActionSetProjection.svg" ) ); mButton->setToolTip( tr( "Select CRS" ) ); layout->addWidget( mButton ); setFocusPolicy( Qt::StrongFocus ); setFocusProxy( mButton ); connect( mButton, SIGNAL( clicked() ), this, SLOT( selectCrs() ) ); connect( mCrsComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( comboIndexChanged( int ) ) ); }
QgsProjectionSelectionWidget::QgsProjectionSelectionWidget( QWidget *parent ) : QWidget( parent ) { QHBoxLayout *layout = new QHBoxLayout(); layout->setContentsMargins( 0, 0, 0, 0 ); layout->setSpacing( 6 ); setLayout( layout ); mCrsComboBox = new QComboBox( this ); mCrsComboBox->addItem( tr( "invalid projection" ), QgsProjectionSelectionWidget::CurrentCrs ); mCrsComboBox->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Preferred ); mProjectCrs = QgsProject::instance()->crs(); addProjectCrsOption(); QgsSettings settings; mDefaultCrs = QgsCoordinateReferenceSystem( settings.value( QStringLiteral( "/projections/defaultProjectCrs" ), GEO_EPSG_CRS_AUTHID, QgsSettings::App ).toString() ); if ( mDefaultCrs.authid() != mProjectCrs.authid() ) { //only show default CRS option if it's different to the project CRS, avoids //needlessly cluttering the widget addDefaultCrsOption(); } addRecentCrs(); layout->addWidget( mCrsComboBox ); mButton = new QToolButton( this ); mButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionSetProjection.svg" ) ) ); mButton->setToolTip( tr( "Select CRS" ) ); layout->addWidget( mButton ); setFocusPolicy( Qt::StrongFocus ); setFocusProxy( mButton ); connect( mButton, &QToolButton::clicked, this, &QgsProjectionSelectionWidget::selectCrs ); connect( mCrsComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsProjectionSelectionWidget::comboIndexChanged ); }
void QgsProjectionSelectionWidget::setOptionVisible( const QgsProjectionSelectionWidget::CrsOption option, const bool visible ) { int optionIndex = mCrsComboBox->findData( option ); if ( visible && optionIndex < 0 ) { //add missing CRS option switch ( option ) { case QgsProjectionSelectionWidget::LayerCrs: { setLayerCrs( mLayerCrs ); return; } case QgsProjectionSelectionWidget::ProjectCrs: { addProjectCrsOption(); return; } case QgsProjectionSelectionWidget::DefaultCrs: { addDefaultCrsOption(); return; } case QgsProjectionSelectionWidget::CurrentCrs: case QgsProjectionSelectionWidget::RecentCrs: //current/recently used CRS option cannot be readded return; } } else if ( !visible && optionIndex >= 0 ) { //remove CRS option mCrsComboBox->removeItem( optionIndex ); } }