@@ -125,12 +125,19 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap )
// set initial state of frame style controls
toggleFrameControls ( false , false , false );
QMenu* m = new QMenu ( this );
mLayerListFromPresetButton ->setMenu ( m );
// follow preset combo
mFollowVisibilityPresetCombo ->setModel ( new QStringListModel ( mFollowVisibilityPresetCombo ) );
connect ( mFollowVisibilityPresetCombo , SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( followVisibilityPresetSelected ( int ) ) );
connect ( QgsProject::instance ()->visibilityPresetCollection (), SIGNAL ( presetsChanged () ),
this , SLOT ( onPresetsChanged () ) );
onPresetsChanged ();
// keep layers from preset button
QMenu* menuKeepLayers = new QMenu ( this );
mLayerListFromPresetButton ->setMenu ( menuKeepLayers );
mLayerListFromPresetButton ->setIcon ( QgsApplication::getThemeIcon ( " /mActionShowAllLayers.png" ) );
mLayerListFromPresetButton ->setToolTip ( tr ( " Set layer list from a visibility preset" ) );
connect ( m, SIGNAL ( aboutToShow () ), this , SLOT ( aboutToShowVisibilityPresetsMenu () ) );
connect ( menuKeepLayers, SIGNAL ( aboutToShow () ), this , SLOT ( aboutToShowKeepLayersVisibilityPresetsMenu () ) );
if ( composerMap )
{
@@ -301,28 +308,47 @@ void QgsComposerMapWidget::compositionAtlasToggled( bool atlasEnabled )
}
}
void QgsComposerMapWidget::aboutToShowVisibilityPresetsMenu ()
void QgsComposerMapWidget::aboutToShowKeepLayersVisibilityPresetsMenu ()
{
// this menu is for the case when setting "keep layers" and "keep layer styles"
// and the preset configuration is copied. The preset is not followed further.
QMenu* menu = qobject_cast<QMenu*>( sender () );
if ( !menu )
return ;
menu->clear ();
Q_FOREACH ( const QString& presetName, QgsProject::instance ()->visibilityPresetCollection ()->presets () )
{
QAction* a = menu->addAction ( presetName, this , SLOT ( visibilityPresetSelected () ) );
a->setCheckable ( true );
QStringList layers = QgsVisibilityPresets::instance ()->orderedPresetVisibleLayers ( presetName );
QMap<QString, QString> styles = QgsProject::instance ()->visibilityPresetCollection ()->presetStyleOverrides ( presetName );
if ( layers == mComposerMap ->layerSet () && styles == mComposerMap ->layerStyleOverrides () )
a->setChecked ( true );
menu->addAction ( presetName, this , SLOT ( keepLayersVisibilityPresetSelected () ) );
}
if ( menu->actions ().isEmpty () )
menu->addAction ( tr ( " No presets defined" ) )->setEnabled ( false );
}
void QgsComposerMapWidget::visibilityPresetSelected ()
void QgsComposerMapWidget::followVisibilityPresetSelected ( int currentIndex )
{
if ( !mComposerMap )
return ;
QString presetName;
if ( currentIndex != 0 )
{
presetName = mFollowVisibilityPresetCombo ->currentText ();
}
if ( presetName == mComposerMap ->followVisibilityPresetName () )
return ;
mFollowVisibilityPresetCheckBox ->setChecked ( true );
mComposerMap ->setFollowVisibilityPresetName ( presetName );
mComposerMap ->cache ();
mComposerMap ->update ();
}
void QgsComposerMapWidget::keepLayersVisibilityPresetSelected ()
{
QAction* action = qobject_cast<QAction*>( sender () );
if ( !action )
@@ -344,6 +370,17 @@ void QgsComposerMapWidget::visibilityPresetSelected()
}
}
void QgsComposerMapWidget::onPresetsChanged ()
{
if ( QStringListModel* model = qobject_cast<QStringListModel*>( mFollowVisibilityPresetCombo ->model () ) )
{
QStringList lst;
lst.append ( tr ( " (none)" ) );
lst += QgsProject::instance ()->visibilityPresetCollection ()->presets ();
model->setStringList ( lst );
}
}
void QgsComposerMapWidget::on_mAtlasCheckBox_toggled ( bool checked )
{
if ( !mComposerMap )
@@ -668,6 +705,12 @@ void QgsComposerMapWidget::updateGuiElements()
mMapRotationSpinBox ->setValue ( mComposerMap ->mapRotation ( QgsComposerObject::OriginalValue ) );
// follow preset check box
mFollowVisibilityPresetCheckBox ->setCheckState (
mComposerMap ->followVisibilityPreset () ? Qt::Checked : Qt::Unchecked );
int presetModelIndex = mFollowVisibilityPresetCombo ->findText ( mComposerMap ->followVisibilityPresetName () );
mFollowVisibilityPresetCombo ->setCurrentIndex ( presetModelIndex != -1 ? presetModelIndex : 0 ); // 0 == none
// keep layer list check box
if ( mComposerMap ->keepLayerSet () )
{
@@ -897,6 +940,30 @@ void QgsComposerMapWidget::on_mUpdatePreviewButton_clicked()
mUpdatePreviewButton ->setEnabled ( true );
}
void QgsComposerMapWidget::on_mFollowVisibilityPresetCheckBox_stateChanged ( int state )
{
if ( !mComposerMap )
{
return ;
}
if ( state == Qt::Checked )
{
mComposerMap ->setFollowVisibilityPreset ( true );
// mutually exclusive with keeping custom layer list
mKeepLayerListCheckBox ->setCheckState ( Qt::Unchecked );
mKeepLayerStylesCheckBox ->setCheckState ( Qt::Unchecked );
mComposerMap ->cache ();
mComposerMap ->update ();
}
else
{
mComposerMap ->setFollowVisibilityPreset ( false );
}
}
void QgsComposerMapWidget::on_mKeepLayerListCheckBox_stateChanged ( int state )
{
if ( !mComposerMap )
@@ -908,6 +975,9 @@ void QgsComposerMapWidget::on_mKeepLayerListCheckBox_stateChanged( int state )
{
mComposerMap ->storeCurrentLayerSet ();
mComposerMap ->setKeepLayerSet ( true );
// mutually exclusive with following a preset
mFollowVisibilityPresetCheckBox ->setCheckState ( Qt::Unchecked );
}
else
{