void QgsSymbolV2SelectorDialog::changeSymbolProperties() { QgsSymbolV2PropertiesDialog dlg( mSymbol, mVectorLayer, this ); if ( !dlg.exec() ) return; updateSymbolPreview(); updateSymbolInfo(); emit symbolModified(); }
QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent, bool embedded ) : QDialog( parent ), mAdvancedMenu( NULL ), mVectorLayer( vl ) { mStyle = style; mSymbol = symbol; setupUi( this ); btnAdvanced->hide(); // advanced button is hidden by default // can be embedded in renderer properties dialog if ( embedded ) { buttonBox->hide(); layout()->setContentsMargins( 0, 0, 0, 0 ); } connect( btnSymbolProperties, SIGNAL( clicked() ), this, SLOT( changeSymbolProperties() ) ); connect( btnStyleManager, SIGNAL( clicked() ), SLOT( openStyleManager() ) ); QStandardItemModel* model = new QStandardItemModel( viewSymbols ); viewSymbols->setModel( model ); connect( viewSymbols, SIGNAL( clicked( const QModelIndex & ) ), this, SLOT( setSymbolFromStyle( const QModelIndex & ) ) ); lblSymbolName->setText( "" ); populateSymbolView(); updateSymbolPreview(); updateSymbolInfo(); if ( mSymbol ) { // output unit mSymbolUnitComboBox->blockSignals( true ); mSymbolUnitComboBox->setCurrentIndex( mSymbol->outputUnit() ); mSymbolUnitComboBox->blockSignals( false ); mTransparencySlider->blockSignals( true ); double transparency = 1 - symbol->alpha(); mTransparencySlider->setValue( transparency * 255 ); displayTransparency( symbol->alpha() ); mTransparencySlider->blockSignals( false ); } // select correct page in stacked widget // there's a correspondence between symbol type number and page numbering => exploit it! stackedWidget->setCurrentIndex( symbol->type() ); connect( btnColor, SIGNAL( clicked() ), this, SLOT( setSymbolColor() ) ); connect( spinAngle, SIGNAL( valueChanged( double ) ), this, SLOT( setMarkerAngle( double ) ) ); connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setMarkerSize( double ) ) ); connect( spinWidth, SIGNAL( valueChanged( double ) ), this, SLOT( setLineWidth( double ) ) ); connect( btnAddToStyle, SIGNAL( clicked() ), this, SLOT( addSymbolToStyle() ) ); btnSymbolProperties->setIcon( QIcon( QgsApplication::defaultThemePath() + "mActionOptions.png" ) ); btnAddToStyle->setIcon( QIcon( QgsApplication::defaultThemePath() + "symbologyAdd.png" ) ); }
void QgsSymbolV2SelectorDialog::setSymbolFromStyle( const QModelIndex & index ) { QString symbolName = index.data( Qt::UserRole ).toString(); lblSymbolName->setText( symbolName ); // get new instance of symbol from style QgsSymbolV2* s = mStyle->symbol( symbolName ); // remove all symbol layers from original symbol while ( mSymbol->symbolLayerCount() ) mSymbol->deleteSymbolLayer( 0 ); // move all symbol layers to our symbol while ( s->symbolLayerCount() ) { QgsSymbolLayerV2* sl = s->takeSymbolLayer( 0 ); mSymbol->appendSymbolLayer( sl ); } // delete the temporary symbol delete s; updateSymbolPreview(); updateSymbolInfo(); emit symbolModified(); }
void QgsSymbolsListWidget::setSymbolFromStyle( const QModelIndex &index ) { QString symbolName = mModel->data( mModel->index( index.row(), QgsStyleModel::Name ) ).toString(); lblSymbolName->setText( symbolName ); // get new instance of symbol from style std::unique_ptr< QgsSymbol > s( mStyle->symbol( symbolName ) ); if ( !s ) return; // remove all symbol layers from original symbolgroupsCombo while ( mSymbol->symbolLayerCount() ) mSymbol->deleteSymbolLayer( 0 ); // move all symbol layers to our symbol while ( s->symbolLayerCount() ) { QgsSymbolLayer *sl = s->takeSymbolLayer( 0 ); mSymbol->appendSymbolLayer( sl ); } mSymbol->setOpacity( s->opacity() ); updateSymbolInfo(); emit changed(); }
void CBC_EncoderContext::updateSymbolInfo(int32_t& e) { updateSymbolInfo(getCodewordCount(), e); }
QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style, QMenu *menu, QWidget *parent, QgsVectorLayer *layer ) : QWidget( parent ) , mSymbol( symbol ) , mStyle( style ) , mLayer( layer ) { setupUi( this ); connect( mSymbolUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsSymbolsListWidget::mSymbolUnitWidget_changed ); spinAngle->setClearValue( 0 ); mSymbolUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches ); mModel = new QgsReadOnlyStyleModel( mStyle, this ); mModel->setEntityFilterEnabled( true ); mModel->setEntityFilter( QgsStyle::SymbolEntity ); if ( mSymbol ) { mModel->setSymbolTypeFilterEnabled( true ); mModel->setSymbolType( mSymbol->type() ); } btnAdvanced->hide(); // advanced button is hidden by default if ( menu ) // show it if there is a menu pointer { mAdvancedMenu = menu; btnAdvanced->show(); btnAdvanced->setMenu( mAdvancedMenu ); } else { btnAdvanced->setMenu( new QMenu( this ) ); } mClipFeaturesAction = new QAction( tr( "Clip Features to Canvas Extent" ), this ); mClipFeaturesAction->setCheckable( true ); connect( mClipFeaturesAction, &QAction::toggled, this, &QgsSymbolsListWidget::clipFeaturesToggled ); mStandardizeRingsAction = new QAction( tr( "Force Right-Hand-Rule Orientation" ), this ); mStandardizeRingsAction->setCheckable( true ); connect( mStandardizeRingsAction, &QAction::toggled, this, &QgsSymbolsListWidget::forceRHRToggled ); double iconSize = Qgis::UI_SCALE_FACTOR * fontMetrics().width( 'X' ) * 10; viewSymbols->setIconSize( QSize( static_cast< int >( iconSize ), static_cast< int >( iconSize * 0.9 ) ) ); // ~100, 90 on low dpi double treeIconSize = Qgis::UI_SCALE_FACTOR * fontMetrics().width( 'X' ) * 2; mSymbolTreeView->setIconSize( QSize( static_cast< int >( treeIconSize ), static_cast< int >( treeIconSize ) ) ); mModel->addDesiredIconSize( viewSymbols->iconSize() ); mModel->addDesiredIconSize( mSymbolTreeView->iconSize() ); viewSymbols->setModel( mModel ); mSymbolTreeView->setModel( mModel ); viewSymbols->setSelectionBehavior( QAbstractItemView::SelectRows ); mSymbolTreeView->setSelectionModel( viewSymbols->selectionModel() ); mSymbolTreeView->setSelectionMode( viewSymbols->selectionMode() ); connect( viewSymbols->selectionModel(), &QItemSelectionModel::currentChanged, this, &QgsSymbolsListWidget::setSymbolFromStyle ); connect( mStyle, &QgsStyle::groupsModified, this, &QgsSymbolsListWidget::populateGroups ); connect( openStyleManagerButton, &QToolButton::clicked, this, &QgsSymbolsListWidget::openStyleManager ); lblSymbolName->clear(); connect( mButtonIconView, &QToolButton::toggled, this, [ = ]( bool active ) { if ( active ) { mSymbolViewStackedWidget->setCurrentIndex( 0 ); // note -- we have to save state here and not in destructor, as new symbol list widgets are created before the previous ones are destroyed QgsSettings().setValue( QStringLiteral( "UI/symbolsList/lastIconView" ), 0, QgsSettings::Gui ); } } ); connect( mButtonListView, &QToolButton::toggled, this, [ = ]( bool active ) { if ( active ) { QgsSettings().setValue( QStringLiteral( "UI/symbolsList/lastIconView" ), 1, QgsSettings::Gui ); mSymbolViewStackedWidget->setCurrentIndex( 1 ); } } ); // restore previous view QgsSettings settings; const int currentView = settings.value( QStringLiteral( "UI/symbolsList/lastIconView" ), 0, QgsSettings::Gui ).toInt(); if ( currentView == 0 ) mButtonIconView->setChecked( true ); else mButtonListView->setChecked( true ); mSymbolTreeView->header()->restoreState( settings.value( QStringLiteral( "UI/symbolsList/treeState" ), QByteArray(), QgsSettings::Gui ).toByteArray() ); connect( mSymbolTreeView->header(), &QHeaderView::sectionResized, this, [this] { // note -- we have to save state here and not in destructor, as new symbol list widgets are created before the previous ones are destroyed QgsSettings().setValue( QStringLiteral( "UI/symbolsList/treeState" ), mSymbolTreeView->header()->saveState(), QgsSettings::Gui ); } ); QgsFilterLineEdit *groupEdit = new QgsFilterLineEdit(); groupEdit->setShowSearchIcon( true ); groupEdit->setShowClearButton( true ); groupEdit->setPlaceholderText( tr( "Filter symbols…" ) ); groupsCombo->setLineEdit( groupEdit ); populateGroups(); connect( groupsCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsSymbolsListWidget::groupsCombo_currentIndexChanged ); connect( groupsCombo, &QComboBox::currentTextChanged, this, &QgsSymbolsListWidget::updateModelFilters ); if ( mSymbol ) { updateSymbolInfo(); } // select correct page in stacked widget // there's a correspondence between symbol type number and page numbering => exploit it! stackedWidget->setCurrentIndex( symbol->type() ); connect( btnColor, &QgsColorButton::colorChanged, this, &QgsSymbolsListWidget::setSymbolColor ); connect( spinAngle, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsSymbolsListWidget::setMarkerAngle ); connect( spinSize, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsSymbolsListWidget::setMarkerSize ); connect( spinWidth, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsSymbolsListWidget::setLineWidth ); registerDataDefinedButton( mRotationDDBtn, QgsSymbolLayer::PropertyAngle ); connect( mRotationDDBtn, &QgsPropertyOverrideButton::changed, this, &QgsSymbolsListWidget::updateDataDefinedMarkerAngle ); registerDataDefinedButton( mSizeDDBtn, QgsSymbolLayer::PropertySize ); connect( mSizeDDBtn, &QgsPropertyOverrideButton::changed, this, &QgsSymbolsListWidget::updateDataDefinedMarkerSize ); registerDataDefinedButton( mWidthDDBtn, QgsSymbolLayer::PropertyStrokeWidth ); connect( mWidthDDBtn, &QgsPropertyOverrideButton::changed, this, &QgsSymbolsListWidget::updateDataDefinedLineWidth ); connect( this, &QgsSymbolsListWidget::changed, this, &QgsSymbolsListWidget::updateAssistantSymbol ); updateAssistantSymbol(); btnColor->setAllowOpacity( true ); btnColor->setColorDialogTitle( tr( "Select Color" ) ); btnColor->setContext( QStringLiteral( "symbology" ) ); connect( btnSaveSymbol, &QPushButton::clicked, this, &QgsSymbolsListWidget::saveSymbol ); connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsSymbolsListWidget::opacityChanged ); }
QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol* symbol, QgsStyle* style, QMenu* menu, QWidget* parent, const QgsVectorLayer * layer ) : QWidget( parent ) , mSymbol( symbol ) , mStyle( style ) , mAdvancedMenu( nullptr ) , mClipFeaturesAction( nullptr ) , mLayer( layer ) , mMapCanvas( nullptr ) { setupUi( this ); mSymbolUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels ); btnAdvanced->hide(); // advanced button is hidden by default if ( menu ) // show it if there is a menu pointer { mAdvancedMenu = menu; btnAdvanced->show(); btnAdvanced->setMenu( mAdvancedMenu ); } else { btnAdvanced->setMenu( new QMenu( this ) ); } mClipFeaturesAction = new QAction( tr( "Clip features to canvas extent" ), this ); mClipFeaturesAction->setCheckable( true ); connect( mClipFeaturesAction, &QAction::toggled, this, &QgsSymbolsListWidget::clipFeaturesToggled ); QStandardItemModel* model = new QStandardItemModel( viewSymbols ); viewSymbols->setModel( model ); connect( viewSymbols->selectionModel(), SIGNAL( currentChanged( const QModelIndex &, const QModelIndex & ) ), this, SLOT( setSymbolFromStyle( const QModelIndex & ) ) ); connect( mStyle, &QgsStyle::symbolSaved , this, &QgsSymbolsListWidget::symbolAddedToStyle ); connect( mStyle, &QgsStyle::groupsModified , this, &QgsSymbolsListWidget::populateGroups ); connect( openStyleManagerButton, &QPushButton::pressed, this, &QgsSymbolsListWidget::openStyleManager ); lblSymbolName->setText( QLatin1String( "" ) ); populateGroups(); if ( mSymbol ) { updateSymbolInfo(); } // select correct page in stacked widget // there's a correspondence between symbol type number and page numbering => exploit it! stackedWidget->setCurrentIndex( symbol->type() ); connect( btnColor, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setSymbolColor( const QColor& ) ) ); connect( spinAngle, SIGNAL( valueChanged( double ) ), this, SLOT( setMarkerAngle( double ) ) ); connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setMarkerSize( double ) ) ); connect( spinWidth, SIGNAL( valueChanged( double ) ), this, SLOT( setLineWidth( double ) ) ); connect( mRotationDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedMarkerAngle() ) ); connect( mRotationDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedMarkerAngle() ) ); connect( mSizeDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedMarkerSize() ) ); connect( mSizeDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedMarkerSize() ) ); connect( mWidthDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedLineWidth() ) ); connect( mWidthDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedLineWidth() ) ); if ( mSymbol->type() == QgsSymbol::Marker && mLayer ) mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mLayer, mSymbol ) ); else if ( mSymbol->type() == QgsSymbol::Line && mLayer ) mWidthDDBtn->setAssistant( tr( "Width Assistant..." ), new QgsSizeScaleWidget( mLayer, mSymbol ) ); // Live color updates are not undoable to child symbol layers btnColor->setAcceptLiveUpdates( false ); btnColor->setAllowAlpha( true ); btnColor->setColorDialogTitle( tr( "Select color" ) ); btnColor->setContext( QStringLiteral( "symbology" ) ); connect( btnSaveSymbol, &QPushButton::clicked, this, &QgsSymbolsListWidget::saveSymbol ); }