Skip to content

Commit 393a415

Browse files
committed
Loading and saving of custom layer order
1 parent 55c4ae5 commit 393a415

File tree

3 files changed

+55
-10
lines changed

3 files changed

+55
-10
lines changed

src/app/qgisapp.cpp

+5-10
Original file line numberDiff line numberDiff line change
@@ -2227,25 +2227,18 @@ void QgisApp::initLayerTreeView()
22272227
addDockWidget( Qt::LeftDockWidgetArea, mLayerTreeDock );
22282228

22292229
mLayerTreeCanvasBridge = new QgsLayerTreeMapCanvasBridge( QgsProject::instance()->layerTreeRoot(), mMapCanvas, this );
2230+
connect( QgsProject::instance(), SIGNAL(writeProject(QDomDocument&)), mLayerTreeCanvasBridge, SLOT(writeProject(QDomDocument&)));
2231+
connect( QgsProject::instance(), SIGNAL(readProject(QDomDocument)), mLayerTreeCanvasBridge, SLOT(readProject(QDomDocument)));
22302232

22312233
mMapLayerOrder = new QgsCustomLayerOrderWidget(mLayerTreeCanvasBridge, this);
22322234
mMapLayerOrder->setObjectName("theMapLayerOrder");
22332235

2234-
QCheckBox *orderCb = new QCheckBox( tr( "Control rendering order" ) );
2235-
orderCb->setChecked( false );
2236-
22372236
mMapLayerOrder->setWhatsThis( tr( "Map layer list that displays all layers in drawing order." ) );
22382237
mLayerOrderDock = new QDockWidget( tr( "Layer order" ), this );
22392238
mLayerOrderDock->setObjectName( "LayerOrder" );
22402239
mLayerOrderDock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
22412240

2242-
QWidget* w = new QWidget( this );
2243-
QVBoxLayout* l = new QVBoxLayout;
2244-
l->setMargin( 0 );
2245-
l->addWidget( mMapLayerOrder );
2246-
l->addWidget( orderCb );
2247-
w->setLayout( l );
2248-
mLayerOrderDock->setWidget( w );
2241+
mLayerOrderDock->setWidget( mMapLayerOrder );
22492242
addDockWidget( Qt::LeftDockWidgetArea, mLayerOrderDock );
22502243
mLayerOrderDock->hide();
22512244
}
@@ -3263,6 +3256,8 @@ void QgisApp::fileNew( bool thePromptToSaveFlag, bool forceBlank )
32633256
QgsProject* prj = QgsProject::instance();
32643257
prj->clear();
32653258

3259+
mLayerTreeCanvasBridge->clear();
3260+
32663261
//set the color for selections
32673262
//the default can be set in qgisoptions
32683263
//use project properties to override the color on a per project basis

src/gui/layertree/qgslayertreemapcanvasbridge.cpp

+45
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ QgsLayerTreeMapCanvasBridge::QgsLayerTreeMapCanvasBridge(QgsLayerTreeGroup *root
2222
setCanvasLayers();
2323
}
2424

25+
void QgsLayerTreeMapCanvasBridge::clear()
26+
{
27+
setHasCustomLayerOrder(false);
28+
setCustomLayerOrder(defaultLayerOrder());
29+
}
30+
2531
QStringList QgsLayerTreeMapCanvasBridge::defaultLayerOrder() const
2632
{
2733
QStringList order;
@@ -147,6 +153,45 @@ void QgsLayerTreeMapCanvasBridge::setCanvasLayers()
147153
mPendingCanvasUpdate = false;
148154
}
149155

156+
void QgsLayerTreeMapCanvasBridge::readProject(const QDomDocument& doc)
157+
{
158+
QDomElement elem = doc.documentElement().firstChildElement("layer-tree-canvas");
159+
if (elem.isNull())
160+
return;
161+
162+
QDomElement customOrderElem = elem.firstChildElement("custom-order");
163+
if (!customOrderElem.isNull())
164+
{
165+
QStringList order;
166+
QDomElement itemElem = customOrderElem.firstChildElement("item");
167+
while (!itemElem.isNull())
168+
{
169+
order.append(itemElem.text());
170+
itemElem = itemElem.nextSiblingElement("item");
171+
}
172+
173+
setHasCustomLayerOrder( customOrderElem.attribute("enabled", 0).toInt() );
174+
setCustomLayerOrder(order);
175+
}
176+
}
177+
178+
void QgsLayerTreeMapCanvasBridge::writeProject(QDomDocument& doc)
179+
{
180+
QDomElement elem = doc.createElement("layer-tree-canvas");
181+
QDomElement customOrderElem = doc.createElement("custom-order");
182+
customOrderElem.setAttribute("enabled", mHasCustomLayerOrder ? 1 : 0);
183+
184+
foreach (QString layerId, mCustomLayerOrder)
185+
{
186+
QDomElement itemElem = doc.createElement("item");
187+
itemElem.appendChild(doc.createTextNode(layerId));
188+
customOrderElem.appendChild(itemElem);
189+
}
190+
elem.appendChild(customOrderElem);
191+
192+
doc.documentElement().appendChild(elem);
193+
}
194+
150195
void QgsLayerTreeMapCanvasBridge::setCanvasLayers(QgsLayerTreeNode *node, QList<QgsMapCanvasLayer> &layers)
151196
{
152197
if (QgsLayerTree::isLayer(node))

src/gui/layertree/qgslayertreemapcanvasbridge.h

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class GUI_EXPORT QgsLayerTreeMapCanvasBridge : public QObject
1717
public:
1818
QgsLayerTreeMapCanvasBridge(QgsLayerTreeGroup* root, QgsMapCanvas* canvas, QObject* parent = 0);
1919

20+
void clear();
21+
2022
bool hasCustomLayerOrder() const { return mHasCustomLayerOrder; }
2123
QStringList customLayerOrder() const { return mCustomLayerOrder; }
2224

@@ -39,6 +41,9 @@ public slots:
3941
//! force update of canvas layers from the layer tree. Normally this should not be needed to be called.
4042
void setCanvasLayers();
4143

44+
void readProject( const QDomDocument& doc );
45+
void writeProject( QDomDocument& doc );
46+
4247
signals:
4348
void hasCustomLayerOrderChanged(bool);
4449
void customLayerOrderChanged(const QStringList& order);

0 commit comments

Comments
 (0)