Navigation Menu

Skip to content

Commit

Permalink
Ensure that QgsMimeDataUtils::Uri::filePath is always set for file ba…
Browse files Browse the repository at this point in the history
…sed items
  • Loading branch information
nyalldawson committed Aug 12, 2021
1 parent 20aff0b commit b4ef3a3
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 18 deletions.
4 changes: 4 additions & 0 deletions src/app/qgsappbrowserproviders.cpp
Expand Up @@ -102,6 +102,7 @@ QgsMimeDataUtils::Uri QgsQlrDataItem::mimeUri() const
u.providerKey = QStringLiteral( "qlr" );
u.name = name();
u.uri = path();
u.filePath = path();
return u;
}

Expand Down Expand Up @@ -222,6 +223,7 @@ QgsMimeDataUtils::Uri QgsQptDataItem::mimeUri() const
u.providerKey = QStringLiteral( "qpt" );
u.name = name();
u.uri = path();
u.filePath = path();
return u;
}

Expand Down Expand Up @@ -266,6 +268,7 @@ QgsMimeDataUtils::Uri QgsPyDataItem::mimeUri() const
u.providerKey = QStringLiteral( "py" );
u.name = name();
u.uri = path();
u.filePath = path();
return u;
}

Expand Down Expand Up @@ -369,6 +372,7 @@ QgsMimeDataUtils::Uri QgsStyleXmlDataItem::mimeUri() const
u.providerKey = QStringLiteral( "style_xml" );
u.name = name();
u.uri = path();
u.filePath = path();
return u;
}

Expand Down
6 changes: 5 additions & 1 deletion src/core/browser/qgsbrowsermodel.cpp
Expand Up @@ -665,8 +665,12 @@ QMimeData *QgsBrowserModel::mimeData( const QModelIndexList &indexes ) const
{
QgsDataItem *ptr = reinterpret_cast< QgsDataItem * >( index.internalPointer() );
const QgsMimeDataUtils::UriList uris = ptr->mimeUris();
for ( const auto &uri : std::as_const( uris ) )
for ( QgsMimeDataUtils::Uri uri : std::as_const( uris ) )
{
if ( ptr->capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
uri.filePath = ptr->path();
}
lst.append( uri );
}
}
Expand Down
15 changes: 14 additions & 1 deletion src/core/browser/qgsdataitem.cpp
Expand Up @@ -512,7 +512,20 @@ bool QgsDataItem::handleDoubleClick()

QgsMimeDataUtils::Uri QgsDataItem::mimeUri() const
{
return mimeUris().isEmpty() ? QgsMimeDataUtils::Uri() : mimeUris().first();
return mimeUris().isEmpty() ? QgsMimeDataUtils::Uri() : mimeUris().constFirst();
}

QgsMimeDataUtils::UriList QgsDataItem::mimeUris() const
{
if ( capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
QgsMimeDataUtils::Uri uri;
uri.uri = path();
uri.filePath = path();
return { uri };
}

return {};
}

bool QgsDataItem::setCrs( const QgsCoordinateReferenceSystem &crs )
Expand Down
2 changes: 1 addition & 1 deletion src/core/browser/qgsdataitem.h
Expand Up @@ -269,7 +269,7 @@ class CORE_EXPORT QgsDataItem : public QObject
* Items that return valid URI will be returned in mime data when dragging a selection from browser model.
* \since QGIS 3.18
*/
virtual QgsMimeDataUtils::UriList mimeUris() const { return QgsMimeDataUtils::UriList(); }
virtual QgsMimeDataUtils::UriList mimeUris() const;

/**
* Writes the selected crs into data source. The original data source will be modified when calling this
Expand Down
1 change: 1 addition & 0 deletions src/core/browser/qgsdirectoryitem.cpp
Expand Up @@ -502,6 +502,7 @@ QgsMimeDataUtils::UriList QgsDirectoryItem::mimeUris() const
u.layerType = QStringLiteral( "directory" );
u.name = mName;
u.uri = mDirPath;
u.filePath = path();
return { u };
}

Expand Down
14 changes: 0 additions & 14 deletions src/core/browser/qgsfilebaseddataitemprovider.cpp
Expand Up @@ -65,20 +65,6 @@ QVector<QgsDataItem *> QgsProviderSublayerItem::createChildren()
return children;
}

QgsMimeDataUtils::UriList QgsProviderSublayerItem::mimeUris() const
{
QgsMimeDataUtils::UriList uris = QgsLayerItem::mimeUris();
// add file path were appropriate
if ( capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
for ( int i = 0; i < uris.size(); ++i )
{
uris[i].filePath = path();
}
}
return uris;
}

Qgis::BrowserLayerType QgsProviderSublayerItem::layerTypeFromSublayer( const QgsProviderSublayerDetails &sublayer )
{
switch ( sublayer.type() )
Expand Down
1 change: 0 additions & 1 deletion src/core/browser/qgsfilebaseddataitemprovider.h
Expand Up @@ -55,7 +55,6 @@ class CORE_EXPORT QgsProviderSublayerItem final: public QgsLayerItem
QgsProviderSublayerItem( QgsDataItem *parent, const QString &name, const QgsProviderSublayerDetails &details );
QString layerName() const override;
QVector<QgsDataItem *> createChildren() override;
QgsMimeDataUtils::UriList mimeUris() const override;

private:

Expand Down
6 changes: 6 additions & 0 deletions src/core/browser/qgslayeritem.cpp
Expand Up @@ -276,5 +276,11 @@ QgsMimeDataUtils::UriList QgsLayerItem::mimeUris() const
u.uri = uri();
u.supportedCrs = supportedCrs();
u.supportedFormats = supportedFormats();

if ( capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
u.filePath = path();
}

return { u };
}
6 changes: 6 additions & 0 deletions src/core/browser/qgsprojectitem.cpp
Expand Up @@ -33,6 +33,12 @@ QgsMimeDataUtils::UriList QgsProjectItem::mimeUris() const
u.layerType = QStringLiteral( "project" );
u.name = mName;
u.uri = mPath;

if ( capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
u.filePath = path();
}

return { u };
}

6 changes: 6 additions & 0 deletions src/core/providers/ogr/qgsgeopackagedataitems.cpp
Expand Up @@ -448,5 +448,11 @@ QgsMimeDataUtils::UriList QgsGeoPackageCollectionItem::mimeUris() const
QgsMimeDataUtils::Uri collectionUri;
collectionUri.uri = path().replace( QLatin1String( "gpkg:/" ), QString() );
collectionUri.layerType = QStringLiteral( "collection" );

if ( capabilities2() & Qgis::BrowserItemCapability::ItemRepresentsFile )
{
collectionUri.filePath = path();
}

return { collectionUri };
}

0 comments on commit b4ef3a3

Please sign in to comment.