QgsRuleBasedRendererWidget::QgsRuleBasedRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) : QgsRendererWidget( layer, style ) { mRenderer = nullptr; // try to recognize the previous renderer // (null renderer means "no previous renderer") if ( renderer ) { mRenderer = QgsRuleBasedRenderer::convertFromRenderer( renderer ); } if ( !mRenderer ) { // some default options QgsSymbol *symbol = QgsSymbol::defaultSymbol( mLayer->geometryType() ); mRenderer = new QgsRuleBasedRenderer( symbol ); } setupUi( this ); this->layout()->setContentsMargins( 0, 0, 0, 0 ); mModel = new QgsRuleBasedRendererModel( mRenderer ); #ifdef ENABLE_MODELTEST new ModelTest( mModel, this ); // for model validity checking #endif viewRules->setModel( mModel ); mDeleteAction = new QAction( tr( "Remove Rule" ), this ); mDeleteAction->setShortcut( QKeySequence( QKeySequence::Delete ) ); viewRules->addAction( mDeleteAction ); viewRules->addAction( mCopyAction ); viewRules->addAction( mPasteAction ); mRefineMenu = new QMenu( tr( "Refine current rule" ), btnRefineRule ); mRefineMenu->addAction( tr( "Add scales to rule" ), this, SLOT( refineRuleScales() ) ); mRefineMenu->addAction( tr( "Add categories to rule" ), this, SLOT( refineRuleCategories() ) ); mRefineMenu->addAction( tr( "Add ranges to rule" ), this, SLOT( refineRuleRanges() ) ); btnRefineRule->setMenu( mRefineMenu ); contextMenu->addMenu( mRefineMenu ); btnAddRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); connect( viewRules, &QAbstractItemView::doubleClicked, this, static_cast < void ( QgsRuleBasedRendererWidget::* )( const QModelIndex &index ) > ( &QgsRuleBasedRendererWidget::editRule ) ); // support for context menu (now handled generically) connect( viewRules, &QWidget::customContextMenuRequested, this, &QgsRuleBasedRendererWidget::contextMenuViewCategories ); connect( viewRules->selectionModel(), &QItemSelectionModel::currentChanged, this, &QgsRuleBasedRendererWidget::currentRuleChanged ); connect( viewRules->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsRuleBasedRendererWidget::selectedRulesChanged ); connect( btnAddRule, &QAbstractButton::clicked, this, &QgsRuleBasedRendererWidget::addRule ); connect( btnEditRule, &QAbstractButton::clicked, this, static_cast < void ( QgsRuleBasedRendererWidget::* )() > ( &QgsRuleBasedRendererWidget::editRule ) ); connect( btnRemoveRule, &QAbstractButton::clicked, this, &QgsRuleBasedRendererWidget::removeRule ); connect( mDeleteAction, &QAction::triggered, this, &QgsRuleBasedRendererWidget::removeRule ); connect( btnCountFeatures, &QAbstractButton::clicked, this, &QgsRuleBasedRendererWidget::countFeatures ); connect( btnRenderingOrder, &QAbstractButton::clicked, this, &QgsRuleBasedRendererWidget::setRenderingOrder ); connect( mModel, &QAbstractItemModel::dataChanged, this, &QgsPanelWidget::widgetChanged ); connect( mModel, &QAbstractItemModel::rowsInserted, this, &QgsPanelWidget::widgetChanged ); connect( mModel, &QAbstractItemModel::rowsRemoved, this, &QgsPanelWidget::widgetChanged ); currentRuleChanged(); selectedRulesChanged(); // store/restore header section widths connect( viewRules->header(), &QHeaderView::sectionResized, this, &QgsRuleBasedRendererWidget::saveSectionWidth ); restoreSectionWidths(); }
QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) { mRenderer = nullptr; // try to recognize the previous renderer // (null renderer means "no previous renderer") if ( renderer ) { mRenderer = QgsRuleBasedRendererV2::convertFromRenderer( renderer ); } if ( !mRenderer ) { // some default options QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); mRenderer = new QgsRuleBasedRendererV2( symbol ); } setupUi( this ); mModel = new QgsRuleBasedRendererV2Model( mRenderer ); #ifdef ENABLE_MODELTEST new ModelTest( mModel, this ); // for model validity checking #endif viewRules->setModel( mModel ); mDeleteAction = new QAction( tr( "Remove Rule" ), this ); mDeleteAction->setShortcut( QKeySequence( QKeySequence::Delete ) ); viewRules->addAction( mDeleteAction ); viewRules->addAction( mCopyAction ); viewRules->addAction( mPasteAction ); mRefineMenu = new QMenu( tr( "Refine current rule" ), btnRefineRule ); mRefineMenu->addAction( tr( "Add scales to rule" ), this, SLOT( refineRuleScales() ) ); mRefineMenu->addAction( tr( "Add categories to rule" ), this, SLOT( refineRuleCategories() ) ); mRefineMenu->addAction( tr( "Add ranges to rule" ), this, SLOT( refineRuleRanges() ) ); btnRefineRule->setMenu( mRefineMenu ); contextMenu->addMenu( mRefineMenu ); btnAddRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); connect( viewRules, SIGNAL( doubleClicked( const QModelIndex & ) ), this, SLOT( editRule( const QModelIndex & ) ) ); // support for context menu (now handled generically) connect( viewRules, SIGNAL( customContextMenuRequested( const QPoint& ) ), this, SLOT( contextMenuViewCategories( const QPoint& ) ) ); connect( viewRules->selectionModel(), SIGNAL( currentChanged( QModelIndex, QModelIndex ) ), this, SLOT( currentRuleChanged( QModelIndex, QModelIndex ) ) ); connect( viewRules->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ), this, SLOT( selectedRulesChanged() ) ); connect( btnAddRule, SIGNAL( clicked() ), this, SLOT( addRule() ) ); connect( btnEditRule, SIGNAL( clicked() ), this, SLOT( editRule() ) ); connect( btnRemoveRule, SIGNAL( clicked() ), this, SLOT( removeRule() ) ); connect( mDeleteAction, SIGNAL( triggered() ), this, SLOT( removeRule() ) ); connect( btnCountFeatures, SIGNAL( clicked() ), this, SLOT( countFeatures() ) ); connect( btnRenderingOrder, SIGNAL( clicked() ), this, SLOT( setRenderingOrder() ) ); connect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SIGNAL( widgetChanged() ) ); currentRuleChanged(); selectedRulesChanged(); // store/restore header section widths connect( viewRules->header(), SIGNAL( sectionResized( int, int, int ) ), this, SLOT( saveSectionWidth( int, int, int ) ) ); restoreSectionWidths(); }