20#include <cpl_string.h>
32#include "moc_qgszipitem.cpp"
52 const QString &filePath,
const QString &
path,
60void QgsZipItem::init()
63 mIconName = QStringLiteral(
"/mIconZip.svg" );
68 static std::once_flag initialized;
69 std::call_once( initialized, []
83 u.
layerType = QStringLiteral(
"collection" );
99 const QString scanZipSetting = settings.
value( QStringLiteral(
"qgis/scanZipInBrowser2" ),
"basic" ).toString();
106 if ( scanZipSetting == QLatin1String(
"no" ) )
118 for (
const QString &fileName : constMZipFileList )
120 const QFileInfo info( fileName );
130 if ( provider->name() == QLatin1String(
"OGR" ) )
132 if ( info.suffix().compare( QLatin1String(
"dbf" ), Qt::CaseInsensitive ) == 0 )
134 if (
mZipFileList.indexOf( fileName.left( fileName.count() - 4 ) +
".shp" ) != -1 )
137 if ( info.completeSuffix().compare( QLatin1String(
"shp.xml" ), Qt::CaseInsensitive ) == 0 )
143 QgsDebugMsgLevel( QStringLiteral(
"trying to load item %1 with %2" ).arg( tmpPath, provider->name() ), 3 );
144 QgsDataItem *item = provider->createDataItem( tmpPath,
this );
169 const QString scanZipSetting = settings.
value( QStringLiteral(
"qgis/scanZipInBrowser2" ),
"basic" ).toString();
170 QStringList zipFileList;
172 bool populated =
false;
177 if ( scanZipSetting == QLatin1String(
"no" ) )
184 auto zipItem = std::make_unique< QgsZipItem >(
parent,
name, filePath,
path );
191 if (
path.endsWith( QLatin1String(
".zip" ), Qt::CaseInsensitive ) ||
192 path.endsWith( QLatin1String(
".tar" ), Qt::CaseInsensitive ) )
194 zipFileList = zipItem->getZipFileList();
197 if ( !zipFileList.isEmpty() && zipFileList.count() <= 10 )
199 zipItem->populate( zipItem->createChildren() );
201 QgsDebugMsgLevel( QStringLiteral(
"Got zipItem with %1 children, path=%2, name=%3" ).arg( zipItem->rowCount() ).arg( zipItem->path(), zipItem->name() ), 3 );
205 QgsDebugMsgLevel( QStringLiteral(
"Delaying populating zipItem with path=%1, name=%2" ).arg( zipItem->path(), zipItem->name() ), 3 );
209 if ( !populated || zipItem->rowCount() > 0 )
212 return zipItem.release();
225 const QString scanZipSetting = settings.
value( QStringLiteral(
"qgis/scanZipInBrowser2" ),
"basic" ).toString();
230 if ( scanZipSetting == QLatin1String(
"no" ) )
237 char **papszSiblingFiles = VSIReadDirRecursive( QString(
mVsiPrefix +
mFilePath ).toUtf8().constData() );
238 if ( papszSiblingFiles )
240 for (
int i = 0; papszSiblingFiles[i]; i++ )
242 tmpPath = papszSiblingFiles[i];
245 if ( tmpPath.right( 1 ) != QLatin1String(
"/" ) )
248 CSLDestroy( papszSiblingFiles );
@ ItemRepresentsFile
Item's path() directly represents a file on disk.
@ Collection
A collection of items.
static QgsDataItemProviderRegistry * dataItemProviderRegistry()
Returns the application's data item provider registry, which keeps a list of data item providers that...
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
QgsDataCollectionItem(QgsDataItem *parent, const QString &name, const QString &path=QString(), const QString &providerKey=QString())
Constructor for QgsDataCollectionItem, with the specified parent item.
QList< QgsDataItemProvider * > providers() const
Returns the list of available providers.
Interface for providers that add custom data items to the browser tree.
Qgis::BrowserItemType mType
QVector< QgsDataItem * > children() const
QgsDataItem(Qgis::BrowserItemType type, QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey=QString())
Constructor for QgsDataItem, with the specified parent item.
QString name() const
Returns the name of the item (the displayed text for the item).
virtual void setCapabilities(Qgis::BrowserItemCapabilities capabilities)
Sets the capabilities for the data item.
void setName(const QString &name)
Sets the name of the item (the displayed text for the item).
QgsDataItem * parent() const
Gets item parent.
QString providerKey() const
Returns the provider key that created this item (e.g.
virtual Qgis::BrowserItemCapabilities capabilities2() const
Returns the capabilities for the data item.
static QString vsiPrefixForPath(const QString &path)
Returns a the vsi prefix which corresponds to a file path, or an empty string if the path is not asso...
static bool isVsiArchivePrefix(const QString &prefix)
Returns true if prefix is a supported archive style container prefix (e.g.
QList< QgsMimeDataUtils::Uri > UriList
Stores settings for use within QGIS.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
static Q_DECL_DEPRECATED QString vsiPrefix(const QString &uri)
QgsZipItem(QgsDataItem *parent, const QString &name, const QString &path)
Constructor.
QStringList getZipFileList()
bool hasDragEnabled() const override
Returns true if the item may be dragged.
QgsMimeDataUtils::UriList mimeUris() const override
Returns mime URIs for the data item, most data providers will only return a single URI but some data ...
static QgsDataItem * itemFromPath(QgsDataItem *parent, const QString &path, const QString &name)
Creates a new data item from the specified path.
QVector< QgsDataItem * > createChildren() override
Create children.
static QStringList sProviderNames
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
QString filePath
Path to file, if uri is associated with a file.
QString uri
Identifier of the data source recognized by its providerKey.
QString layerType
Type of URI.