mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
[FEATURE][browser] Restore preview functionality from old 2.x standalone
browser into inbuilt browser dock panel layer properties widget
This commit is contained in:
parent
7f332fb7a6
commit
17447e4b5c
python/plugins/processing/tests/testdata/custom
src
Binary file not shown.
@ -1559,6 +1559,13 @@ QgisApp::~QgisApp()
|
|||||||
delete canvas;
|
delete canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// these may have references to map layers which need to be cleaned up
|
||||||
|
delete mBrowserWidget;
|
||||||
|
mBrowserWidget = nullptr;
|
||||||
|
delete mBrowserWidget2;
|
||||||
|
mBrowserWidget2 = nullptr;
|
||||||
|
delete mBrowserModel;
|
||||||
|
|
||||||
QgsGui::instance()->nativePlatformInterface()->cleanup();
|
QgsGui::instance()->nativePlatformInterface()->cleanup();
|
||||||
|
|
||||||
// This function *MUST* be the last one called, as it destroys in
|
// This function *MUST* be the last one called, as it destroys in
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "qgsmeshlayer.h"
|
#include "qgsmeshlayer.h"
|
||||||
#include "qgsgui.h"
|
#include "qgsgui.h"
|
||||||
#include "qgsnative.h"
|
#include "qgsnative.h"
|
||||||
|
#include "qgsmaptoolpan.h"
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
|
||||||
#include <QDragEnterEvent>
|
#include <QDragEnterEvent>
|
||||||
@ -119,6 +120,19 @@ QgsBrowserLayerProperties::QgsBrowserLayerProperties( QWidget *parent )
|
|||||||
// we don't want links to open in the little widget, open them externally instead
|
// we don't want links to open in the little widget, open them externally instead
|
||||||
mMetadataTextBrowser->setOpenLinks( false );
|
mMetadataTextBrowser->setOpenLinks( false );
|
||||||
connect( mMetadataTextBrowser, &QTextBrowser::anchorClicked, this, &QgsBrowserLayerProperties::urlClicked );
|
connect( mMetadataTextBrowser, &QTextBrowser::anchorClicked, this, &QgsBrowserLayerProperties::urlClicked );
|
||||||
|
|
||||||
|
mMapCanvas->setLayers( QList< QgsMapLayer * >() );
|
||||||
|
mMapCanvas->setMapTool( new QgsMapToolPan( mMapCanvas ) );
|
||||||
|
mMapCanvas->freeze( true );
|
||||||
|
|
||||||
|
connect( mTabWidget, &QTabWidget::currentChanged, this, [ = ]
|
||||||
|
{
|
||||||
|
if ( mTabWidget->currentWidget() == mPreviewTab && mMapCanvas->isFrozen() )
|
||||||
|
{
|
||||||
|
mMapCanvas->freeze( false );
|
||||||
|
mMapCanvas->refresh();
|
||||||
|
}
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
class ProjectionSettingRestorer
|
class ProjectionSettingRestorer
|
||||||
@ -159,6 +173,8 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
|
|||||||
ProjectionSettingRestorer restorer;
|
ProjectionSettingRestorer restorer;
|
||||||
( void )restorer; // no warnings
|
( void )restorer; // no warnings
|
||||||
|
|
||||||
|
mLayer.reset();
|
||||||
|
|
||||||
// find root item
|
// find root item
|
||||||
// we need to create a temporary layer to get metadata
|
// we need to create a temporary layer to get metadata
|
||||||
// we could use a provider but the metadata is not as complete and "pretty" and this is easier
|
// we could use a provider but the metadata is not as complete and "pretty" and this is easier
|
||||||
@ -167,47 +183,17 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
|
|||||||
{
|
{
|
||||||
QgsDebugMsg( QStringLiteral( "creating raster layer" ) );
|
QgsDebugMsg( QStringLiteral( "creating raster layer" ) );
|
||||||
// should copy code from addLayer() to split uri ?
|
// should copy code from addLayer() to split uri ?
|
||||||
std::unique_ptr<QgsRasterLayer> layer( new QgsRasterLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ) );
|
mLayer = qgis::make_unique< QgsRasterLayer >( layerItem->uri(), layerItem->uri(), layerItem->providerKey() );
|
||||||
if ( layer )
|
|
||||||
{
|
|
||||||
if ( layer->isValid() )
|
|
||||||
{
|
|
||||||
bool ok = false;
|
|
||||||
layer->loadDefaultMetadata( ok );
|
|
||||||
layerCrs = layer->crs();
|
|
||||||
layerMetadata = layer->htmlMetadata();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( type == QgsMapLayer::MeshLayer )
|
else if ( type == QgsMapLayer::MeshLayer )
|
||||||
{
|
{
|
||||||
QgsDebugMsg( QStringLiteral( "creating mesh layer" ) );
|
QgsDebugMsg( QStringLiteral( "creating mesh layer" ) );
|
||||||
std::unique_ptr<QgsMeshLayer> layer( new QgsMeshLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ) );
|
mLayer = qgis::make_unique < QgsMeshLayer >( layerItem->uri(), layerItem->uri(), layerItem->providerKey() );
|
||||||
if ( layer )
|
|
||||||
{
|
|
||||||
if ( layer->isValid() )
|
|
||||||
{
|
|
||||||
bool ok = false;
|
|
||||||
layer->loadDefaultMetadata( ok );
|
|
||||||
layerCrs = layer->crs();
|
|
||||||
layerMetadata = layer->htmlMetadata();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( type == QgsMapLayer::VectorLayer )
|
else if ( type == QgsMapLayer::VectorLayer )
|
||||||
{
|
{
|
||||||
QgsDebugMsg( QStringLiteral( "creating vector layer" ) );
|
QgsDebugMsg( QStringLiteral( "creating vector layer" ) );
|
||||||
std::unique_ptr<QgsVectorLayer> layer( new QgsVectorLayer( layerItem->uri(), layerItem->name(), layerItem->providerKey() ) );
|
mLayer = qgis::make_unique < QgsVectorLayer>( layerItem->uri(), layerItem->name(), layerItem->providerKey() );
|
||||||
if ( layer )
|
|
||||||
{
|
|
||||||
if ( layer->isValid() )
|
|
||||||
{
|
|
||||||
bool ok = false;
|
|
||||||
layer->loadDefaultMetadata( ok );
|
|
||||||
layerCrs = layer->crs();
|
|
||||||
layerMetadata = layer->htmlMetadata();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( type == QgsMapLayer::PluginLayer )
|
else if ( type == QgsMapLayer::PluginLayer )
|
||||||
{
|
{
|
||||||
@ -215,11 +201,23 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( mLayer && mLayer->isValid() )
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
mLayer->loadDefaultMetadata( ok );
|
||||||
|
layerCrs = mLayer->crs();
|
||||||
|
layerMetadata = mLayer->htmlMetadata();
|
||||||
|
|
||||||
|
mMapCanvas->setDestinationCrs( mLayer->crs() );
|
||||||
|
mMapCanvas->setLayers( QList< QgsMapLayer * >() << mLayer.get() );
|
||||||
|
mMapCanvas->zoomToFullExtent();
|
||||||
|
}
|
||||||
|
|
||||||
QString myStyle = QgsApplication::reportStyleSheet();
|
QString myStyle = QgsApplication::reportStyleSheet();
|
||||||
mMetadataTextBrowser->document()->setDefaultStyleSheet( myStyle );
|
mMetadataTextBrowser->document()->setDefaultStyleSheet( myStyle );
|
||||||
mMetadataTextBrowser->setHtml( layerMetadata );
|
mMetadataTextBrowser->setHtml( layerMetadata );
|
||||||
|
|
||||||
// report if layer was set to to project crs without prompt (may give a false positive)
|
// report if layer was set to to project crs without prompt (may give a false positive)
|
||||||
if ( defaultProjectionOption == QLatin1String( "prompt" ) )
|
if ( defaultProjectionOption == QLatin1String( "prompt" ) )
|
||||||
{
|
{
|
||||||
QgsCoordinateReferenceSystem defaultCrs =
|
QgsCoordinateReferenceSystem defaultCrs =
|
||||||
|
@ -126,6 +126,10 @@ class QgsBrowserLayerProperties : public QgsBrowserPropertiesWidget, private Ui:
|
|||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void urlClicked( const QUrl &url );
|
void urlClicked( const QUrl &url );
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<QgsMapLayer> mLayer;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -174,7 +174,7 @@ QgsMapCanvas::QgsMapCanvas( QWidget *parent )
|
|||||||
// keep device pixel ratio up to date on screen or resolution change
|
// keep device pixel ratio up to date on screen or resolution change
|
||||||
connect( window()->windowHandle(), &QWindow::screenChanged, this, [ = ]( QScreen * ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
|
connect( window()->windowHandle(), &QWindow::screenChanged, this, [ = ]( QScreen * ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
|
||||||
if ( window()->windowHandle() )
|
if ( window()->windowHandle() )
|
||||||
connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged, [ = ]( qreal ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
|
connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged, this, [ = ]( qreal ) {mSettings.setDevicePixelRatio( devicePixelRatio() );} );
|
||||||
|
|
||||||
connect( &mMapUpdateTimer, &QTimer::timeout, this, &QgsMapCanvas::mapUpdateTimeout );
|
connect( &mMapUpdateTimer, &QTimer::timeout, this, &QgsMapCanvas::mapUpdateTimeout );
|
||||||
mMapUpdateTimer.setInterval( 250 );
|
mMapUpdateTimer.setInterval( 250 );
|
||||||
|
@ -24,7 +24,58 @@
|
|||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTextBrowser" name="mMetadataTextBrowser"/>
|
<widget class="QTabWidget" name="mTabWidget">
|
||||||
|
<property name="tabShape">
|
||||||
|
<enum>QTabWidget::Rounded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="tab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Metadata</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTextBrowser" name="mMetadataTextBrowser"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="mPreviewTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Preview</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QgsMapCanvas" name="mMapCanvas" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="mNoticeLabel">
|
<widget class="QLabel" name="mNoticeLabel">
|
||||||
@ -38,9 +89,14 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<customwidgets>
|
||||||
<tabstop>mMetadataTextBrowser</tabstop>
|
<customwidget>
|
||||||
</tabstops>
|
<class>QgsMapCanvas</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>qgsmapcanvas.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user