File indexing completed on 2024-04-28 04:37:27

0001 /*
0002     SPDX-FileCopyrightText: 2007 Alexander Dymo <adymo@kdevelop.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_TEXTDOCUMENT_H
0008 #define KDEVPLATFORM_TEXTDOCUMENT_H
0009 
0010 #include <QWidget>
0011 
0012 #include <sublime/view.h>
0013 
0014 #include "partdocument.h"
0015 
0016 #include "shellexport.h"
0017 
0018 class QMenu;
0019 
0020 namespace KTextEditor {
0021 class View;
0022 }
0023 
0024 namespace KDevelop {
0025 
0026 class TextViewPrivate;
0027 class TextDocumentPrivate;
0028 
0029 /**
0030 Text document which represents KTextEditor documents.
0031 
0032 Usually Kate documents are represented by this class but TextDocument is not
0033 limited to Kate. Each conforming text editor will work.
0034 */
0035 class KDEVPLATFORMSHELL_EXPORT TextDocument: public PartDocument {
0036     Q_OBJECT
0037 public:
0038     TextDocument(const QUrl &url, ICore*, const QString& encoding );
0039     ~TextDocument() override;
0040 
0041     QWidget *createViewWidget(QWidget *parent = nullptr) override;
0042     KParts::Part *partForView(QWidget *view) const override;
0043 
0044     bool save(DocumentSaveMode mode = Default) override;
0045     DocumentState state() const override;
0046 
0047     KTextEditor::Cursor cursorPosition() const override;
0048     void setCursorPosition(const KTextEditor::Cursor &cursor) override;
0049 
0050     KTextEditor::Range textSelection() const override;
0051     void setTextSelection(const KTextEditor::Range &range) override;
0052 
0053     QString text(const KTextEditor::Range &range) const override;
0054 
0055     QString textLine() const override;
0056     QString textWord() const override;
0057 
0058     KTextEditor::Document* textDocument() const override;
0059 
0060     QString documentType() const override;
0061 
0062     QIcon defaultIcon() const override;
0063 
0064     KTextEditor::View* activeTextView() const override;
0065 
0066 public Q_SLOTS:
0067     void reload() override;
0068 
0069 protected:
0070     Sublime::View *newView(Sublime::Document *doc) override;
0071 
0072 private:
0073     Q_PRIVATE_SLOT(d_func(), void saveSessionConfig())
0074     Q_PRIVATE_SLOT(d_func(), void modifiedOnDisk(KTextEditor::Document *, bool, KTextEditor::ModificationInterface::ModifiedOnDiskReason))
0075 
0076     void newDocumentStatus(KTextEditor::Document*);
0077     void populateContextMenu(KTextEditor::View*, QMenu*);
0078     void unpopulateContextMenu();
0079     void textChanged(KTextEditor::Document*);
0080     void documentUrlChanged(KTextEditor::Document*);
0081     void slotDocumentLoaded();
0082     void documentSaved(KTextEditor::Document*,bool);
0083     void repositoryCheckFinished(bool);
0084 
0085 private:
0086     const QScopedPointer<class TextDocumentPrivate> d_ptr;
0087     Q_DECLARE_PRIVATE(TextDocument)
0088     friend class TextDocumentPrivate;
0089 };
0090 
0091 class KDEVPLATFORMSHELL_EXPORT TextView : public Sublime::View
0092 {
0093     Q_OBJECT
0094 public:
0095     explicit TextView(TextDocument* doc);
0096     ~TextView() override;
0097 
0098     QWidget *createWidget(QWidget *parent = nullptr) override;
0099 
0100     KTextEditor::View *textView() const;
0101 
0102     QString viewStatus() const override;
0103 
0104     void readSessionConfig(KConfigGroup & config) override;
0105     void writeSessionConfig(KConfigGroup & config) override;
0106 
0107     void setInitialRange(const KTextEditor::Range& range);
0108     KTextEditor::Range initialRange() const;
0109 
0110 private:
0111     void sendStatusChanged();
0112 
0113 private:
0114     const QScopedPointer<class TextViewPrivate> d_ptr;
0115     Q_DECLARE_PRIVATE(TextView)
0116 };
0117 
0118 }
0119 
0120 
0121 #endif
0122