Skip to content

Commit 17447e4

Browse files
committedNov 1, 2018
[FEATURE][browser] Restore preview functionality from old 2.x standalone
browser into inbuilt browser dock panel layer properties widget
1 parent 7f332fb commit 17447e4

File tree

6 files changed

+104
-39
lines changed

6 files changed

+104
-39
lines changed
 
Binary file not shown.

‎src/app/qgisapp.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,13 @@ QgisApp::~QgisApp()
15591559
delete canvas;
15601560
}
15611561

1562+
// these may have references to map layers which need to be cleaned up
1563+
delete mBrowserWidget;
1564+
mBrowserWidget = nullptr;
1565+
delete mBrowserWidget2;
1566+
mBrowserWidget2 = nullptr;
1567+
delete mBrowserModel;
1568+
15621569
QgsGui::instance()->nativePlatformInterface()->cleanup();
15631570

15641571
// This function *MUST* be the last one called, as it destroys in

‎src/gui/qgsbrowserdockwidget_p.cpp

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "qgsmeshlayer.h"
4141
#include "qgsgui.h"
4242
#include "qgsnative.h"
43+
#include "qgsmaptoolpan.h"
4344
#include <QDesktopServices>
4445

4546
#include <QDragEnterEvent>
@@ -119,6 +120,19 @@ QgsBrowserLayerProperties::QgsBrowserLayerProperties( QWidget *parent )
119120
// we don't want links to open in the little widget, open them externally instead
120121
mMetadataTextBrowser->setOpenLinks( false );
121122
connect( mMetadataTextBrowser, &QTextBrowser::anchorClicked, this, &QgsBrowserLayerProperties::urlClicked );
123+
124+
mMapCanvas->setLayers( QList< QgsMapLayer * >() );
125+
mMapCanvas->setMapTool( new QgsMapToolPan( mMapCanvas ) );
126+
mMapCanvas->freeze( true );
127+
128+
connect( mTabWidget, &QTabWidget::currentChanged, this, [ = ]
129+
{
130+
if ( mTabWidget->currentWidget() == mPreviewTab && mMapCanvas->isFrozen() )
131+
{
132+
mMapCanvas->freeze( false );
133+
mMapCanvas->refresh();
134+
}
135+
} );
122136
}
123137

124138
class ProjectionSettingRestorer
@@ -159,6 +173,8 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
159173
ProjectionSettingRestorer restorer;
160174
( void )restorer; // no warnings
161175

176+
mLayer.reset();
177+
162178
// find root item
163179
// we need to create a temporary layer to get metadata
164180
// we could use a provider but the metadata is not as complete and "pretty" and this is easier
@@ -167,59 +183,41 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
167183
{
168184
QgsDebugMsg( QStringLiteral( "creating raster layer" ) );
169185
// should copy code from addLayer() to split uri ?
170-
std::unique_ptr<QgsRasterLayer> layer( new QgsRasterLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ) );
171-
if ( layer )
172-
{
173-
if ( layer->isValid() )
174-
{
175-
bool ok = false;
176-
layer->loadDefaultMetadata( ok );
177-
layerCrs = layer->crs();
178-
layerMetadata = layer->htmlMetadata();
179-
}
180-
}
186+
mLayer = qgis::make_unique< QgsRasterLayer >( layerItem->uri(), layerItem->uri(), layerItem->providerKey() );
181187
}
182188
else if ( type == QgsMapLayer::MeshLayer )
183189
{
184190
QgsDebugMsg( QStringLiteral( "creating mesh layer" ) );
185-
std::unique_ptr<QgsMeshLayer> layer( new QgsMeshLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ) );
186-
if ( layer )
187-
{
188-
if ( layer->isValid() )
189-
{
190-
bool ok = false;
191-
layer->loadDefaultMetadata( ok );
192-
layerCrs = layer->crs();
193-
layerMetadata = layer->htmlMetadata();
194-
}
195-
}
191+
mLayer = qgis::make_unique < QgsMeshLayer >( layerItem->uri(), layerItem->uri(), layerItem->providerKey() );
196192
}
197193
else if ( type == QgsMapLayer::VectorLayer )
198194
{
199195
QgsDebugMsg( QStringLiteral( "creating vector layer" ) );
200-
std::unique_ptr<QgsVectorLayer> layer( new QgsVectorLayer( layerItem->uri(), layerItem->name(), layerItem->providerKey() ) );
201-
if ( layer )
202-
{
203-
if ( layer->isValid() )
204-
{
205-
bool ok = false;
206-
layer->loadDefaultMetadata( ok );
207-
layerCrs = layer->crs();
208-
layerMetadata = layer->htmlMetadata();
209-
}
210-
}
196+
mLayer = qgis::make_unique < QgsVectorLayer>( layerItem->uri(), layerItem->name(), layerItem->providerKey() );
211197
}
212198
else if ( type == QgsMapLayer::PluginLayer )
213199
{
214200
// TODO: support display of properties for plugin layers
215201
return;
216202
}
217203

204+
if ( mLayer && mLayer->isValid() )
205+
{
206+
bool ok = false;
207+
mLayer->loadDefaultMetadata( ok );
208+
layerCrs = mLayer->crs();
209+
layerMetadata = mLayer->htmlMetadata();
210+
211+
mMapCanvas->setDestinationCrs( mLayer->crs() );
212+
mMapCanvas->setLayers( QList< QgsMapLayer * >() << mLayer.get() );
213+
mMapCanvas->zoomToFullExtent();
214+
}
215+
218216
QString myStyle = QgsApplication::reportStyleSheet();
219217
mMetadataTextBrowser->document()->setDefaultStyleSheet( myStyle );
220218
mMetadataTextBrowser->setHtml( layerMetadata );
221219

222-
// report if layer was set to to project crs without prompt (may give a false positive)
220+
// report if layer was set to to project crs without prompt (may give a false positive)
223221
if ( defaultProjectionOption == QLatin1String( "prompt" ) )
224222
{
225223
QgsCoordinateReferenceSystem defaultCrs =

‎src/gui/qgsbrowserdockwidget_p.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ class QgsBrowserLayerProperties : public QgsBrowserPropertiesWidget, private Ui:
126126
private slots:
127127

128128
void urlClicked( const QUrl &url );
129+
130+
private:
131+
std::unique_ptr<QgsMapLayer> mLayer;
132+
129133
};
130134

131135
/**

‎src/gui/qgsmapcanvas.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ QgsMapCanvas::QgsMapCanvas( QWidget *parent )
174174
// keep device pixel ratio up to date on screen or resolution change
175175
connect( window()->windowHandle(), &QWindow::screenChanged, this, [ = ]( QScreen * ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
176176
if ( window()->windowHandle() )
177-
connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged, [ = ]( qreal ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
177+
connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged, this, [ = ]( qreal ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
178178

179179
connect( &mMapUpdateTimer, &QTimer::timeout, this, &QgsMapCanvas::mapUpdateTimeout );
180180
mMapUpdateTimer.setInterval( 250 );

‎src/ui/qgsbrowserlayerpropertiesbase.ui

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,58 @@
2424
<number>0</number>
2525
</property>
2626
<item>
27-
<widget class="QTextBrowser" name="mMetadataTextBrowser"/>
27+
<widget class="QTabWidget" name="mTabWidget">
28+
<property name="tabShape">
29+
<enum>QTabWidget::Rounded</enum>
30+
</property>
31+
<property name="currentIndex">
32+
<number>0</number>
33+
</property>
34+
<widget class="QWidget" name="tab">
35+
<attribute name="title">
36+
<string>Metadata</string>
37+
</attribute>
38+
<layout class="QVBoxLayout" name="verticalLayout_2">
39+
<property name="leftMargin">
40+
<number>0</number>
41+
</property>
42+
<property name="topMargin">
43+
<number>0</number>
44+
</property>
45+
<property name="rightMargin">
46+
<number>0</number>
47+
</property>
48+
<property name="bottomMargin">
49+
<number>0</number>
50+
</property>
51+
<item>
52+
<widget class="QTextBrowser" name="mMetadataTextBrowser"/>
53+
</item>
54+
</layout>
55+
</widget>
56+
<widget class="QWidget" name="mPreviewTab">
57+
<attribute name="title">
58+
<string>Preview</string>
59+
</attribute>
60+
<layout class="QHBoxLayout" name="horizontalLayout">
61+
<property name="leftMargin">
62+
<number>0</number>
63+
</property>
64+
<property name="topMargin">
65+
<number>0</number>
66+
</property>
67+
<property name="rightMargin">
68+
<number>0</number>
69+
</property>
70+
<property name="bottomMargin">
71+
<number>0</number>
72+
</property>
73+
<item>
74+
<widget class="QgsMapCanvas" name="mMapCanvas" native="true"/>
75+
</item>
76+
</layout>
77+
</widget>
78+
</widget>
2879
</item>
2980
<item>
3081
<widget class="QLabel" name="mNoticeLabel">
@@ -38,9 +89,14 @@
3889
</item>
3990
</layout>
4091
</widget>
41-
<tabstops>
42-
<tabstop>mMetadataTextBrowser</tabstop>
43-
</tabstops>
92+
<customwidgets>
93+
<customwidget>
94+
<class>QgsMapCanvas</class>
95+
<extends>QWidget</extends>
96+
<header>qgsmapcanvas.h</header>
97+
<container>1</container>
98+
</customwidget>
99+
</customwidgets>
44100
<resources/>
45101
<connections/>
46102
</ui>

0 commit comments

Comments
 (0)
Please sign in to comment.