RedPanda-CPP/RedPandaIDE/widgets/codecompletionview.h

118 lines
3.4 KiB
C
Raw Normal View History

2021-08-23 21:50:53 +08:00
#ifndef CODECOMPLETIONVIEW_H
#define CODECOMPLETIONVIEW_H
2021-08-24 09:59:44 +08:00
#include <QListView>
2021-08-23 21:50:53 +08:00
#include <QWidget>
2021-08-24 15:05:10 +08:00
#include "parser/cppparser.h"
2021-08-23 21:50:53 +08:00
2021-08-24 09:59:44 +08:00
using KeyPressedCallback = std::function<bool (QKeyEvent *)>;
class CodeCompletionListView: public QListView {
Q_OBJECT
public:
explicit CodeCompletionListView(QWidget *parent = nullptr);
// QWidget interface
const KeyPressedCallback &keypressedCallback() const;
void setKeypressedCallback(const KeyPressedCallback &newKeypressedCallback);
protected:
void keyPressEvent(QKeyEvent *event) override;
private:
KeyPressedCallback mKeypressedCallback;
};
2021-08-23 21:50:53 +08:00
2021-08-25 08:48:33 +08:00
class CodeCompletionListModel : public QAbstractListModel {
Q_OBJECT
public:
explicit CodeCompletionListModel(StatementList* statements,QObject *parent = nullptr);
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
void notifyUpdated();
private:
const StatementList* mStatements;
};
2021-08-23 21:50:53 +08:00
class CodeCompletionView : public QWidget
{
Q_OBJECT
public:
explicit CodeCompletionView(QWidget *parent = nullptr);
~CodeCompletionView();
2021-08-24 09:59:44 +08:00
void setKeypressedCallback(const KeyPressedCallback &newKeypressedCallback);
2021-08-25 00:20:07 +08:00
void prepareSearch(const QString& phrase, const QString& filename, int line);
2021-08-25 08:48:33 +08:00
bool search(const QString& phrase, bool autoHideOnSingleResult);
2021-08-25 00:20:07 +08:00
2021-08-24 09:59:44 +08:00
2021-08-25 23:53:35 +08:00
const PCppParser &parser() const;
void setParser(const PCppParser &newParser);
int showCount() const;
void setShowCount(int newShowCount);
bool onlyGlobals() const;
void setOnlyGlobals(bool newOnlyGlobals);
bool recordUsage() const;
void setRecordUsage(bool newRecordUsage);
bool showKeywords() const;
void setShowKeywords(bool newShowKeywords);
bool showCodeIns() const;
void setShowCodeIns(bool newShowCodeIns);
bool ignoreCase() const;
void setIgnoreCase(bool newIgnoreCase);
bool sortByScope() const;
void setSortByScope(bool newSortByScope);
bool useCppKeyword() const;
void setUseCppKeyword(bool newUseCppKeyword);
const PStatement &currentStatement() const;
void setCurrentStatement(const PStatement &newCurrentStatement);
2021-08-24 15:05:10 +08:00
private:
void addChildren(PStatement scopeStatement, const QString& fileName,
int line);
void addStatement(PStatement statement, const QString& fileName, int line);
void filterList(const QString& member);
void getCompletionFor(const QString& fileName,const QString& phrase, int line);
bool isIncluded(const QString& fileName);
2021-08-23 21:50:53 +08:00
private:
2021-08-24 09:59:44 +08:00
CodeCompletionListView * mListView;
2021-08-25 08:48:33 +08:00
CodeCompletionListModel* mModel;
2021-08-24 15:05:10 +08:00
QList<PCodeIns> mCodeInsList; //(Code template list)
//QList<PStatement> mCodeInsStatements; //temporary (user code template) statements created when show code suggestion
2021-08-25 08:48:33 +08:00
StatementList mFullCompletionStatementList;
StatementList mCompletionStatementList;
2021-08-24 15:05:10 +08:00
QSet<QString> mIncludedFiles;
QSet<QString> mUsings;
QSet<QString> mAddedStatements;
QString mPhrase;
QHash<QString,int> mSymbolUsage;
2021-08-25 23:53:35 +08:00
QRecursiveMutex mMutex;
PCppParser mParser;
PStatement mCurrentStatement;
int mShowCount;
bool mOnlyGlobals;
2021-08-24 15:05:10 +08:00
bool mRecordUsage;
bool mShowKeywords;
bool mShowCodeIns;
bool mIgnoreCase;
bool mSortByScope;
bool mUseCppKeyword;
2021-08-25 00:20:07 +08:00
// QWidget interface
protected:
void hideEvent(QHideEvent *event) override;
2021-08-23 21:50:53 +08:00
};
#endif // CODECOMPLETIONVIEW_H