QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) { // try to recognize the previous renderer // (null renderer means "no previous renderer") if ( !renderer || renderer->type() != "RuleRenderer" ) { // we're not going to use it - so let's delete the renderer delete renderer; // some default options QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); mRenderer = new QgsRuleBasedRendererV2( symbol ); } else { mRenderer = static_cast<QgsRuleBasedRendererV2*>( renderer ); } setupUi( this ); mModel = new QgsRuleBasedRendererV2Model( mRenderer ); //new ModelTest( mModel, this ); // for model validity checking viewRules->setModel( mModel ); mRefineMenu = new QMenu( "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.png" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.png" ) ) ); 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( btnAddRule, SIGNAL( clicked() ), this, SLOT( addRule() ) ); connect( btnEditRule, SIGNAL( clicked() ), this, SLOT( editRule() ) ); connect( btnRemoveRule, SIGNAL( clicked() ), this, SLOT( removeRule() ) ); connect( btnCountFeatures, SIGNAL( clicked() ), this, SLOT( countFeatures() ) ); connect( btnRenderingOrder, SIGNAL( clicked() ), this, SLOT( setRenderingOrder() ) ); currentRuleChanged(); // store/restore header section widths connect( viewRules->header(), SIGNAL( sectionResized( int, int, int ) ), this, SLOT( saveSectionWidth( int, int, int ) ) ); restoreSectionWidths(); }
QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) { // try to recognize the previous renderer // (null renderer means "no previous renderer") if ( !renderer || renderer->type() != "RuleRenderer" ) { // we're not going to use it - so let's delete the renderer delete renderer; // some default options QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); mRenderer = new QgsRuleBasedRendererV2( symbol ); } else { mRenderer = static_cast<QgsRuleBasedRendererV2*>( renderer ); } setupUi( this ); treeRules->setRenderer( mRenderer ); mRefineMenu = new QMenu( btnRefineRule ); mRefineMenu->addAction( tr( "Add scales" ), this, SLOT( refineRuleScales() ) ); mRefineMenu->addAction( tr( "Add categories" ), this, SLOT( refineRuleCategories() ) ); mRefineMenu->addAction( tr( "Add ranges" ), this, SLOT( refineRuleRanges() ) ); btnRefineRule->setMenu( mRefineMenu ); btnAddRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.png" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.png" ) ) ); btnIncreasePriority->setIcon( QIcon( QgsApplication::iconPath( "symbologyUp.png" ) ) ); btnDecreasePriority->setIcon( QIcon( QgsApplication::iconPath( "symbologyDown.png" ) ) ); connect( treeRules, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( editRule() ) ); connect( btnAddRule, SIGNAL( clicked() ), this, SLOT( addRule() ) ); connect( btnEditRule, SIGNAL( clicked() ), this, SLOT( editRule() ) ); connect( btnRemoveRule, SIGNAL( clicked() ), this, SLOT( removeRule() ) ); connect( btnIncreasePriority, SIGNAL( clicked() ), this, SLOT( increasePriority() ) ); connect( btnDecreasePriority, SIGNAL( clicked() ), this, SLOT( decreasePriority() ) ); connect( radNoGrouping, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); connect( radGroupFilter, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); connect( radGroupScale, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); // Make sure buttons are always in the correct state chkUsingFirstRule->setChecked( mRenderer->usingFirstRule() ); chkEnableSymbolLevels->setChecked( mRenderer->usingSymbolLevels() ); // If symbol levels are used, forcefully check and gray-out the chkUsingFirstRule checkbox if (mRenderer->usingSymbolLevels() ) { forceUsingFirstRule(); } connect( chkUsingFirstRule, SIGNAL( clicked() ), this, SLOT( usingFirstRuleChanged() )); connect( chkEnableSymbolLevels, SIGNAL( clicked() ), this, SLOT( symbolLevelsEnabledChanged() ) ); connect( this, SIGNAL( forceChkUsingFirstRule() ), this, SLOT( forceUsingFirstRule() ) ); treeRules->populateRules(); }
QgsRuleBasedLabelingWidget::QgsRuleBasedLabelingWidget( QgsVectorLayer* layer, QgsMapCanvas* canvas, QWidget* parent ) : QgsPanelWidget( parent ) , mLayer( layer ) , mCanvas( canvas ) , mRootRule( nullptr ) , mModel( nullptr ) { setupUi( this ); btnAddRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); mCopyAction = new QAction( tr( "Copy" ), this ); mCopyAction->setShortcut( QKeySequence( QKeySequence::Copy ) ); mPasteAction = new QAction( tr( "Paste" ), this ); mPasteAction->setShortcut( QKeySequence( QKeySequence::Paste ) ); mDeleteAction = new QAction( tr( "Remove Rule" ), this ); mDeleteAction->setShortcut( QKeySequence( QKeySequence::Delete ) ); viewRules->addAction( mDeleteAction ); viewRules->addAction( mCopyAction ); viewRules->addAction( mPasteAction ); connect( viewRules, SIGNAL( doubleClicked( const QModelIndex & ) ), this, SLOT( editRule( const QModelIndex & ) ) ); connect( btnAddRule, SIGNAL( clicked() ), this, SLOT( addRule() ) ); connect( btnEditRule, SIGNAL( clicked() ), this, SLOT( editRule() ) ); connect( btnRemoveRule, SIGNAL( clicked() ), this, SLOT( removeRule() ) ); connect( mCopyAction, SIGNAL( triggered( bool ) ), this, SLOT( copy() ) ); connect( mPasteAction, SIGNAL( triggered( bool ) ), this, SLOT( paste() ) ); connect( mDeleteAction, SIGNAL( triggered( bool ) ), this, SLOT( removeRule() ) ); if ( mLayer->labeling() && mLayer->labeling()->type() == "rule-based" ) { const QgsRuleBasedLabeling* rl = static_cast<const QgsRuleBasedLabeling*>( mLayer->labeling() ); mRootRule = rl->rootRule()->clone(); } else { mRootRule = new QgsRuleBasedLabeling::Rule( nullptr ); } mModel = new QgsRuleBasedLabelingModel( mRootRule ); viewRules->setModel( mModel ); connect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SIGNAL( widgetChanged() ) ); connect( mModel, SIGNAL( rowsInserted( QModelIndex, int, int ) ), this, SIGNAL( widgetChanged() ) ); connect( mModel, SIGNAL( rowsRemoved( QModelIndex, int, int ) ), this, SIGNAL( widgetChanged() ) ); }
QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) { // try to recognize the previous renderer // (null renderer means "no previous renderer") if ( !renderer || renderer->type() != "RuleRenderer" ) { // we're not going to use it - so let's delete the renderer delete renderer; // some default options QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); mRenderer = new QgsRuleBasedRendererV2( symbol ); } else { mRenderer = static_cast<QgsRuleBasedRendererV2*>( renderer ); } setupUi( this ); treeRules->setRenderer( mRenderer ); mRefineMenu = new QMenu( btnRefineRule ); mRefineMenu->addAction( tr( "Add scales" ), this, SLOT( refineRuleScales() ) ); mRefineMenu->addAction( tr( "Add categories" ), this, SLOT( refineRuleCategories() ) ); mRefineMenu->addAction( tr( "Add ranges" ), this, SLOT( refineRuleRanges() ) ); btnRefineRule->setMenu( mRefineMenu ); btnAddRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.png" ) ) ); btnEditRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyEdit.png" ) ) ); btnRemoveRule->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.png" ) ) ); connect( treeRules, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( editRule() ) ); connect( btnAddRule, SIGNAL( clicked() ), this, SLOT( addRule() ) ); connect( btnEditRule, SIGNAL( clicked() ), this, SLOT( editRule() ) ); connect( btnRemoveRule, SIGNAL( clicked() ), this, SLOT( removeRule() ) ); connect( radNoGrouping, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); connect( radGroupFilter, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); connect( radGroupScale, SIGNAL( clicked() ), this, SLOT( setGrouping() ) ); treeRules->populateRules(); }
void QgsRuleBasedRendererWidget::addRule() { QgsSymbol *s = QgsSymbol::defaultSymbol( mLayer->geometryType() ); QgsRuleBasedRenderer::Rule *newrule = new QgsRuleBasedRenderer::Rule( s ); QgsRuleBasedRenderer::Rule *current = currentRule(); if ( current ) { // add after this rule QModelIndex currentIndex = viewRules->selectionModel()->currentIndex(); mModel->insertRule( currentIndex.parent(), currentIndex.row() + 1, newrule ); QModelIndex newindex = mModel->index( currentIndex.row() + 1, 0, currentIndex.parent() ); viewRules->selectionModel()->setCurrentIndex( newindex, QItemSelectionModel::ClearAndSelect ); } else { // append to root rule int rows = mModel->rowCount(); mModel->insertRule( QModelIndex(), rows, newrule ); QModelIndex newindex = mModel->index( rows, 0 ); viewRules->selectionModel()->setCurrentIndex( newindex, QItemSelectionModel::ClearAndSelect ); } editRule(); }
void QgsRuleBasedLabelingWidget::addRule() { QgsRuleBasedLabeling::Rule *newrule = new QgsRuleBasedLabeling::Rule( new QgsPalLayerSettings ); QgsRuleBasedLabeling::Rule *current = currentRule(); if ( current ) { // add after this rule QModelIndex currentIndex = viewRules->selectionModel()->currentIndex(); mModel->insertRule( currentIndex.parent(), currentIndex.row() + 1, newrule ); QModelIndex newindex = mModel->index( currentIndex.row() + 1, 0, currentIndex.parent() ); viewRules->selectionModel()->setCurrentIndex( newindex, QItemSelectionModel::ClearAndSelect ); } else { // append to root rule int rows = mModel->rowCount(); mModel->insertRule( QModelIndex(), rows, newrule ); QModelIndex newindex = mModel->index( rows, 0 ); viewRules->selectionModel()->setCurrentIndex( newindex, QItemSelectionModel::ClearAndSelect ); } editRule(); }
void QgsRuleBasedRendererWidget::editRule() { editRule( viewRules->selectionModel()->currentIndex() ); }
void CSV::createMainPage () { setCaption(tr("CSV Quotes")); QString s = "new"; QString s2 = tr("New Rule"); toolbar->addButton(s, newchart, s2); QObject::connect(toolbar->getButton(s), SIGNAL(clicked()), this, SLOT(newRule())); s = "edit"; s2 = tr("Edit Rule"); toolbar->addButton(s, edit, s2); QObject::connect(toolbar->getButton(s), SIGNAL(clicked()), this, SLOT(editRule())); s = "delete"; s2 = tr("Delete Rule"); toolbar->addButton(s, deleteitem, s2); QObject::connect(toolbar->getButton(s), SIGNAL(clicked()), this, SLOT(deleteRule())); QLabel *label = new QLabel(tr("Rule"), baseWidget); grid->addWidget(label, 0, 0); ruleCombo = new QComboBox(baseWidget); updateRules(); grid->addWidget(ruleCombo, 0, 1); label = new QLabel(tr("Input"), baseWidget); grid->addWidget(label, 1, 0); QStringList l; file = new FileButton(baseWidget, l, lastPath); grid->addWidget(file, 1, 1); label = new QLabel(tr("Symbol"), baseWidget); grid->addWidget(label, 2, 0); symbol = new QLineEdit(baseWidget); grid->addWidget(symbol, 2, 1); label = new QLabel(tr("Auto Reload"), baseWidget); grid->addWidget(label, 3, 0); minutes = new QSpinBox(baseWidget); minutes->setMinValue(0); minutes->setMaxValue(99); minutes->setLineStep(1); QObject::connect(minutes, SIGNAL(valueChanged(int)), this, SLOT(reloadTimerChanged(int))); grid->addWidget(minutes, 3, 1); dateRange = new QCheckBox(tr("Select Date Range"), baseWidget); QObject::connect(dateRange, SIGNAL(toggled(bool)), this, SLOT(dateRangeChanged(bool))); grid->addWidget(dateRange, 5, 0); label = new QLabel(tr("Date Start"), baseWidget); grid->addWidget(label, 6, 0); sdate = new Q3DateEdit(QDate::currentDate(), baseWidget); sdate->setAutoAdvance(TRUE); sdate->setOrder(Q3DateEdit::YMD); grid->addWidget(sdate, 6, 1); label = new QLabel(tr("Date End"), baseWidget); grid->addWidget(label, 7, 0); edate = new Q3DateEdit(QDate::currentDate(), baseWidget); edate->setAutoAdvance(TRUE); edate->setOrder(Q3DateEdit::YMD); grid->addWidget(edate, 7, 1); // set the default end date QDate dt = QDate::currentDate(); if (dt.dayOfWeek() == 6) dt = dt.addDays(-1); else { if (dt.dayOfWeek() == 7) dt = dt.addDays(-2); } edate->setDate(dt); sdate->setDate(dt); }
void QgsRuleBasedLabelingWidget::editRule() { editRule( viewRules->selectionModel()->currentIndex() ); }
QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) : QgsRendererV2Widget( layer, style ) { mRenderer = 0; // 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( 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() ) ); currentRuleChanged(); // store/restore header section widths connect( viewRules->header(), SIGNAL( sectionResized( int, int, int ) ), this, SLOT( saveSectionWidth( int, int, int ) ) ); restoreSectionWidths(); }
void ContentBlockingDialog::addRule() { m_ui->customRulesViewWidget->insertRow(); editRule(); }