From 7f8e0d81767b1d1d36ca8310369004896283ddb8 Mon Sep 17 00:00:00 2001 From: Mirko Waechter <mirko.waechter@kit.edu> Date: Thu, 16 Jun 2016 13:56:08 +0200 Subject: [PATCH] added InfixCompleter --- .../libraries/ArmarXGuiBase/CMakeLists.txt | 3 ++ .../ArmarXGuiBase/widgets/InfixCompleter.cpp | 43 +++++++++++++++++++ .../ArmarXGuiBase/widgets/InfixCompleter.h | 36 ++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.cpp create mode 100644 source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.h diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/CMakeLists.txt b/source/ArmarXGui/libraries/ArmarXGuiBase/CMakeLists.txt index 84fbb67b..7ee147a7 100644 --- a/source/ArmarXGui/libraries/ArmarXGuiBase/CMakeLists.txt +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/CMakeLists.txt @@ -37,6 +37,7 @@ set(LIB_FILES ArmarXWidgetController.cpp widgets/cpp-markdown/markdown-tokens.cpp widgets/TipDialog.cpp widgets/InfixFilterModel.cpp + widgets/InfixCompleter.cpp ) set(LIB_HEADERS ArmarXGuiInterface.h @@ -54,6 +55,7 @@ set(LIB_HEADERS ArmarXGuiInterface.h widgets/cpp-markdown/markdown-tokens.h widgets/TipDialog.h widgets/InfixFilterModel.h + widgets/InfixCompleter.h ) set(GUI_UIS @@ -77,6 +79,7 @@ qt4_wrap_cpp(LIB_FILES widgets/MarkdownEditor.h widgets/TipDialog.h widgets/InfixFilterModel.h + widgets/InfixCompleter.h ) qt4_wrap_ui(UI_HEADER ${GUI_UIS}) diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.cpp b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.cpp new file mode 100644 index 00000000..54b6cc8a --- /dev/null +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.cpp @@ -0,0 +1,43 @@ +#include "InfixCompleter.h" +#include "InfixFilterModel.h" + +#include <QListView> +#include <QStringListModel> + +namespace armarx +{ + + InfixCompleter::InfixCompleter(const QStringList& completionList, QObject* parent) : QCompleter(parent) + { + QListView* popup = new QListView(); + completionModel = new QStringListModel(completionList, this); + proxyModel = new InfixFilterModel(); + proxyModel->setSourceModel(completionModel); + setModel(proxyModel); + setPopup(popup); + setCaseSensitivity(Qt::CaseInsensitive); + } + + void InfixCompleter::setCompletionList(const QStringList& completionList) + { + completionModel->setStringList(completionList); + } + + InfixFilterModel* InfixCompleter::getProxyModel() const + { + return proxyModel; + } + + QStringList InfixCompleter::splitPath(const QString& path) const + { + return QStringList(""); + } + + void InfixCompleter::setCompletionInfix(const QString& infix) + { + proxyModel->setFilterFixedString(infix); + } + + + +} diff --git a/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.h b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.h new file mode 100644 index 00000000..706c1aaf --- /dev/null +++ b/source/ArmarXGui/libraries/ArmarXGuiBase/widgets/InfixCompleter.h @@ -0,0 +1,36 @@ +#ifndef _H_ARMARX_INFIXCOMPLETER_H +#define _H_ARMARX_INFIXCOMPLETER_H + +#include <QCompleter> +#include <QObject> + +class QStringListModel; + +namespace armarx +{ + class InfixFilterModel; + + /** + * @brief This class changes the standard QCompleter to an infix match completer. + */ + class InfixCompleter : public QCompleter + { + Q_OBJECT + + // QCompleter interface + public: + InfixCompleter(const QStringList& completionList, QObject* parent = 0); + void setCompletionList(const QStringList& completionList); + InfixFilterModel* getProxyModel() const; + QStringList splitPath(const QString& path) const; + public slots: + void setCompletionInfix(const QString& infix); + protected: + InfixFilterModel* proxyModel; + QStringListModel* completionModel; + }; + + +} + +#endif -- GitLab