File indexing completed on 2024-05-19 12:22:37
0001 /* 0002 SPDX-FileCopyrightText: 2006-2007 Alexander Dymo <adymo@kdevelop.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KDEVPLATFORM_SUBLIMETOOLDOCUMENT_H 0008 #define KDEVPLATFORM_SUBLIMETOOLDOCUMENT_H 0009 0010 #include "document.h" 0011 0012 #include "sublimeexport.h" 0013 0014 class QAction; 0015 0016 namespace Sublime { 0017 0018 class ToolDocument; 0019 class ToolDocumentPrivate; 0020 0021 /** 0022 @short Factory to create widgets for tool views 0023 */ 0024 class KDEVPLATFORMSUBLIME_EXPORT ToolFactory { 0025 public: 0026 virtual ~ToolFactory() {} 0027 virtual QWidget* create(ToolDocument *doc, QWidget *parent = nullptr) = 0; 0028 virtual QList<QAction*> toolBarActions( QWidget* viewWidget ) const = 0; 0029 virtual QList<QAction*> contextMenuActions( QWidget* viewWidget ) const = 0; 0030 virtual QString id() const = 0; 0031 }; 0032 0033 /** 0034 @short Simple factory that just creates a new widget of given type 0035 */ 0036 template <class Widget> 0037 class SimpleToolWidgetFactory: public ToolFactory { 0038 public: 0039 explicit SimpleToolWidgetFactory(const QString &id): ToolFactory(), m_id(id) {} 0040 QWidget* create(ToolDocument * /*doc*/, QWidget *parent = nullptr) override 0041 { 0042 return new Widget(parent); 0043 } 0044 QList<QAction*> toolBarActions( QWidget* ) const override { return QList<QAction*>(); } 0045 QList< QAction* > contextMenuActions(QWidget* /*viewWidget*/) const override { return QList<QAction*>(); } 0046 QString id() const override { return m_id; } 0047 virtual bool viewsWantProgressIndicator() const { return false; } 0048 private: 0049 QString m_id; 0050 }; 0051 0052 /** 0053 @short Document to represent and manage widgets as tool views 0054 */ 0055 class KDEVPLATFORMSUBLIME_EXPORT ToolDocument: public Document { 0056 Q_OBJECT 0057 public: 0058 /**Initializes tool document with given @p factory. Document takes 0059 ownership over the factory and deletes it together with itself*/ 0060 ToolDocument(const QString &title, Controller *controller, ToolFactory *factory); 0061 ~ToolDocument() override; 0062 0063 QString documentType() const override; 0064 0065 QString documentSpecifier() const override; 0066 0067 protected: 0068 QWidget *createViewWidget(QWidget *parent = nullptr) override; 0069 ToolFactory *factory() const; 0070 0071 private: 0072 const QScopedPointer<class ToolDocumentPrivate> d_ptr; 0073 Q_DECLARE_PRIVATE(ToolDocument) 0074 0075 friend class View; 0076 }; 0077 0078 } 0079 0080 #endif 0081