1 /*
2     SPDX-FileCopyrightText: 2007 Alexander Dymo <adymo@kdevelop.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef KDEVPLATFORM_TEXTDOCUMENT_H
8 #define KDEVPLATFORM_TEXTDOCUMENT_H
9 
10 #include <QWidget>
11 
12 #include <sublime/view.h>
13 
14 #include "partdocument.h"
15 
16 #include "shellexport.h"
17 
18 class QMenu;
19 
20 namespace KTextEditor {
21 class View;
22 }
23 
24 namespace KDevelop {
25 
26 class TextViewPrivate;
27 class TextDocumentPrivate;
28 
29 /**
30 Text document which represents KTextEditor documents.
31 
32 Usually Kate documents are represented by this class but TextDocument is not
33 limited to Kate. Each conforming text editor will work.
34 */
35 class KDEVPLATFORMSHELL_EXPORT TextDocument: public PartDocument {
36     Q_OBJECT
37 public:
38     TextDocument(const QUrl &url, ICore*, const QString& encoding );
39     ~TextDocument() override;
40 
41     QWidget *createViewWidget(QWidget *parent = nullptr) override;
42     KParts::Part *partForView(QWidget *view) const override;
43 
44     bool save(DocumentSaveMode mode = Default) override;
45     DocumentState state() const override;
46 
47     KTextEditor::Cursor cursorPosition() const override;
48     void setCursorPosition(const KTextEditor::Cursor &cursor) override;
49 
50     KTextEditor::Range textSelection() const override;
51     void setTextSelection(const KTextEditor::Range &range) override;
52 
53     QString text(const KTextEditor::Range &range) const override;
54 
55     QString textLine() const override;
56     QString textWord() const override;
57 
58     bool isTextDocument() const override;
59     KTextEditor::Document* textDocument() const override;
60 
61     QString documentType() const override;
62 
63     QIcon defaultIcon() const override;
64 
65     KTextEditor::View* activeTextView() const override;
66 
67 public Q_SLOTS:
68     void reload() override;
69 
70 protected:
71     Sublime::View *newView(Sublime::Document *doc) override;
72 
73 private:
74     Q_PRIVATE_SLOT(d_func(), void saveSessionConfig())
75     Q_PRIVATE_SLOT(d_func(), void modifiedOnDisk(KTextEditor::Document *, bool, KTextEditor::ModificationInterface::ModifiedOnDiskReason))
76 
77     void newDocumentStatus(KTextEditor::Document*);
78     void populateContextMenu(KTextEditor::View*, QMenu*);
79     void unpopulateContextMenu();
80     void textChanged(KTextEditor::Document*);
81     void documentUrlChanged(KTextEditor::Document*);
82     void slotDocumentLoaded();
83     void documentSaved(KTextEditor::Document*,bool);
84     void repositoryCheckFinished(bool);
85 
86 private:
87     const QScopedPointer<class TextDocumentPrivate> d_ptr;
88     Q_DECLARE_PRIVATE(TextDocument)
89     friend class TextDocumentPrivate;
90 };
91 
92 class KDEVPLATFORMSHELL_EXPORT TextView : public Sublime::View
93 {
94     Q_OBJECT
95 public:
96     explicit TextView(TextDocument* doc);
97     ~TextView() override;
98 
99     QWidget *createWidget(QWidget *parent = nullptr) override;
100 
101     KTextEditor::View *textView() const;
102 
103     QString viewStatus() const override;
104 
105     void readSessionConfig(KConfigGroup & config) override;
106     void writeSessionConfig(KConfigGroup & config) override;
107 
108     void setInitialRange(const KTextEditor::Range& range);
109     KTextEditor::Range initialRange() const;
110 
111 private:
112     void sendStatusChanged();
113 
114 private:
115     const QScopedPointer<class TextViewPrivate> d_ptr;
116     Q_DECLARE_PRIVATE(TextView)
117 };
118 
119 }
120 
121 
122 #endif
123 
124