KSeExpr 6.0.0.0
ExprCompletionModel.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2// SPDX-License-Identifier: LicenseRef-Apache-2.0
3// SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4// SPDX-License-Identifier: GPL-3.0-or-later
5/*
6* @file ExprCompletionModel.h
7* @brief Provides a model for providing completion items
8* @author aselle
9*/
10
11#pragma once
12
13#include <QtCore/QAbstractItemModel>
14#include <QtCore/QString>
15#include <QtCore/QSize>
16#include <vector>
17
18class ExprCompletionModel : public QAbstractItemModel // ItemModel
19{
20 public:
21 // clear/add functions (these are ones that will be resolved with resolveFunc()
22 void clearFunctions();
23 void addFunction(const QString&, const QString&);
24
25 // clear/add user variables (these are ones that will be resolved with resolveVar()
26 void clearVariables();
27 void addVariable(const QString& str, const QString& comment);
28
29 // add extras
30 void syncExtras(const ExprCompletionModel& otherModel);
31
32 ExprCompletionModel(QObject* parent = 0);
33
34 QModelIndex index(int row, int column, const QModelIndex&) const override { return createIndex(row, column, nullptr); }
35
36 QModelIndex parent(const QModelIndex&) const override { return {}; }
37
38 int rowCount(const QModelIndex& parent = QModelIndex()) const override {
39 Q_UNUSED(parent);
40 auto count = builtins.size() + functions.size() + variables.size() + local_variables.size();
41 return count;
42 }
43
44 int columnCount(const QModelIndex& parent) const override {
45 Q_UNUSED(parent);
46 return 2;
47 }
48
49 static QString getFirstLine(const std::string& all) {
50 size_t newline = all.find('\n');
51 if (newline != std::string::npos)
52 return QString::fromStdString(all.substr(0, newline));
53 else
54 return QString::fromStdString(all);
55 }
56
57 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
58
59 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override {
60 Q_UNUSED(orientation);
61 if (role == Qt::SizeHintRole) {
62 if (section == 0)
63 return QVariant(QSize(100, 1));
64 else
65 return QVariant(QSize(200, 1));
66 } else
67 return QVariant();
68 }
69 std::vector<QString> local_variables; // only the expression editor itself should modify these
70
71 QString getDocString(const QString& s);
72
73 private:
74 Q_OBJECT
75
76 std::vector<QString> builtins;
77 std::vector<QString> functions, functions_comment;
78 std::map<QString, int> functionNameToFunction;
79 std::vector<QString> variables, variables_comment;
80};
QModelIndex index(int row, int column, const QModelIndex &) const override
std::vector< QString > local_variables
static QString getFirstLine(const std::string &all)
int columnCount(const QModelIndex &parent) const override
std::vector< QString > functions
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
std::vector< QString > variables
std::vector< QString > functions_comment
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QString getDocString(const QString &s)
void syncExtras(const ExprCompletionModel &otherModel)
void addVariable(const QString &str, const QString &comment)
void addFunction(const QString &, const QString &)
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
std::vector< QString > variables_comment
std::vector< QString > builtins
QModelIndex parent(const QModelIndex &) const override
std::map< QString, int > functionNameToFunction