[styledock] inline new rule panel

This commit is contained in:
Nathan Woodrow 2016-06-22 21:13:19 +10:00
parent 1f0fce7852
commit 3fb87de1f8

View File

@ -134,29 +134,24 @@ void QgsRuleBasedRendererV2Widget::addRule()
QgsSymbolV2* s = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); QgsSymbolV2* s = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
QgsRuleBasedRendererV2::Rule* newrule = new QgsRuleBasedRendererV2::Rule( s ); QgsRuleBasedRendererV2::Rule* newrule = new QgsRuleBasedRendererV2::Rule( s );
QgsRendererRulePropsDialog dlg( newrule, mLayer, mStyle, this, mMapCanvas ); QgsRuleBasedRendererV2::Rule* current = currentRule();
if ( dlg.exec() ) if ( current )
{ {
QgsRuleBasedRendererV2::Rule* current = currentRule(); // add after this rule
if ( current ) QModelIndex currentIndex = viewRules->selectionModel()->currentIndex();
{ mModel->insertRule( currentIndex.parent(), currentIndex.row() + 1, newrule );
// add after this rule QModelIndex newindex = mModel->index( currentIndex.row() + 1, 0, currentIndex.parent() );
QModelIndex currentIndex = viewRules->selectionModel()->currentIndex(); viewRules->selectionModel()->setCurrentIndex( newindex, QItemSelectionModel::ClearAndSelect );
mModel->insertRule( currentIndex.parent(), currentIndex.row() + 1, newrule );
}
else
{
// append to root rule
int rows = mModel->rowCount();
mModel->insertRule( QModelIndex(), rows, newrule );
}
mModel->clearFeatureCounts();
emit widgetChanged();
} }
else else
{ {
delete newrule; // 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();
} }
QgsRuleBasedRendererV2::Rule* QgsRuleBasedRendererV2Widget::currentRule() QgsRuleBasedRendererV2::Rule* QgsRuleBasedRendererV2Widget::currentRule()
@ -180,12 +175,12 @@ void QgsRuleBasedRendererV2Widget::editRule( const QModelIndex& index )
QgsRuleBasedRendererV2::Rule* rule = mModel->ruleForIndex( index ); QgsRuleBasedRendererV2::Rule* rule = mModel->ruleForIndex( index );
QgsRendererRulePropsWidget* widget = new QgsRendererRulePropsWidget( rule, mLayer, mStyle, this, mMapCanvas); QgsRendererRulePropsWidget* widget = new QgsRendererRulePropsWidget( rule, mLayer, mStyle, this, mMapCanvas );
widget->setDockMode( true ); widget->setDockMode( true );
widget->setPanelTitle(tr("Edit rule")); widget->setPanelTitle( tr( "Edit rule" ) );
connect( widget, SIGNAL(panelAccepted(QgsPanelWidget*)), this, SLOT(ruleWidgetPanelAccepted(QgsPanelWidget*))); connect( widget, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( ruleWidgetPanelAccepted( QgsPanelWidget* ) ) );
connect( widget, SIGNAL(widgetChanged()), this, SLOT(liveUpdateRuleFromPanel())); connect( widget, SIGNAL( widgetChanged() ), this, SLOT( liveUpdateRuleFromPanel() ) );
openPanel(widget); openPanel( widget );
} }
void QgsRuleBasedRendererV2Widget::removeRule() void QgsRuleBasedRendererV2Widget::removeRule()
@ -491,20 +486,21 @@ void QgsRuleBasedRendererV2Widget::paste()
mModel->dropMimeData( mime, Qt::CopyAction, index.row(), index.column(), index.parent() ); mModel->dropMimeData( mime, Qt::CopyAction, index.row(), index.column(), index.parent() );
} }
void QgsRuleBasedRendererV2Widget::ruleWidgetPanelAccepted(QgsPanelWidget *panel) void QgsRuleBasedRendererV2Widget::ruleWidgetPanelAccepted( QgsPanelWidget *panel )
{ {
QgsRendererRulePropsWidget* widget = qobject_cast<QgsRendererRulePropsWidget*>( panel ); QgsRendererRulePropsWidget* widget = qobject_cast<QgsRendererRulePropsWidget*>( panel );
widget->apply(); widget->apply();
// model should know about the change and emit dataChanged signal for the view // model should know about the change and emit dataChanged signal for the view
QModelIndex index = viewRules->selectionModel()->currentIndex(); QModelIndex index = viewRules->selectionModel()->currentIndex();
mModel->updateRule( index.parent(), index.row() ); mModel->updateRule( index.parent(), index.row() );
mModel->clearFeatureCounts(); mModel->clearFeatureCounts();
emit widgetChanged();
} }
void QgsRuleBasedRendererV2Widget::liveUpdateRuleFromPanel() void QgsRuleBasedRendererV2Widget::liveUpdateRuleFromPanel()
{ {
ruleWidgetPanelAccepted( qobject_cast<QgsPanelWidget*>(sender())); ruleWidgetPanelAccepted( qobject_cast<QgsPanelWidget*>( sender() ) );
} }
@ -649,8 +645,8 @@ QgsRendererRulePropsWidget::QgsRendererRulePropsWidget( QgsRuleBasedRendererV2::
mSymbolSelector = new QgsSymbolV2SelectorWidget( mSymbol, style, mLayer, this ); mSymbolSelector = new QgsSymbolV2SelectorWidget( mSymbol, style, mLayer, this );
mSymbolSelector->setMapCanvas( mMapCanvas ); mSymbolSelector->setMapCanvas( mMapCanvas );
connect(mSymbolSelector, SIGNAL(widgetChanged()), this, SIGNAL(widgetChanged())); connect( mSymbolSelector, SIGNAL( widgetChanged() ), this, SIGNAL( widgetChanged() ) );
connect( mSymbolSelector, SIGNAL(showPanel(QgsPanelWidget*)), this, SLOT(openPanel(QgsPanelWidget*))); connect( mSymbolSelector, SIGNAL( showPanel( QgsPanelWidget* ) ), this, SLOT( openPanel( QgsPanelWidget* ) ) );
QVBoxLayout* l = new QVBoxLayout; QVBoxLayout* l = new QVBoxLayout;
l->addWidget( mSymbolSelector ); l->addWidget( mSymbolSelector );
@ -666,20 +662,20 @@ QgsRendererRulePropsWidget::~QgsRendererRulePropsWidget()
} }
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog(QgsRuleBasedRendererV2::Rule *rule, QgsVectorLayer *layer, QgsStyleV2 *style, QWidget *parent, QgsMapCanvas *mapCanvas) QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule *rule, QgsVectorLayer *layer, QgsStyleV2 *style, QWidget *parent, QgsMapCanvas *mapCanvas )
: QDialog(parent) : QDialog( parent )
{ {
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
setWindowModality( Qt::WindowModal ); setWindowModality( Qt::WindowModal );
#endif #endif
this->setLayout(new QVBoxLayout()); this->setLayout( new QVBoxLayout() );
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
mPropsWidget = new QgsRendererRulePropsWidget(rule, layer, style, this, mapCanvas); mPropsWidget = new QgsRendererRulePropsWidget( rule, layer, style, this, mapCanvas );
this->layout()->addWidget(mPropsWidget); this->layout()->addWidget( mPropsWidget );
this->layout()->addWidget(buttonBox); this->layout()->addWidget( buttonBox );
connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) ); connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) ); connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
@ -796,7 +792,7 @@ void QgsRendererRulePropsWidget::apply()
mRule->setSymbol( groupSymbol->isChecked() ? mSymbol->clone() : nullptr ); mRule->setSymbol( groupSymbol->isChecked() ? mSymbol->clone() : nullptr );
} }
void QgsRendererRulePropsWidget::setDockMode(bool dockMode) void QgsRendererRulePropsWidget::setDockMode( bool dockMode )
{ {
QgsPanelWidget::setDockMode( dockMode ); QgsPanelWidget::setDockMode( dockMode );
mSymbolSelector->setDockMode( true ); mSymbolSelector->setDockMode( true );