Skip to content

Commit

Permalink
[FEATURE] Show html items to browser panel
Browse files Browse the repository at this point in the history
Allows HTML files to be shown and opened from the browser panel
  • Loading branch information
nyalldawson committed Dec 6, 2019
1 parent 7478e79 commit 2dbc0d7
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 0 deletions.
1 change: 1 addition & 0 deletions images/images.qrc
Expand Up @@ -799,6 +799,7 @@
<file>themes/default/mActionHandleStoreFilterExpressionChecked.svg</file>
<file>themes/default/mActionHandleStoreFilterExpressionUnchecked.svg</file>
<file>themes/default/stacked-bar.svg</file>
<file>themes/default/mIconHtml.svg</file>
</qresource>
<qresource prefix="/images/tips">
<file alias="symbol_levels.png">qgis_tips/symbol_levels.png</file>
Expand Down
1 change: 1 addition & 0 deletions images/themes/default/mIconHtml.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -1263,6 +1263,7 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
registerCustomDropHandler( new QgsQptDropHandler() );
QgsApplication::dataItemProviderRegistry()->addProvider( new QgsStyleXmlDataItemProvider() );
registerCustomDropHandler( new QgsStyleXmlDropHandler() );
QgsApplication::dataItemProviderRegistry()->addProvider( new QgsHtmlDataItemProvider() );

// set handler for missing layers (will be owned by QgsProject)
mAppBadLayersHandler = new QgsHandleBadLayersHandler();
Expand Down
54 changes: 54 additions & 0 deletions src/app/qgsappbrowserproviders.cpp
Expand Up @@ -1239,3 +1239,57 @@ void QgsBookmarksItemGuiProvider::importBookmarksToManager( QgsBookmarkManager *
}
settings.setValue( QStringLiteral( "Windows/Bookmarks/LastUsedDirectory" ), QFileInfo( fileName ).path() );
}

//
// QgsHtmlDataItemProvider
//

QString QgsHtmlDataItemProvider::name()
{
return QStringLiteral( "html" );
}

int QgsHtmlDataItemProvider::capabilities() const
{
return QgsDataProvider::File;
}

QgsDataItem *QgsHtmlDataItemProvider::createDataItem( const QString &path, QgsDataItem *parentItem )
{
QFileInfo fileInfo( path );

if ( fileInfo.suffix().compare( QLatin1String( "htm" ), Qt::CaseInsensitive ) == 0
|| fileInfo.suffix().compare( QLatin1String( "html" ), Qt::CaseInsensitive ) == 0 )
{
return new QgsHtmlDataItem( parentItem, fileInfo.fileName(), path );
}
return nullptr;
}

//
// QgsHtmlDataItemProvider
//

QgsHtmlDataItem::QgsHtmlDataItem( QgsDataItem *parent, const QString &name, const QString &path )
: QgsDataItem( QgsDataItem::Custom, parent, name, path )
{
setState( QgsDataItem::Populated ); // no children
setIconName( QStringLiteral( "/mIconHtml.svg" ) );
setToolTip( QDir::toNativeSeparators( path ) );
}

bool QgsHtmlDataItem::handleDoubleClick()
{
QDesktopServices::openUrl( QUrl::fromLocalFile( path() ) );
return true;
}

QList<QAction *> QgsHtmlDataItem::actions( QWidget *parent )
{
QAction *openAction = new QAction( tr( "&Open File…" ), parent );
connect( openAction, &QAction::triggered, this, [ = ]
{
QDesktopServices::openUrl( QUrl::fromLocalFile( path() ) );
} );
return QList<QAction *>() << openAction;
}
26 changes: 26 additions & 0 deletions src/app/qgsappbrowserproviders.h
Expand Up @@ -406,4 +406,30 @@ class QgsBookmarkDropHandler : public QgsCustomDropHandler
bool handleCustomUriCanvasDrop( const QgsMimeDataUtils::Uri &uri, QgsMapCanvas *canvas ) const override;
};


/**
* Data item provider for showing html files in the browser.
*/
class QgsHtmlDataItemProvider : public QgsDataItemProvider
{
public:
QString name() override;
int capabilities() const override;
QgsDataItem *createDataItem( const QString &path, QgsDataItem *parentItem ) override;
};

/**
* Custom data item for html files.
*/
class QgsHtmlDataItem : public QgsDataItem
{
Q_OBJECT

public:

QgsHtmlDataItem( QgsDataItem *parent, const QString &name, const QString &path );
bool handleDoubleClick() override;
QList< QAction * > actions( QWidget *parent ) override;
};

#endif // QGSAPPBROWSERPROVIDERS_H

0 comments on commit 2dbc0d7

Please sign in to comment.