diff options
| author | 2014-12-06 17:33:25 -0500 | |
|---|---|---|
| committer | 2014-12-06 17:33:25 -0500 | |
| commit | 7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch) | |
| tree | a35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp | |
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp b/SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp new file mode 100644 index 0000000..aeb481e --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/completer/completermodel.cpp @@ -0,0 +1,170 @@ +#include "completermodel.h" +#include "iconmanager.h" +#include "common/unused.h" +#include "completerview.h" +#include <QIcon> +#include <QVariant> + +CompleterModel::CompleterModel(QObject *parent) : + QAbstractItemModel(parent) +{ +} + + +QModelIndex CompleterModel::index(int row, int column, const QModelIndex& parent) const +{ + if (parent.isValid()) + return QModelIndex(); // no childrens + + return createIndex(row, column); +} + +QModelIndex CompleterModel::parent(const QModelIndex& child) const +{ + UNUSED(child); + return QModelIndex(); +} + +int CompleterModel::rowCount(const QModelIndex& parent) const +{ + UNUSED(parent); + return tokens.size(); +} + +int CompleterModel::columnCount(const QModelIndex& parent) const +{ + UNUSED(parent); + return 1; +} + +QVariant CompleterModel::data(const QModelIndex& index, int role) const +{ + int row = index.row(); + if (row < 0 || row >= tokens.size()) + return QVariant(); + + ExpectedTokenPtr token = tokens[row]; + switch (role) + { + case Qt::DisplayRole: + case VALUE: + return token->value; + case CONTEXT: + return token->contextInfo; + case LABEL: + return token->label; + case PREFIX: + return token->prefix; + case TYPE: + return (int)token->type; + case Qt::DecorationRole: + return getIcon(token->type); + } + + return QVariant(); +} + +void CompleterModel::setCompleterView(CompleterView* view) +{ + completerView = view; +} + +void CompleterModel::setData(const QList<ExpectedTokenPtr>& data) +{ + clear(); + beginInsertRows(QModelIndex(), 0, data.size()-1); + tokens = data; + endInsertRows(); +} + +void CompleterModel::setFilter(const QString& filter) +{ + this->filter = filter; + applyFilter(); +} + +QString CompleterModel::getFilter() const +{ + return filter; +} + +void CompleterModel::applyFilter() +{ + bool empty = filter.isEmpty(); + QModelIndex idx; + QString value; + QString prefix; + bool matched = empty; + for (int i = 0; i < rowCount(QModelIndex()); i++) + { + if (!empty) + { + idx = index(i, 0, QModelIndex()); + value = idx.data(VALUE).toString(); + prefix = idx.data(PREFIX).toString(); + if (!prefix.isEmpty()) + value.prepend(prefix+"."); + + matched = value.startsWith(filter, Qt::CaseInsensitive); + } + + completerView->setRowHidden(i, !matched); + } +} + + +void CompleterModel::clear() +{ + beginResetModel(); + tokens.clear(); + endResetModel(); +} + +ExpectedTokenPtr CompleterModel::getToken(int index) const +{ + if (index < 0 || index >= tokens.size()) + return ExpectedTokenPtr(); + + return tokens[index]; +} + +QIcon CompleterModel::getIcon(ExpectedToken::Type type) const +{ + switch (type) + { + case ExpectedToken::COLUMN: + return ICONS.COLUMN; + case ExpectedToken::TABLE: + return ICONS.TABLE; + case ExpectedToken::INDEX: + return ICONS.INDEX; + case ExpectedToken::TRIGGER: + return ICONS.TRIGGER; + case ExpectedToken::VIEW: + return ICONS.VIEW; + case ExpectedToken::DATABASE: + return ICONS.DATABASE; + case ExpectedToken::OTHER: + return ICONS.COMPLETER_OTHER; + case ExpectedToken::KEYWORD: + return ICONS.KEYWORD; + case ExpectedToken::FUNCTION: + return ICONS.FUNCTION; + case ExpectedToken::OPERATOR: + return ICONS.COMPLETER_OPERATOR; + case ExpectedToken::STRING: + return ICONS.COMPLETER_STRING; + case ExpectedToken::NUMBER: + return ICONS.COMPLETER_NUMBER; + case ExpectedToken::BLOB: + return ICONS.COMPLETER_BLOB; + case ExpectedToken::COLLATION: + return ICONS.CONSTRAINT_COLLATION; + case ExpectedToken::PRAGMA: + return ICONS.COMPLETER_PRAGMA; + case ExpectedToken::NO_VALUE: + return ICONS.COMPLETER_NO_VALUE; + } + + return ICONS.COMPLETER_NO_VALUE; +} |
