File indexing completed on 2023-09-24 09:54:56
0001 /* 0002 SPDX-FileCopyrightText: 2017, 2020 Friedrich W. H. Kossebau <kossebau@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #ifndef MARKDOWNPART_HPP 0008 #define MARKDOWNPART_HPP 0009 0010 // KF 0011 #include <KParts/ReadOnlyPart> 0012 // Qt 0013 #include <QByteArray> 0014 #include <QPoint> 0015 0016 class MarkdownBrowserExtension; 0017 class MarkdownView; 0018 class SearchToolBar; 0019 class KPluginMetaData; 0020 class QTextDocument; 0021 0022 0023 class MarkdownPart : public KParts::ReadOnlyPart 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 enum Modus { 0029 ReadOnlyModus = 0, 0030 BrowserViewModus = 1 0031 }; 0032 0033 /** 0034 * Default constructor, with arguments as expected by MarkdownPartFactory 0035 */ 0036 MarkdownPart(QWidget* parentWidget, QObject* parent, const KPluginMetaData& metaData, Modus modus); 0037 ~MarkdownPart() override; 0038 0039 public: 0040 MarkdownView* view() const; 0041 0042 QAction* copySelectionAction() const; 0043 QAction* createCopyEmailAddressAction(QObject* parent, const QUrl& mailtoUrl); 0044 QAction* createCopyLinkUrlAction(QObject* parent, const QUrl& linkUrl); 0045 0046 void copySelection(); 0047 0048 QUrl resolvedUrl(const QUrl &url) const; 0049 0050 protected: // KParts::ReadOnlyPart API 0051 bool openFile() override; 0052 0053 bool doOpenStream(const QString& mimeType) override; 0054 bool doWriteStream(const QByteArray& data) override; 0055 bool doCloseStream() override; 0056 0057 bool closeUrl() override; 0058 0059 private: 0060 void setupActions(Modus modus); 0061 void prepareViewStateRestoringOnReload(); 0062 void restoreScrollPosition(); 0063 0064 void handleOpenUrlRequest(const QUrl& url); 0065 void handleContextMenuRequest(QPoint globalPos, 0066 const QUrl& linkUrl, 0067 bool hasSelection); 0068 void showHoveredLink(const QUrl& linkUrl); 0069 0070 void selectAll(); 0071 0072 private: 0073 QTextDocument* m_sourceDocument; 0074 MarkdownView* m_widget; 0075 SearchToolBar* m_searchToolBar; 0076 QAction* m_copySelectionAction; 0077 QAction* m_selectAllAction; 0078 QAction* m_searchAction; 0079 QAction* m_searchNextAction; 0080 QAction* m_searchPreviousAction; 0081 0082 MarkdownBrowserExtension* const m_browserExtension; 0083 0084 QByteArray m_streamedData; 0085 0086 QUrl m_previousUrl; 0087 QPoint m_previousScrollPosition; 0088 }; 0089 0090 inline MarkdownView* MarkdownPart::view() const { return m_widget; } 0091 0092 #endif