43 changes: 43 additions & 0 deletions src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "qgslogger.h"
#include "qstring.h"

#include <QKeyEvent>
#include <QMenu>
#include <QProgressDialog>
#include <QSettings>
Expand Down Expand Up @@ -110,6 +111,7 @@ QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* laye

QgsRuleBasedRendererV2Widget::~QgsRuleBasedRendererV2Widget()
{
qDeleteAll( mCopyBuffer );
delete mRenderer;
}

Expand Down Expand Up @@ -366,6 +368,23 @@ QList<QgsSymbolV2*> QgsRuleBasedRendererV2Widget::selectedSymbols()
return symbolList;
}

QgsRuleBasedRendererV2::RuleList QgsRuleBasedRendererV2Widget::selectedRules()
{
QgsRuleBasedRendererV2::RuleList rl;
QItemSelection sel = viewRules->selectionModel()->selection();
foreach ( QItemSelectionRange range, sel )
{
QModelIndex parent = range.parent();
QgsRuleBasedRendererV2::Rule* parentRule = mModel->ruleForIndex( parent );
QgsRuleBasedRendererV2::RuleList& children = parentRule->children();
for ( int row = range.top(); row <= range.bottom(); row++ )
{
rl.append( children[row]->clone() );
}
}
return rl;
}

void QgsRuleBasedRendererV2Widget::refreshSymbolView()
{
// TODO: model/view
Expand All @@ -377,6 +396,30 @@ void QgsRuleBasedRendererV2Widget::refreshSymbolView()
*/
}

void QgsRuleBasedRendererV2Widget::keyPressEvent( QKeyEvent* event )
{
if ( !event )
{
return;
}

if ( event->key() == Qt::Key_C && event->modifiers() == Qt::ControlModifier )
{
qDeleteAll( mCopyBuffer );
mCopyBuffer.clear();
mCopyBuffer = selectedRules();
}
else if ( event->key() == Qt::Key_V && event->modifiers() == Qt::ControlModifier )
{
QgsRuleBasedRendererV2::RuleList::const_iterator rIt = mCopyBuffer.constBegin();
for ( ; rIt != mCopyBuffer.constEnd(); ++rIt )
{
int rows = mModel->rowCount();
mModel->insertRule( QModelIndex(), rows, ( *rIt )->clone() );
}
}
}

#include "qgssymbollevelsv2dialog.h"

void QgsRuleBasedRendererV2Widget::setRenderingOrder()
Expand Down
4 changes: 4 additions & 0 deletions src/gui/symbology-ng/qgsrulebasedrendererv2widget.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,18 @@ class GUI_EXPORT QgsRuleBasedRendererV2Widget : public QgsRendererV2Widget, priv
QgsRuleBasedRendererV2::Rule* currentRule();

QList<QgsSymbolV2*> selectedSymbols();
QgsRuleBasedRendererV2::RuleList selectedRules();
void refreshSymbolView();
void keyPressEvent( QKeyEvent* event );

QgsRuleBasedRendererV2* mRenderer;
QgsRuleBasedRendererV2Model* mModel;

QMenu* mRefineMenu;
QAction* mDeleteAction;

QgsRuleBasedRendererV2::RuleList mCopyBuffer;

protected slots:
void copy();
void paste();
Expand Down