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

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