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

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_PARTDOCUMENT_H
0008 #define KDEVPLATFORM_PARTDOCUMENT_H
0009 
0010 #include <interfaces/idocument.h>
0011 #include <sublime/urldocument.h>
0012 
0013 #include "shellexport.h"
0014 
0015 namespace KParts {
0016 class Part;
0017 }
0018 
0019 namespace KDevelop {
0020 class PartDocumentPrivate;
0021 
0022 /**
0023 The generic document which represents KParts.
0024 
0025 This document is used by shell when more specific document classes
0026 are incapable of loading the url.
0027 
0028 This document loads one KPart (read-only or read-write) per view
0029 and sets part widget to be a view widget.
0030 */
0031 class KDEVPLATFORMSHELL_EXPORT PartDocument: public Sublime::UrlDocument, public KDevelop::IDocument {
0032     Q_OBJECT
0033     Q_INTERFACES(KDevelop::IDocument)
0034 
0035 public:
0036     PartDocument(const QUrl &url, ICore* core, const QString& preferredPart = QString() );
0037     ~PartDocument() override;
0038 
0039     QUrl url() const override;
0040     void setUrl(const QUrl& newUrl);
0041 
0042     QWidget *createViewWidget(QWidget *parent = nullptr) override;
0043     KParts::Part *partForView(QWidget *view) const override;
0044 
0045     QMimeType mimeType() const override;
0046     KTextEditor::Document* textDocument() const override;
0047     bool save(DocumentSaveMode mode = Default) override;
0048     void reload() override;
0049     ///Closes and deletes the document. Asks the user before if needed.
0050     bool close(DocumentSaveMode mode = Default) override;
0051     bool isActive() const override;
0052     DocumentState state() const override;
0053 
0054     void setPrettyName(const QString& name) override;
0055     
0056     void activate(Sublime::View *activeView, KParts::MainWindow *mainWindow) override;
0057 
0058     KTextEditor::Cursor cursorPosition() const override;
0059     void setCursorPosition(const KTextEditor::Cursor &cursor) override;
0060     void setTextSelection(const KTextEditor::Range &range) override;
0061 
0062     //Overridden from Sublime::Document
0063     bool closeDocument(bool silent) override;
0064     bool askForCloseFeedback() override;
0065 protected:
0066     /** Gives us access to the KParts */
0067     QMap<QWidget*, KParts::Part*> partForView() const;
0068     
0069     /** Lets us override the createViewWidget method safely */
0070     void addPartForView(QWidget* widget, KParts::Part* part);
0071     
0072 private:
0073     const QScopedPointer<class PartDocumentPrivate> d_ptr;
0074     Q_DECLARE_PRIVATE(PartDocument)
0075 };
0076 
0077 }
0078 
0079 #endif
0080