1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
/*
SPDX-FileCopyrightText: 2010 Aleix Pol Gonzalez <aleixpol@kde.org>
SPDX-FileCopyrightText: 2016 Igor Kushnir <igorkuo@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef KDEVPLATFORM_STANDARDDOCUMENTATIONVIEW_H
#define KDEVPLATFORM_STANDARDDOCUMENTATIONVIEW_H
#include <QWidget>
#include "documentationexport.h"
#include "documentationfindwidget.h"
#include <interfaces/idocumentation.h>
class QMenu;
class QWebEngineUrlSchemeHandler;
namespace KDevelop
{
class StandardDocumentationViewPrivate;
/**
* A standard documentation view, based on QtWebEngine
*/
class KDEVPLATFORMDOCUMENTATION_EXPORT StandardDocumentationView : public QWidget
{
Q_OBJECT
Q_DISABLE_COPY(StandardDocumentationView)
public:
static void registerCustomUrlSchemes();
explicit StandardDocumentationView(DocumentationFindWidget* findWidget, QWidget* parent = nullptr );
~StandardDocumentationView() override;
/**
* @brief Enables zoom functionality
*
* @param configSubGroup KConfigGroup nested group name used to store zoom factor.
* Should uniquely describe current documentation provider.
*
* @warning Call this function at most once
*/
void initZoom(const QString& configSubGroup);
void setDocumentation(const IDocumentation::Ptr& doc);
// NOTE: prefer overriding CSS by embedding a <style> element into HTML code directly instead of calling
// setOverrideCss*(). These functions, in case of Qt WebEngine, inject CSS code via JavaScript, which
// causes reloading and flickering of large pages. See for example kdevmanpage's class StyleSheetFixer.
/**
* Specifies the location of a user stylesheet to load with every web page
*
* @note each call to this function or setOverrideCssCode() overwrites any previously specified style
*/
void setOverrideCssFile(const QString& cssFilePath);
/**
* Inject the specified UTF-8-encoded CSS code into each web page
*
* @note each call to this function or setOverrideCssFile() overwrites any previously specified style
*/
void setOverrideCssCode(const QByteArray& cssCode);
void load(const QUrl &url);
void setHtml(const QString &html);
/**
* Install a @p handler for the @p scheme. The scheme must be a known custom URL scheme.
*
* @sa registerCustomUrlSchemes
*/
void installUrlSchemeHandler(const QByteArray& scheme, QWebEngineUrlSchemeHandler* handler);
/**
*
*/
void setDelegateLinks(bool delegate);
QMenu* createStandardContextMenu();
Q_SIGNALS:
void linkClicked(const QUrl &link);
void browseForward();
void browseBack();
public Q_SLOTS:
/**
* Search for @p text in the documentation view.
*/
void search(const QString& text, KDevelop::DocumentationFindWidget::FindOptions options);
void searchIncremental(const QString& text, KDevelop::DocumentationFindWidget::FindOptions options);
void finishSearch();
/**
* Updates the contents, in case it was initialized with a documentation instance,
* doesn't change anything otherwise
*
* @sa setDocumentation(IDocumentation::Ptr)
*/
void update();
protected:
void contextMenuEvent(QContextMenuEvent* event) override;
bool eventFilter(QObject* object, QEvent* event) override;
private Q_SLOTS:
void updateZoomFactor(double zoomFactor);
private:
void keyReleaseEvent(QKeyEvent* event) override;
private:
const QScopedPointer<class StandardDocumentationViewPrivate> d_ptr;
Q_DECLARE_PRIVATE(StandardDocumentationView)
};
}
#endif // KDEVPLATFORM_STANDARDDOCUMENTATIONVIEW_H
|