1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of Qt Creator. 7 ** 8 ** Commercial License Usage 9 ** Licensees holding valid commercial Qt licenses may use this file in 10 ** accordance with the commercial license agreement provided with the 11 ** Software or, alternatively, in accordance with the terms contained in 12 ** a written agreement between you and The Qt Company. For licensing terms 13 ** and conditions see https://www.qt.io/terms-conditions. For further 14 ** information use the contact form at https://www.qt.io/contact-us. 15 ** 16 ** GNU General Public License Usage 17 ** Alternatively, this file may be used under the terms of the GNU 18 ** General Public License version 3 as published by the Free Software 19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 20 ** included in the packaging of this file. Please review the following 21 ** information to ensure the GNU General Public License requirements will 22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 23 ** 24 ****************************************************************************/ 25 26 #pragma once 27 28 #include "projectexplorer_export.h" 29 30 #include "panelswidget.h" 31 #include "projectwindow.h" 32 33 #include <utils/id.h> 34 #include <utils/treemodel.h> 35 36 #include <functional> 37 38 namespace ProjectExplorer { 39 40 class Project; 41 class ProjectExplorerPlugin; 42 43 class PROJECTEXPLORER_EXPORT ProjectPanelFactory 44 { 45 public: 46 ProjectPanelFactory(); 47 48 Utils::Id id() const; 49 void setId(Utils::Id id); 50 51 // simple properties 52 QString displayName() const; 53 void setDisplayName(const QString &name); 54 int priority() const; 55 void setPriority(int priority); 56 57 // interface for users of ProjectPanelFactory 58 bool supports(Project *project); 59 60 using WidgetCreator = std::function<QWidget *(Project *)>; 61 62 // interface for "implementations" of ProjectPanelFactory 63 // by default all projects are supported, only set a custom supports function 64 // if you need something different 65 using SupportsFunction = std::function<bool (Project *)>; 66 void setSupportsFunction(std::function<bool (Project *)> function); 67 68 // This takes ownership. 69 static void registerFactory(ProjectPanelFactory *factory); 70 71 static QList<ProjectPanelFactory *> factories(); 72 73 Utils::TreeItem *createPanelItem(Project *project); 74 75 QString icon() const; 76 void setIcon(const QString &icon); 77 78 void setCreateWidgetFunction(const WidgetCreator &createWidgetFunction); 79 QWidget *createWidget(Project *project) const; 80 81 private: 82 friend class ProjectExplorerPlugin; 83 static void destroyFactories(); 84 85 Utils::Id m_id; 86 int m_priority = 0; 87 QString m_displayName; 88 SupportsFunction m_supportsFunction; 89 WidgetCreator m_widgetCreator; 90 QString m_icon; 91 }; 92 93 } // namespace ProjectExplorer 94