Skip to content

Commit c7f3af0

Browse files
etienneskytimlinux
authored andcommittedMar 31, 2012
add simple layer properties dialog to browser dock (source, provider and metadata) ; ui tweaks in raster properties dialog
Signed-off-by: Tim Sutton <tim@linfiniti.com>
1 parent 7b8bc5a commit c7f3af0

File tree

4 files changed

+249
-10
lines changed

4 files changed

+249
-10
lines changed
 

‎src/app/qgsbrowserdockwidget.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
#include "qgsvectorlayer.h"
1515
#include "qgisapp.h"
1616

17+
// browser layer properties dialog
18+
#include "qgsapplication.h"
19+
#include "qgsmapcanvas.h"
20+
#include <ui_qgsbrowserlayerpropertiesbase.h>
21+
1722
#include <QDragEnterEvent>
1823
/**
1924
Utility class for correct drag&drop handling.
@@ -166,6 +171,7 @@ void QgsBrowserDockWidget::showContextMenu( const QPoint & pt )
166171
{
167172
menu->addAction( tr( "Add Layer" ), this, SLOT( addCurrentLayer( ) ) );
168173
menu->addAction( tr( "Add Selected Layers" ), this, SLOT( addSelectedLayers() ) );
174+
menu->addAction( tr( "Properties" ), this, SLOT( showProperties( ) ) );
169175
}
170176

171177
QList<QAction*> actions = item->actions();
@@ -352,3 +358,87 @@ void QgsBrowserDockWidget::addSelectedLayers()
352358

353359
QApplication::restoreOverrideCursor();
354360
}
361+
362+
void QgsBrowserDockWidget::showProperties( )
363+
{
364+
QgsDebugMsg( "Entered" );
365+
QgsDataItem* dataItem = mModel->dataItem( mBrowserView->currentIndex() );
366+
367+
if ( dataItem != NULL && dataItem->type() == QgsDataItem::Layer )
368+
{
369+
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( dataItem );
370+
if ( layerItem != NULL )
371+
{
372+
QgsMapLayer::LayerType type = layerItem->mapLayerType();
373+
QString layerMetadata = tr( "Error" );
374+
QgsCoordinateReferenceSystem layerCrs;
375+
QString notice;
376+
377+
// temporarily override /Projections/defaultBehaviour to avoid dialog prompt
378+
QSettings settings;
379+
QString defaultProjectionOption = settings.value( "/Projections/defaultBehaviour", "prompt" ).toString();
380+
if ( settings.value( "/Projections/defaultBehaviour", "prompt" ).toString() == "prompt" )
381+
{
382+
settings.setValue( "/Projections/defaultBehaviour", "useProject" );
383+
}
384+
385+
// find root item
386+
// we need to create a temporary layer to get metadata
387+
// we could use a provider but the metadata is not as complete and "pretty" and this is easier
388+
QgsDebugMsg( QString( "creating temporary layer using path %1" ).arg( layerItem->path() ) );
389+
if ( type == QgsMapLayer::RasterLayer )
390+
{
391+
QgsDebugMsg( "creating raster layer" );
392+
// should copy code from addLayer() to split uri ?
393+
QgsRasterLayer* layer = new QgsRasterLayer( 0, layerItem->uri(), layerItem->uri(), layerItem->providerKey() );
394+
if ( layer != NULL )
395+
{
396+
layerCrs = layer->crs();
397+
layerMetadata = layer->metadata();
398+
delete layer;
399+
}
400+
}
401+
else if ( type == QgsMapLayer::VectorLayer )
402+
{
403+
QgsDebugMsg( "creating vector layer" );
404+
QgsVectorLayer* layer = new QgsVectorLayer( layerItem->uri(), layerItem->name(), layerItem->providerKey() );
405+
if ( layer != NULL )
406+
{
407+
layerCrs = layer->crs();
408+
layerMetadata = layer->metadata();
409+
delete layer;
410+
}
411+
}
412+
413+
// restore /Projections/defaultBehaviour
414+
if ( defaultProjectionOption == "prompt" )
415+
{
416+
settings.setValue( "/Projections/defaultBehaviour", defaultProjectionOption );
417+
}
418+
419+
// initialize dialog
420+
QDialog *dialog = new QDialog( this );
421+
Ui::QgsBrowserLayerPropertiesBase ui;
422+
ui.setupUi( dialog );
423+
424+
dialog->setWindowTitle( tr( "Layer Properties" ) );
425+
ui.leName->setText( layerItem->name() );
426+
ui.leSource->setText( layerItem->path() );
427+
ui.leProvider->setText( layerItem->providerKey() );
428+
QString myStyle = QgsApplication::reportStyleSheet();
429+
ui.txtbMetadata->document()->setDefaultStyleSheet( myStyle );
430+
ui.txtbMetadata->setHtml( layerMetadata );
431+
432+
// report if layer was set to to project crs without prompt (may give a false positive)
433+
if ( defaultProjectionOption == "prompt" )
434+
{
435+
QgsCoordinateReferenceSystem defaultCrs =
436+
QgisApp::instance()->mapCanvas()->mapRenderer()->destinationCrs();
437+
if ( layerCrs == defaultCrs )
438+
ui.lblNotice->setText( "NOTICE: Layer srs set from project (" + defaultCrs.authid() + ")" );
439+
}
440+
441+
dialog->show();
442+
}
443+
}
444+
}

‎src/app/qgsbrowserdockwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ class QgsBrowserDockWidget : public QDockWidget
2525

2626
void refresh();
2727

28+
// layer menu items
2829
void addCurrentLayer();
2930
void addSelectedLayers();
31+
void showProperties();
3032

3133
protected:
3234

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>QgsBrowserLayerPropertiesBase</class>
4+
<widget class="QDialog" name="QgsBrowserLayerPropertiesBase">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>800</width>
10+
<height>617</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Dialog</string>
15+
</property>
16+
<property name="sizeGripEnabled">
17+
<bool>true</bool>
18+
</property>
19+
<layout class="QVBoxLayout" name="verticalLayout">
20+
<item>
21+
<layout class="QGridLayout" name="gridLayout">
22+
<item row="0" column="0">
23+
<widget class="QLabel" name="label">
24+
<property name="text">
25+
<string>Display Name</string>
26+
</property>
27+
</widget>
28+
</item>
29+
<item row="1" column="0">
30+
<widget class="QLabel" name="label_2">
31+
<property name="text">
32+
<string>Layer Source</string>
33+
</property>
34+
</widget>
35+
</item>
36+
<item row="0" column="1">
37+
<widget class="QLineEdit" name="leName">
38+
<property name="enabled">
39+
<bool>true</bool>
40+
</property>
41+
<property name="readOnly">
42+
<bool>true</bool>
43+
</property>
44+
</widget>
45+
</item>
46+
<item row="1" column="1">
47+
<widget class="QLineEdit" name="leSource">
48+
<property name="enabled">
49+
<bool>true</bool>
50+
</property>
51+
<property name="readOnly">
52+
<bool>true</bool>
53+
</property>
54+
</widget>
55+
</item>
56+
<item row="2" column="0">
57+
<widget class="QLabel" name="label_4">
58+
<property name="text">
59+
<string>Provider</string>
60+
</property>
61+
</widget>
62+
</item>
63+
<item row="2" column="1">
64+
<widget class="QLineEdit" name="leProvider">
65+
<property name="enabled">
66+
<bool>true</bool>
67+
</property>
68+
<property name="readOnly">
69+
<bool>true</bool>
70+
</property>
71+
</widget>
72+
</item>
73+
</layout>
74+
</item>
75+
<item>
76+
<widget class="Line" name="line">
77+
<property name="orientation">
78+
<enum>Qt::Horizontal</enum>
79+
</property>
80+
</widget>
81+
</item>
82+
<item>
83+
<widget class="QLabel" name="label_3">
84+
<property name="text">
85+
<string>Metadata</string>
86+
</property>
87+
</widget>
88+
</item>
89+
<item>
90+
<widget class="QTextBrowser" name="txtbMetadata"/>
91+
</item>
92+
<item>
93+
<layout class="QHBoxLayout" name="horizontalLayout_2">
94+
<item>
95+
<widget class="QLabel" name="lblNotice">
96+
<property name="enabled">
97+
<bool>true</bool>
98+
</property>
99+
<property name="text">
100+
<string/>
101+
</property>
102+
</widget>
103+
</item>
104+
<item>
105+
<widget class="QDialogButtonBox" name="buttonBox">
106+
<property name="orientation">
107+
<enum>Qt::Horizontal</enum>
108+
</property>
109+
<property name="standardButtons">
110+
<set>QDialogButtonBox::Close</set>
111+
</property>
112+
</widget>
113+
</item>
114+
</layout>
115+
</item>
116+
</layout>
117+
</widget>
118+
<resources/>
119+
<connections>
120+
<connection>
121+
<sender>buttonBox</sender>
122+
<signal>accepted()</signal>
123+
<receiver>QgsBrowserLayerPropertiesBase</receiver>
124+
<slot>accept()</slot>
125+
<hints>
126+
<hint type="sourcelabel">
127+
<x>248</x>
128+
<y>254</y>
129+
</hint>
130+
<hint type="destinationlabel">
131+
<x>157</x>
132+
<y>274</y>
133+
</hint>
134+
</hints>
135+
</connection>
136+
<connection>
137+
<sender>buttonBox</sender>
138+
<signal>rejected()</signal>
139+
<receiver>QgsBrowserLayerPropertiesBase</receiver>
140+
<slot>reject()</slot>
141+
<hints>
142+
<hint type="sourcelabel">
143+
<x>316</x>
144+
<y>260</y>
145+
</hint>
146+
<hint type="destinationlabel">
147+
<x>286</x>
148+
<y>274</y>
149+
</hint>
150+
</hints>
151+
</connection>
152+
</connections>
153+
</ui>

‎src/ui/qgsrasterlayerpropertiesbase.ui

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -952,9 +952,6 @@
952952
<string>Colormap</string>
953953
</attribute>
954954
<layout class="QGridLayout">
955-
<property name="margin">
956-
<number>0</number>
957-
</property>
958955
<item row="1" column="0" colspan="2">
959956
<widget class="QGroupBox" name="grpGenerateColorMap">
960957
<property name="title">
@@ -1494,9 +1491,6 @@
14941491
<string>General</string>
14951492
</attribute>
14961493
<layout class="QGridLayout">
1497-
<property name="margin">
1498-
<number>0</number>
1499-
</property>
15001494
<item row="0" column="0" colspan="2">
15011495
<widget class="QLabel" name="lblDisplayName">
15021496
<property name="text">
@@ -1517,7 +1511,10 @@
15171511
<item row="1" column="2" colspan="4">
15181512
<widget class="QLineEdit" name="leLayerSource">
15191513
<property name="enabled">
1520-
<bool>false</bool>
1514+
<bool>true</bool>
1515+
</property>
1516+
<property name="readOnly">
1517+
<bool>true</bool>
15211518
</property>
15221519
</widget>
15231520
</item>
@@ -1857,9 +1854,6 @@
18571854
<string>Pyramids</string>
18581855
</attribute>
18591856
<layout class="QGridLayout">
1860-
<property name="margin">
1861-
<number>0</number>
1862-
</property>
18631857
<item row="0" column="3" colspan="2">
18641858
<widget class="QLabel" name="textLabel5">
18651859
<property name="text">

0 commit comments

Comments
 (0)
Please sign in to comment.