Skip to content

Commit

Permalink
Merge pull request #6952 from elpaso/DelazJ-symbolselectorHelpShow
Browse files Browse the repository at this point in the history
Delaz j symbolselector help show
  • Loading branch information
elpaso committed May 9, 2018
2 parents 29489e1 + 85d60f2 commit d06043f
Show file tree
Hide file tree
Showing 7 changed files with 131 additions and 40 deletions.
10 changes: 7 additions & 3 deletions python/gui/symbology/qgscategorizedsymbolrendererwidget.sip.in
Expand Up @@ -96,20 +96,24 @@ from the XML file with a matching name.


int currentCategoryRow(); int currentCategoryRow();
%Docstring %Docstring
return row index for the currently selected category (-1 if on no selection) Returns row index for the currently selected category (-1 if on no selection)
%End %End


QList<int> selectedCategories(); QList<int> selectedCategories();
%Docstring %Docstring
return a list of indexes for the categories unders selection Returns a list of indexes for the categories under selection
%End %End


void changeSelectedSymbols(); void changeSelectedSymbols();
%Docstring %Docstring
change the selected symbols alone for the change button, if there is a selection Changes the selected symbols alone for the change button, if there is a selection
%End %End


void changeCategorySymbol(); void changeCategorySymbol();
void applyChangeToSymbol();
%Docstring
Applies current symbol to selected categories, or to all categories if none is selected
%End


virtual QList<QgsSymbol *> selectedSymbols(); virtual QList<QgsSymbol *> selectedSymbols();


Expand Down
6 changes: 5 additions & 1 deletion python/gui/symbology/qgsgraduatedsymbolrendererwidget.sip.in
Expand Up @@ -70,14 +70,18 @@ Toggle the link between classes boundaries


QList<int> selectedClasses(); QList<int> selectedClasses();
%Docstring %Docstring
return a list of indexes for the classes under selection Returns a list of indexes for the classes under selection
%End %End
QgsRangeList selectedRanges(); QgsRangeList selectedRanges();


void changeRangeSymbol( int rangeIdx ); void changeRangeSymbol( int rangeIdx );
void changeRange( int rangeIdx ); void changeRange( int rangeIdx );


void changeSelectedSymbols(); void changeSelectedSymbols();
void applyChangeToSymbol();
%Docstring
Applies current symbol to selected ranges, or to all ranges if none is selected
%End


virtual QList<QgsSymbol *> selectedSymbols(); virtual QList<QgsSymbol *> selectedSymbols();


Expand Down
1 change: 1 addition & 0 deletions scripts/spell_check/spelling.dat
Expand Up @@ -6373,6 +6373,7 @@ skiped:skipped
skiping:skipping skiping:skipping
slashs:slashes slashs:slashes
slaugterhouses:slaughterhouses slaugterhouses:slaughterhouses
slection:selection
slighly:slightly slighly:slightly
sligth:slight sligth:slight
sligthly:slightly sligthly:slightly
Expand Down
80 changes: 61 additions & 19 deletions src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp
Expand Up @@ -544,17 +544,37 @@ void QgsCategorizedSymbolRendererWidget::changeSelectedSymbols()


void QgsCategorizedSymbolRendererWidget::changeCategorizedSymbol() void QgsCategorizedSymbolRendererWidget::changeCategorizedSymbol()
{ {
QgsSymbol *newSymbol = mCategorizedSymbol->clone(); QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr ); std::unique_ptr<QgsSymbol> newSymbol( mCategorizedSymbol->clone() );
dlg->setContext( mContext ); if ( panel && panel->dockMode() )
{
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
dlg->setContext( mContext );
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::updateCategorizedSymbolIcon );
openPanel( dlg );
}
else
{
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
dlg.setContext( mContext );
if ( !dlg.exec() || !newSymbol )
{
return;
}


connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget ); mCategorizedSymbol = std::move( newSymbol );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector ); updateCategorizedSymbolIcon();
openPanel( dlg ); applyChangeToSymbol();
}
} }


void QgsCategorizedSymbolRendererWidget::updateCategorizedSymbolIcon() void QgsCategorizedSymbolRendererWidget::updateCategorizedSymbolIcon()
{ {
if ( !mCategorizedSymbol )
return;

QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mCategorizedSymbol.get(), btnChangeCategorizedSymbol->iconSize() ); QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mCategorizedSymbol.get(), btnChangeCategorizedSymbol->iconSize() );
btnChangeCategorizedSymbol->setIcon( icon ); btnChangeCategorizedSymbol->setIcon( icon );
} }
Expand All @@ -579,21 +599,38 @@ void QgsCategorizedSymbolRendererWidget::changeCategorySymbol()
{ {
QgsRendererCategory category = mRenderer->categories().value( currentCategoryRow() ); QgsRendererCategory category = mRenderer->categories().value( currentCategoryRow() );


QgsSymbol *symbol = category.symbol(); std::unique_ptr< QgsSymbol > symbol;
if ( symbol )
if ( category.symbol() )
{ {
symbol = symbol->clone(); symbol.reset( category.symbol()->clone() );
} }
else else
{ {
symbol = QgsSymbol::defaultSymbol( mLayer->geometryType() ); symbol.reset( QgsSymbol::defaultSymbol( mLayer->geometryType() ) );
}

QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
if ( panel && panel->dockMode() )
{
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( symbol.get(), mStyle, mLayer, panel );
dlg->setContext( mContext );
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
openPanel( dlg );
} }
else
{
QgsSymbolSelectorDialog dlg( symbol.get(), mStyle, mLayer, panel );
dlg.setContext( mContext );
if ( !dlg.exec() || !symbol )
{
return;
}


QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( symbol, mStyle, mLayer, nullptr ); mCategorizedSymbol = std::move( symbol );
dlg->setContext( mContext ); applyChangeToSymbol();
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget ); }
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
openPanel( dlg );
} }


static void _createCategories( QgsCategoryList &cats, QList<QVariant> &values, QgsSymbol *symbol ) static void _createCategories( QgsCategoryList &cats, QList<QVariant> &values, QgsSymbol *symbol )
Expand Down Expand Up @@ -950,9 +987,12 @@ void QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget()
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() ); QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
mCategorizedSymbol.reset( dlg->symbol()->clone() ); mCategorizedSymbol.reset( dlg->symbol()->clone() );


updateCategorizedSymbolIcon(); applyChangeToSymbol();
}


// When there is a slection, change the selected symbols alone void QgsCategorizedSymbolRendererWidget::applyChangeToSymbol()
{
// When there is a selection, change the selected symbols only
QItemSelectionModel *m = viewCategories->selectionModel(); QItemSelectionModel *m = viewCategories->selectionModel();
QModelIndexList i = m->selectedRows(); QModelIndexList i = m->selectedRows();


Expand All @@ -974,10 +1014,12 @@ void QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget()
} }
emit widgetChanged(); emit widgetChanged();
} }
return; }
else
{
mRenderer->updateSymbols( mCategorizedSymbol.get() );
} }


mRenderer->updateSymbols( mCategorizedSymbol.get() );
emit widgetChanged(); emit widgetChanged();
} }


Expand Down
8 changes: 5 additions & 3 deletions src/gui/symbology/qgscategorizedsymbolrendererwidget.h
Expand Up @@ -163,16 +163,18 @@ class GUI_EXPORT QgsCategorizedSymbolRendererWidget : public QgsRendererWidget,
// Called by virtual refreshSymbolView() // Called by virtual refreshSymbolView()
void populateCategories(); void populateCategories();


//! return row index for the currently selected category (-1 if on no selection) //! Returns row index for the currently selected category (-1 if on no selection)
int currentCategoryRow(); int currentCategoryRow();


//! return a list of indexes for the categories unders selection //! Returns a list of indexes for the categories under selection
QList<int> selectedCategories(); QList<int> selectedCategories();


//! change the selected symbols alone for the change button, if there is a selection //! Changes the selected symbols alone for the change button, if there is a selection
void changeSelectedSymbols(); void changeSelectedSymbols();


void changeCategorySymbol(); void changeCategorySymbol();
//! Applies current symbol to selected categories, or to all categories if none is selected
void applyChangeToSymbol();


QList<QgsSymbol *> selectedSymbols() override; QList<QgsSymbol *> selectedSymbols() override;
QgsCategoryList selectedCategoryList(); QgsCategoryList selectedCategoryList();
Expand Down
62 changes: 49 additions & 13 deletions src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp
Expand Up @@ -754,6 +754,11 @@ void QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget()
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() ); QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
mGraduatedSymbol.reset( dlg->symbol()->clone() ); mGraduatedSymbol.reset( dlg->symbol()->clone() );


applyChangeToSymbol();
}

void QgsGraduatedSymbolRendererWidget::applyChangeToSymbol()
{
mSizeUnitWidget->blockSignals( true ); mSizeUnitWidget->blockSignals( true );
mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() ); mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() );
mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() ); mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() );
Expand All @@ -780,7 +785,6 @@ void QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget()
} }
else else
{ {
updateGraduatedSymbolIcon();
mRenderer->updateSymbols( mGraduatedSymbol.get() ); mRenderer->updateSymbols( mGraduatedSymbol.get() );
} }


Expand Down Expand Up @@ -874,13 +878,30 @@ void QgsGraduatedSymbolRendererWidget::reapplySizes()


void QgsGraduatedSymbolRendererWidget::changeGraduatedSymbol() void QgsGraduatedSymbolRendererWidget::changeGraduatedSymbol()
{ {
QgsSymbol *newSymbol = mGraduatedSymbol->clone(); std::unique_ptr< QgsSymbol > newSymbol( mGraduatedSymbol->clone() );
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr ); QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
dlg->setContext( mContext ); if ( panel && panel->dockMode() )
{
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
dlg->setContext( mContext );

connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::updateGraduatedSymbolIcon );
panel->openPanel( dlg );
}
else
{
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
if ( !dlg.exec() || !newSymbol )
{
return;
}


connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget ); mGraduatedSymbol = std::move( newSymbol );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector ); updateGraduatedSymbolIcon();
openPanel( dlg ); applyChangeToSymbol();
}
} }


void QgsGraduatedSymbolRendererWidget::updateGraduatedSymbolIcon() void QgsGraduatedSymbolRendererWidget::updateGraduatedSymbolIcon()
Expand Down Expand Up @@ -952,13 +973,28 @@ void QgsGraduatedSymbolRendererWidget::changeSelectedSymbols()


void QgsGraduatedSymbolRendererWidget::changeRangeSymbol( int rangeIdx ) void QgsGraduatedSymbolRendererWidget::changeRangeSymbol( int rangeIdx )
{ {
QgsSymbol *newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone(); std::unique_ptr< QgsSymbol > newSymbol( mRenderer->ranges()[rangeIdx].symbol()->clone() );
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr ); QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
dlg->setContext( mContext ); if ( panel && panel->dockMode() )
{
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
dlg->setContext( mContext );
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
openPanel( dlg );
}
else
{
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
dlg.setContext( mContext );
if ( !dlg.exec() || !newSymbol )
{
return;
}


connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget ); mGraduatedSymbol = std::move( newSymbol );
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector ); applyChangeToSymbol();
openPanel( dlg ); }
} }


void QgsGraduatedSymbolRendererWidget::changeRange( int rangeIdx ) void QgsGraduatedSymbolRendererWidget::changeRange( int rangeIdx )
Expand Down
4 changes: 3 additions & 1 deletion src/gui/symbology/qgsgraduatedsymbolrendererwidget.h
Expand Up @@ -138,14 +138,16 @@ class GUI_EXPORT QgsGraduatedSymbolRendererWidget : public QgsRendererWidget, pr


void updateGraduatedSymbolIcon(); void updateGraduatedSymbolIcon();


//! return a list of indexes for the classes under selection //! Returns a list of indexes for the classes under selection
QList<int> selectedClasses(); QList<int> selectedClasses();
QgsRangeList selectedRanges(); QgsRangeList selectedRanges();


void changeRangeSymbol( int rangeIdx ); void changeRangeSymbol( int rangeIdx );
void changeRange( int rangeIdx ); void changeRange( int rangeIdx );


void changeSelectedSymbols(); void changeSelectedSymbols();
//! Applies current symbol to selected ranges, or to all ranges if none is selected
void applyChangeToSymbol();


QList<QgsSymbol *> selectedSymbols() override; QList<QgsSymbol *> selectedSymbols() override;
QgsSymbol *findSymbolForRange( double lowerBound, double upperBound, const QgsRangeList &ranges ) const; QgsSymbol *findSymbolForRange( double lowerBound, double upperBound, const QgsRangeList &ranges ) const;
Expand Down

0 comments on commit d06043f

Please sign in to comment.