@@ -544,17 +544,37 @@ void QgsCategorizedSymbolRendererWidget::changeSelectedSymbols()
544544
545545void 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
556573void 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
599636static 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
0 commit comments