Skip to content

Commit d06043f

Browse files
authoredMay 9, 2018
Merge pull request #6952 from elpaso/DelazJ-symbolselectorHelpShow
Delaz j symbolselector help show
2 parents 29489e1 + 85d60f2 commit d06043f

7 files changed

+131
-40
lines changed
 

‎python/gui/symbology/qgscategorizedsymbolrendererwidget.sip.in

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,24 @@ from the XML file with a matching name.
9696

9797
int currentCategoryRow();
9898
%Docstring
99-
return row index for the currently selected category (-1 if on no selection)
99+
Returns row index for the currently selected category (-1 if on no selection)
100100
%End
101101

102102
QList<int> selectedCategories();
103103
%Docstring
104-
return a list of indexes for the categories unders selection
104+
Returns a list of indexes for the categories under selection
105105
%End
106106

107107
void changeSelectedSymbols();
108108
%Docstring
109-
change the selected symbols alone for the change button, if there is a selection
109+
Changes the selected symbols alone for the change button, if there is a selection
110110
%End
111111

112112
void changeCategorySymbol();
113+
void applyChangeToSymbol();
114+
%Docstring
115+
Applies current symbol to selected categories, or to all categories if none is selected
116+
%End
113117

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

‎python/gui/symbology/qgsgraduatedsymbolrendererwidget.sip.in

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,18 @@ Toggle the link between classes boundaries
7070

7171
QList<int> selectedClasses();
7272
%Docstring
73-
return a list of indexes for the classes under selection
73+
Returns a list of indexes for the classes under selection
7474
%End
7575
QgsRangeList selectedRanges();
7676

7777
void changeRangeSymbol( int rangeIdx );
7878
void changeRange( int rangeIdx );
7979

8080
void changeSelectedSymbols();
81+
void applyChangeToSymbol();
82+
%Docstring
83+
Applies current symbol to selected ranges, or to all ranges if none is selected
84+
%End
8185

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

‎scripts/spell_check/spelling.dat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6373,6 +6373,7 @@ skiped:skipped
63736373
skiping:skipping
63746374
slashs:slashes
63756375
slaugterhouses:slaughterhouses
6376+
slection:selection
63766377
slighly:slightly
63776378
sligth:slight
63786379
sligthly:slightly

‎src/gui/symbology/qgscategorizedsymbolrendererwidget.cpp

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -544,17 +544,37 @@ void QgsCategorizedSymbolRendererWidget::changeSelectedSymbols()
544544

545545
void QgsCategorizedSymbolRendererWidget::changeCategorizedSymbol()
546546
{
547-
QgsSymbol *newSymbol = mCategorizedSymbol->clone();
548-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr );
549-
dlg->setContext( mContext );
547+
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
548+
std::unique_ptr<QgsSymbol> newSymbol( mCategorizedSymbol->clone() );
549+
if ( panel && panel->dockMode() )
550+
{
551+
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
552+
dlg->setContext( mContext );
553+
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
554+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
555+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::updateCategorizedSymbolIcon );
556+
openPanel( dlg );
557+
}
558+
else
559+
{
560+
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
561+
dlg.setContext( mContext );
562+
if ( !dlg.exec() || !newSymbol )
563+
{
564+
return;
565+
}
550566

551-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
552-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
553-
openPanel( dlg );
567+
mCategorizedSymbol = std::move( newSymbol );
568+
updateCategorizedSymbolIcon();
569+
applyChangeToSymbol();
570+
}
554571
}
555572

556573
void QgsCategorizedSymbolRendererWidget::updateCategorizedSymbolIcon()
557574
{
575+
if ( !mCategorizedSymbol )
576+
return;
577+
558578
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mCategorizedSymbol.get(), btnChangeCategorizedSymbol->iconSize() );
559579
btnChangeCategorizedSymbol->setIcon( icon );
560580
}
@@ -579,21 +599,38 @@ void QgsCategorizedSymbolRendererWidget::changeCategorySymbol()
579599
{
580600
QgsRendererCategory category = mRenderer->categories().value( currentCategoryRow() );
581601

582-
QgsSymbol *symbol = category.symbol();
583-
if ( symbol )
602+
std::unique_ptr< QgsSymbol > symbol;
603+
604+
if ( category.symbol() )
584605
{
585-
symbol = symbol->clone();
606+
symbol.reset( category.symbol()->clone() );
586607
}
587608
else
588609
{
589-
symbol = QgsSymbol::defaultSymbol( mLayer->geometryType() );
610+
symbol.reset( QgsSymbol::defaultSymbol( mLayer->geometryType() ) );
611+
}
612+
613+
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
614+
if ( panel && panel->dockMode() )
615+
{
616+
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( symbol.get(), mStyle, mLayer, panel );
617+
dlg->setContext( mContext );
618+
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
619+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
620+
openPanel( dlg );
590621
}
622+
else
623+
{
624+
QgsSymbolSelectorDialog dlg( symbol.get(), mStyle, mLayer, panel );
625+
dlg.setContext( mContext );
626+
if ( !dlg.exec() || !symbol )
627+
{
628+
return;
629+
}
591630

592-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( symbol, mStyle, mLayer, nullptr );
593-
dlg->setContext( mContext );
594-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget );
595-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsCategorizedSymbolRendererWidget::cleanUpSymbolSelector );
596-
openPanel( dlg );
631+
mCategorizedSymbol = std::move( symbol );
632+
applyChangeToSymbol();
633+
}
597634
}
598635

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

953-
updateCategorizedSymbolIcon();
990+
applyChangeToSymbol();
991+
}
954992

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

@@ -974,10 +1014,12 @@ void QgsCategorizedSymbolRendererWidget::updateSymbolsFromWidget()
9741014
}
9751015
emit widgetChanged();
9761016
}
977-
return;
1017+
}
1018+
else
1019+
{
1020+
mRenderer->updateSymbols( mCategorizedSymbol.get() );
9781021
}
9791022

980-
mRenderer->updateSymbols( mCategorizedSymbol.get() );
9811023
emit widgetChanged();
9821024
}
9831025

‎src/gui/symbology/qgscategorizedsymbolrendererwidget.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,18 @@ class GUI_EXPORT QgsCategorizedSymbolRendererWidget : public QgsRendererWidget,
163163
// Called by virtual refreshSymbolView()
164164
void populateCategories();
165165

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

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

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

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

177179
QList<QgsSymbol *> selectedSymbols() override;
178180
QgsCategoryList selectedCategoryList();

‎src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,11 @@ void QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget()
754754
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
755755
mGraduatedSymbol.reset( dlg->symbol()->clone() );
756756

757+
applyChangeToSymbol();
758+
}
759+
760+
void QgsGraduatedSymbolRendererWidget::applyChangeToSymbol()
761+
{
757762
mSizeUnitWidget->blockSignals( true );
758763
mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() );
759764
mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() );
@@ -780,7 +785,6 @@ void QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget()
780785
}
781786
else
782787
{
783-
updateGraduatedSymbolIcon();
784788
mRenderer->updateSymbols( mGraduatedSymbol.get() );
785789
}
786790

@@ -874,13 +878,30 @@ void QgsGraduatedSymbolRendererWidget::reapplySizes()
874878

875879
void QgsGraduatedSymbolRendererWidget::changeGraduatedSymbol()
876880
{
877-
QgsSymbol *newSymbol = mGraduatedSymbol->clone();
878-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr );
879-
dlg->setContext( mContext );
881+
std::unique_ptr< QgsSymbol > newSymbol( mGraduatedSymbol->clone() );
882+
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
883+
if ( panel && panel->dockMode() )
884+
{
885+
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
886+
dlg->setContext( mContext );
887+
888+
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
889+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
890+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::updateGraduatedSymbolIcon );
891+
panel->openPanel( dlg );
892+
}
893+
else
894+
{
895+
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
896+
if ( !dlg.exec() || !newSymbol )
897+
{
898+
return;
899+
}
880900

881-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
882-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
883-
openPanel( dlg );
901+
mGraduatedSymbol = std::move( newSymbol );
902+
updateGraduatedSymbolIcon();
903+
applyChangeToSymbol();
904+
}
884905
}
885906

886907
void QgsGraduatedSymbolRendererWidget::updateGraduatedSymbolIcon()
@@ -952,13 +973,28 @@ void QgsGraduatedSymbolRendererWidget::changeSelectedSymbols()
952973

953974
void QgsGraduatedSymbolRendererWidget::changeRangeSymbol( int rangeIdx )
954975
{
955-
QgsSymbol *newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
956-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol, mStyle, mLayer, nullptr );
957-
dlg->setContext( mContext );
976+
std::unique_ptr< QgsSymbol > newSymbol( mRenderer->ranges()[rangeIdx].symbol()->clone() );
977+
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
978+
if ( panel && panel->dockMode() )
979+
{
980+
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( newSymbol.get(), mStyle, mLayer, panel );
981+
dlg->setContext( mContext );
982+
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
983+
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
984+
openPanel( dlg );
985+
}
986+
else
987+
{
988+
QgsSymbolSelectorDialog dlg( newSymbol.get(), mStyle, mLayer, panel );
989+
dlg.setContext( mContext );
990+
if ( !dlg.exec() || !newSymbol )
991+
{
992+
return;
993+
}
958994

959-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget );
960-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector );
961-
openPanel( dlg );
995+
mGraduatedSymbol = std::move( newSymbol );
996+
applyChangeToSymbol();
997+
}
962998
}
963999

9641000
void QgsGraduatedSymbolRendererWidget::changeRange( int rangeIdx )

‎src/gui/symbology/qgsgraduatedsymbolrendererwidget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,16 @@ class GUI_EXPORT QgsGraduatedSymbolRendererWidget : public QgsRendererWidget, pr
138138

139139
void updateGraduatedSymbolIcon();
140140

141-
//! return a list of indexes for the classes under selection
141+
//! Returns a list of indexes for the classes under selection
142142
QList<int> selectedClasses();
143143
QgsRangeList selectedRanges();
144144

145145
void changeRangeSymbol( int rangeIdx );
146146
void changeRange( int rangeIdx );
147147

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

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

0 commit comments

Comments
 (0)
Please sign in to comment.