KSeExpr  4.0.4.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 
18 class 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)
ExprCompletionModel(QObject *parent=0)
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