Skip to content

Commit f2b69e9

Browse files
committed
Added "Group selected" layer tree view action
1 parent 4162c21 commit f2b69e9

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

src/app/qgisapp.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -2228,6 +2228,11 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
22282228
menu->addAction( actions->actionMakeTopLevel(menu) );
22292229
}
22302230

2231+
if (mView->selectedNodes(true).count() >= 2)
2232+
{
2233+
menu->addAction( actions->actionGroupSelected(menu) );
2234+
}
2235+
22312236
menu->addAction( actions->actionRemoveGroupOrLayer(menu) );
22322237
menu->addAction( actions->actionRenameGroupOrLayer(menu) );
22332238
}

src/gui/layertree/qgslayertreeviewdefaultactions.cpp

+41-6
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,18 @@ QAction* QgsLayerTreeViewDefaultActions::actionMakeTopLevel(QObject* parent)
8888
return a;
8989
}
9090

91+
QAction* QgsLayerTreeViewDefaultActions::actionGroupSelected(QObject* parent)
92+
{
93+
QAction* a = new QAction(tr("&Group Selected"), parent);
94+
connect(a, SIGNAL(triggered()), this, SLOT(groupSelected()));
95+
return a;
96+
}
97+
9198
void QgsLayerTreeViewDefaultActions::addGroup()
9299
{
93100
QgsLayerTreeGroup* group = mView->currentGroupNode();
94-
QString prefix = group == mView->layerTreeModel()->rootGroup() ? "group" : "sub-group";
95-
96-
QString newName = prefix + "1";
97-
for ( int i = 2; group->findGroup(newName); ++i)
98-
newName = prefix + QString::number(i);
99101

100-
QgsLayerTreeGroup* newGroup = group->addGroup(newName);
102+
QgsLayerTreeGroup* newGroup = group->addGroup(uniqueGroupName(group));
101103
mView->edit( mView->layerTreeModel()->node2index(newGroup) );
102104
}
103105

@@ -202,6 +204,16 @@ void QgsLayerTreeViewDefaultActions::zoomToLayers(QgsMapCanvas* canvas, const QL
202204
}
203205

204206

207+
QString QgsLayerTreeViewDefaultActions::uniqueGroupName(QgsLayerTreeGroup* parentGroup)
208+
{
209+
QString prefix = parentGroup == mView->layerTreeModel()->rootGroup() ? "group" : "sub-group";
210+
QString newName = prefix + "1";
211+
for ( int i = 2; parentGroup->findGroup(newName); ++i)
212+
newName = prefix + QString::number(i);
213+
return newName;
214+
}
215+
216+
205217
void QgsLayerTreeViewDefaultActions::makeTopLevel()
206218
{
207219
QgsLayerTreeNode* node = mView->currentNode();
@@ -217,3 +229,26 @@ void QgsLayerTreeViewDefaultActions::makeTopLevel()
217229
rootGroup->addChildNode(clonedNode);
218230
parentGroup->removeChildNode(node);
219231
}
232+
233+
234+
void QgsLayerTreeViewDefaultActions::groupSelected()
235+
{
236+
QList<QgsLayerTreeNode*> nodes = mView->selectedNodes(true);
237+
if (nodes.count() < 2)
238+
return;
239+
240+
QgsLayerTreeGroup* parentGroup = mView->layerTreeModel()->rootGroup();
241+
242+
QgsLayerTreeGroup* newGroup = new QgsLayerTreeGroup(uniqueGroupName(parentGroup));
243+
foreach (QgsLayerTreeNode* node, nodes)
244+
newGroup->addChildNode(node->clone());
245+
246+
parentGroup->addChildNode(newGroup);
247+
248+
foreach (QgsLayerTreeNode* node, nodes)
249+
{
250+
QgsLayerTreeGroup* group = qobject_cast<QgsLayerTreeGroup*>(node->parent());
251+
if (group)
252+
group->removeChildNode(node);
253+
}
254+
}

src/gui/layertree/qgslayertreeviewdefaultactions.h

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
class QAction;
77

8+
class QgsLayerTreeGroup;
89
class QgsLayerTreeView;
910
class QgsMapCanvas;
1011
class QgsMapLayer;
@@ -26,6 +27,7 @@ class GUI_EXPORT QgsLayerTreeViewDefaultActions : public QObject
2627
// TODO: zoom to selected
2728

2829
QAction* actionMakeTopLevel(QObject* parent = 0);
30+
QAction* actionGroupSelected(QObject* parent = 0);
2931

3032
protected slots:
3133
void addGroup();
@@ -36,10 +38,13 @@ protected slots:
3638
void zoomToLayer();
3739
void zoomToGroup();
3840
void makeTopLevel();
41+
void groupSelected();
3942

4043
protected:
4144
void zoomToLayers(QgsMapCanvas* canvas, const QList<QgsMapLayer*>& layers);
4245

46+
QString uniqueGroupName(QgsLayerTreeGroup* parentGroup);
47+
4348
protected:
4449
QgsLayerTreeView* mView;
4550
};

0 commit comments

Comments
 (0)