From e97c998d2049a5647baa9921c52c5eb3615a72b9 Mon Sep 17 00:00:00 2001
From: Mirko Waechter <mirko.waechter@kit.edu>
Date: Sun, 27 Aug 2017 18:56:13 +0200
Subject: [PATCH] added button for widget search bar

---
 .../ArmarXGui/ArmarXMainWindow.cpp            | 34 +++++++++++++------
 .../applications/ArmarXGui/ArmarXMainWindow.h | 10 +++++-
 2 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
index 6dafc432..e0b2e18a 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
@@ -134,14 +134,15 @@ ArmarXMainWindow::ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfa
     tipDialog->setBlackListedStrings(mainSettings.value(CONFIG_BLACKLISTED_TIPS).toStringList());
     ui->actionLoadLastConfig->setChecked(mainSettings.value(CONFIG_LOAD_LAST_CONFIG).toBool());
 
+    addWidgetAction = new AddArmarXWidgetAction("", this, this);
+    connect(addWidgetAction, SIGNAL(clicked(QString, QString)), this, SLOT(createArmarXWidget(QString, QString)), Qt::UniqueConnection);
+
 
     connect(ui->actionLoadPlugin, SIGNAL(triggered()), this, SLOT(pluginDialog()));
     connect(ui->actionSave_Gui, SIGNAL(triggered()), this, SLOT(saveGuiConfig()));
     connect(ui->actionLoad_Gui_Config, SIGNAL(triggered()), this, SLOT(loadGuiConfig()));
     connect(ui->actionQuit, SIGNAL(triggered()), this, SLOT(close()));
     connect(ui->actionSave_Gui_as, SIGNAL(triggered()), this, SLOT(saveGuiConfigAs()));
-    //    connect(ui->actionClear_tip_blacklist, SIGNAL(triggered()), this, SLOT(on_actionClear_tip_blacklist_triggered()));
-    //    connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(on_actionAbout_triggered()));
 
 
     // EmergencyStop
@@ -1090,7 +1091,7 @@ void ArmarXMainWindow::updateAvailableWidgetList()
 {
     ui->menuAdd_Widget->clear();
 
-    QLineEdit* searchField = new QLineEdit(ui->menuAdd_Widget);
+    searchField = new QLineEdit(ui->menuAdd_Widget);
     searchField->setToolTip("Search and add a new widget from all loaded ArmarX Gui Plugins");
     searchField->setMaximumWidth(250);
     searchField->setPlaceholderText("Widget Search");
@@ -1163,6 +1164,15 @@ void ArmarXMainWindow::updateAvailableWidgetList()
 
     ui->toolBar->addSeparator();
     ui->toolBar->addWidget(searchField);
+    QIcon icon;
+    icon.addFile(QString::fromUtf8("://icons/edit-add.ico"), QSize(), QIcon::Normal, QIcon::Off);
+    openWidgetButton = new QToolButton(this);
+    openWidgetButton->setEnabled(false);
+    openWidgetButton->setIcon(icon);
+    openWidgetButton->setToolTip("Open selected widget");
+    connect(openWidgetButton, SIGNAL(clicked()), this, SLOT(openWidgetButtonClicked()), Qt::UniqueConnection);
+    ui->toolBar->addWidget(openWidgetButton);
+    connect(searchField, SIGNAL(textChanged(QString)), this, SLOT(updateOpenWidgetButtonStatus(QString)), Qt::UniqueConnection);
 
     auto favoriteWidgetNames = getFavoriteWidgets();
 
@@ -1173,8 +1183,6 @@ void ArmarXMainWindow::updateAvailableWidgetList()
         label->setToolTip("The favorites are generated from the usage frequency over the last X widget creations.");
         ui->toolBar->addWidget(label);
     }
-
-
     for (auto widgetName : favoriteWidgetNames)
     {
         if (actionList.contains(widgetName))
@@ -1437,13 +1445,17 @@ void armarx::ArmarXMainWindow::on_actionOpen_Use_Case_triggered()
 
 }
 
-
-// Emergency Stop
-
-
-
-
 void armarx::ArmarXMainWindow::on_actionClear_plugin_cache_triggered()
 {
     pluginCache.clearCacheFile();
 }
+
+void ArmarXMainWindow::updateOpenWidgetButtonStatus(QString widgetName)
+{
+    openWidgetButton->setEnabled(pluginCache.getAvailableWidgetNames().contains(widgetName));
+}
+
+void ArmarXMainWindow::openWidgetButtonClicked()
+{
+    addWidgetAction->triggered(searchField->text());
+}
diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
index e04ad8bb..180a6c93 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.h
@@ -54,6 +54,7 @@ class QScrollArea;
 class QSignalMapper;
 class QListWidgetItem;
 class QActionGroup;
+class QLineEdit;
 
 namespace Ui
 {
@@ -64,6 +65,7 @@ namespace Ui
 namespace armarx
 {
     class GuiUseCaseSelector;
+    class AddArmarXWidgetAction;
 
     class ArmarXDockWidget;
 
@@ -161,6 +163,10 @@ namespace armarx
 
         void on_actionClear_plugin_cache_triggered();
 
+        void updateOpenWidgetButtonStatus(QString widgetName);
+
+        void openWidgetButtonClicked();
+
     private:
         /**
          * @brief updates the menu entry with the available widgets.
@@ -231,7 +237,9 @@ namespace armarx
         QString splashscreenPrefix;
         GuiUseCaseSelector* guiUseCaseSelector;
         QStringList mainWidgets;
-
+        QToolButton* openWidgetButton;
+        QLineEdit* searchField;
+        AddArmarXWidgetAction* addWidgetAction;
         boost::shared_ptr<boost::recursive_mutex> mutex3d;
 
         friend class WidgetNameDialog;
-- 
GitLab