File indexing completed on 2024-05-05 04:40:54
0001 /* 0002 SPDX-FileCopyrightText: 2007 David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KDEVPLATFORM_PLUGIN_QUICKOPENPLUGIN_H 0008 #define KDEVPLATFORM_PLUGIN_QUICKOPENPLUGIN_H 0009 0010 #include <QVariant> 0011 #include <QPointer> 0012 0013 #include <interfaces/iplugin.h> 0014 0015 #include <language/interfaces/iquickopen.h> 0016 #include <language/interfaces/quickopendataprovider.h> 0017 0018 class QAction; 0019 0020 namespace KTextEditor { 0021 class Cursor; 0022 } 0023 0024 class QuickOpenModel; 0025 class QuickOpenWidget; 0026 class QuickOpenLineEdit; 0027 0028 class QuickOpenPlugin 0029 : public KDevelop::IPlugin 0030 , public KDevelop::IQuickOpen 0031 { 0032 Q_OBJECT 0033 Q_INTERFACES(KDevelop::IQuickOpen) 0034 public: 0035 explicit QuickOpenPlugin(QObject* parent, const QVariantList& = QVariantList()); 0036 ~QuickOpenPlugin() override; 0037 0038 static QuickOpenPlugin* self(); 0039 0040 // KDevelop::Plugin methods 0041 void unload() override; 0042 0043 KDevelop::ContextMenuExtension contextMenuExtension(KDevelop::Context* context, QWidget* parent) override; 0044 0045 enum ModelTypes { 0046 Files = 1, 0047 Functions = 2, 0048 Classes = 4, 0049 OpenFiles = 8, 0050 All = Files + Functions + Classes + OpenFiles 0051 }; 0052 0053 /** 0054 * Shows the quickopen dialog with the specified Model-types 0055 * @param modes A combination of ModelTypes 0056 * */ 0057 void showQuickOpen(ModelTypes modes = All); 0058 void showQuickOpen(const QStringList& items) override; 0059 0060 void registerProvider(const QStringList& scope, const QStringList& type, KDevelop::QuickOpenDataProviderBase* provider) override; 0061 0062 bool removeProvider(KDevelop::QuickOpenDataProviderBase* provider) override; 0063 0064 QSet<KDevelop::IndexedString> fileSet() const override; 0065 0066 //Frees the model by closing active quickopen dialoags, and returns whether successful. 0067 bool freeModel(); 0068 0069 void createActionsForMainWindow(Sublime::MainWindow* window, QString& xmlFile, KActionCollection& actions) override; 0070 0071 QuickOpenLineEdit* createQuickOpenLineWidget(); 0072 0073 QLineEdit* createQuickOpenLine(const QStringList& scopes, const QStringList& type, QuickOpenType kind) override; 0074 0075 public Q_SLOTS: 0076 void quickOpen(); 0077 void quickOpenFile(); 0078 void quickOpenFunction(); 0079 void quickOpenClass(); 0080 void quickOpenDeclaration(); 0081 void quickOpenOpenFile(); 0082 void quickOpenDefinition(); 0083 void quickOpenNavigateFunctions(); 0084 void quickOpenDocumentation(); 0085 void quickOpenActions(); 0086 0087 void previousFunction(); 0088 void nextFunction(); 0089 private Q_SLOTS: 0090 void storeScopes(const QStringList&); 0091 void storeItems(const QStringList&); 0092 private: 0093 friend class QuickOpenLineEdit; 0094 friend class StandardQuickOpenWidgetCreator; 0095 QuickOpenLineEdit* quickOpenLine(const QString& name = QStringLiteral( "Quickopen" )); 0096 0097 enum FunctionJumpDirection { NextFunction, PreviousFunction }; 0098 void jumpToNearestFunction(FunctionJumpDirection direction); 0099 0100 QPair<QUrl, KTextEditor::Cursor> specialObjectJumpPosition() const; 0101 QWidget* specialObjectNavigationWidget() const; 0102 bool jumpToSpecialObject(); 0103 void showQuickOpenWidget(const QStringList& items, const QStringList& scopes, bool preselectText); 0104 0105 QuickOpenModel* m_model; 0106 class ProjectFileDataProvider* m_projectFileData; 0107 class ProjectItemDataProvider* m_projectItemData; 0108 class OpenFilesDataProvider* m_openFilesData; 0109 class DocumentationQuickOpenProvider* m_documentationItemData; 0110 class ActionsQuickOpenProvider* m_actionsItemData; 0111 QStringList lastUsedScopes; 0112 QStringList lastUsedItems; 0113 0114 //We can only have one widget at a time, because we manipulate the model. 0115 QPointer<QObject> m_currentWidgetHandler; 0116 QAction* m_quickOpenDeclaration; 0117 QAction* m_quickOpenDefinition; 0118 }; 0119 0120 class QuickOpenWidgetCreator; 0121 0122 class QuickOpenLineEdit : public QLineEdit 0123 { 0124 Q_OBJECT 0125 public: 0126 explicit QuickOpenLineEdit(QuickOpenWidgetCreator* creator); 0127 ~QuickOpenLineEdit() override; 0128 0129 bool insideThis(QObject* object); 0130 void showWithWidget(QuickOpenWidget* widget); 0131 0132 private Q_SLOTS: 0133 void activate(); 0134 void deactivate(); 0135 void checkFocus(); 0136 void widgetDestroyed(QObject*); 0137 private: 0138 void focusInEvent(QFocusEvent* ev) override; 0139 bool eventFilter(QObject* obj, QEvent* e) override; 0140 void hideEvent(QHideEvent*) override; 0141 0142 QPointer<QuickOpenWidget> m_widget; 0143 bool m_forceUpdate; 0144 QuickOpenWidgetCreator* m_widgetCreator; 0145 }; 0146 0147 #endif // KDEVPLATFORM_PLUGIN_QUICKOPENPLUGIN_H