From 186d2f17373877ab8ed62d1f3ad5d2db907f5146 Mon Sep 17 00:00:00 2001
From: Christoph Pohl <christoph.pohl@kit.edu>
Date: Fri, 24 May 2024 10:22:24 +0200
Subject: [PATCH] remove comboboxbutton

---
 .../ScenarioManager/CMakeLists.txt            |  4 +-
 .../ScenarioManagerWidgetController.cpp       |  2 +-
 .../controller/ScenarioListController.cpp     |  9 +-
 .../ScenarioManager/gui/buttondelegate.cpp    | 99 +------------------
 .../ScenarioManager/gui/buttondelegate.h      |  4 -
 .../ScenarioManager/gui/comboboxbutton.cpp    | 77 ---------------
 .../ScenarioManager/gui/comboboxbutton.h      | 32 ------
 .../ScenarioManager/gui/scenariolistview.cpp  |  8 --
 .../ScenarioManager/gui/scenariolistview.h    |  1 -
 9 files changed, 9 insertions(+), 227 deletions(-)
 delete mode 100644 source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.cpp
 delete mode 100644 source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.h

diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/CMakeLists.txt b/source/ArmarXGui/gui-plugins/ScenarioManager/CMakeLists.txt
index 7d5bf44f..4608ef1a 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/CMakeLists.txt
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/CMakeLists.txt
@@ -17,9 +17,8 @@ set(SOURCES
 ./gui/OptionalPropertyManager.cpp
 ./gui/OptionalPropertyFactory.cpp
 ./gui/OptionalEdit.cpp
-./gui/comboboxbutton.cpp
 
-./controller/openscenariocontroller.cpp
+        ./controller/openscenariocontroller.cpp
 ./controller/ApplicationDatabaseController.cpp ./controller/SettingsController.cpp
 ./controller/DetailedApplicationController.cpp ./controller/ScenarioListController.cpp
 )
@@ -34,7 +33,6 @@ set (MOC_HEADERS
         ./gui/settingsview.h
         ./gui/treemodel.h
         ./gui/createpropertyview.h
-        ./gui/comboboxbutton.h
         ./controller/ApplicationDatabaseController.h
         ./controller/SettingsController.h
         ./controller/DetailedApplicationController.h
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
index ec954128..e8837039 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/ScenarioManagerWidgetController.cpp
@@ -394,7 +394,7 @@ ScenarioManagerWidgetController::reparsePackages()
 
         QStringList openedScenarios = settings.value("scenarios").toStringList();
         // remove duplicates
-        openedScenarios = openedScenarios.toSet().toList();
+        openedScenarios = openedScenarios.toSet().values();
 
         StringList openedList;
         for (const QString& it : openedScenarios)
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
index 379b60f2..24da4930 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/controller/ScenarioListController.cpp
@@ -679,7 +679,7 @@ QModelIndex ScenarioListController::findApplicationModelIndex(ScenarioManager::D
         return QModelIndex();
     }
     int count = 0;
-    QModelIndex appIndex = subScenarioModelIndex.child(0, 0);
+    QModelIndex appIndex = subScenarioModelIndex.model()->index(0, 0);
     while (true)
     {
         appIndex = appIndex.sibling(count, 0);
@@ -732,7 +732,7 @@ QModelIndex ScenarioListController::findSubScenarioModelIndex(std::string scenar
     count = 0;
     while (true)
     {
-        QModelIndex currentSubPackageIndex = scenarioIndex.child(count, 0);
+        QModelIndex currentSubPackageIndex = scenarioIndex.model()->index(count, 0);
         if (!currentSubPackageIndex.isValid())
         {
             return QModelIndex();
@@ -752,7 +752,7 @@ QModelIndex ScenarioListController::findSubScenarioModelIndexByScenarioIndex(QMo
     int count = 0;
     while (true)
     {
-        QModelIndex currentSubPackageIndex = scenarioIndex.child(count, 0);
+        QModelIndex currentSubPackageIndex = scenarioIndex.model()->index(count, 0);
         if (packageName == currentSubPackageIndex.data().toString().toStdString())
         {
             return currentSubPackageIndex;
@@ -809,9 +809,6 @@ void ScenarioListController::fetchStati()
 
 bool ScenarioListController::StartScenario(ScenarioPtr scenario, ExecutorPtr executor, IceGrid::AdminPrx iceAdmin)
 {
-    StatusManager statusManager;
-    StopStrategyFactory stopStrategyFactory;
-
     // Make sure all required data files are generated when launching scenario
     const ApplicationInstanceVectorPtr applications = scenario->getApplications();
     ARMARX_CHECK_NOT_NULL(applications);
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.cpp
index d55d38c0..527744ec 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.cpp
@@ -27,7 +27,6 @@
 #include "filterabletreemodelsortfilterproxymodel.h"
 
 #include "treeitem.h"
-#include "comboboxbutton.h"
 #include "scenarioitem.h"
 #include <ArmarXCore/util/ScenarioManagerCommon/parser/StatusManager.h>
 #include <ArmarXCore/core/logging/Logging.h>
@@ -48,84 +47,14 @@ ButtonDelegate::ButtonDelegate(QWidget* parent) : QStyledItemDelegate(parent),
 {
 }
 
-QWidget* ButtonDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
-{
-    // Create the combobox and populate it
-    auto model = index.model();
-    ARMARX_CHECK_EXPRESSION(model);
-    ComboBoxButton* cb = new ComboBoxButton(model, index.model()->index(index.row(), 0).data().toString(), parent);
-    cb->setFrame(true);
-    int size = appIconSize;
-    //int row = index.row();
-    if (!index.parent().isValid())
-    {
-        size = scenarioIconSize;
-    }
-//    if (index.data().toString().compare("Start") == 0)
-//    {
-//        cb->addItem(startPixmap, "Start");
-//        cb->setIconSize(QSize(size, size));
-//        cb->setToolTip("Start");
-//    }
-//    else if (index.data().toString().compare("Stop") == 0)
-//    {
-//        cb->addItem(stopPixmap, "Stop");
-//        cb->setIconSize(QSize(size, size));
-//        cb->setToolTip("Stop");
-//    }
-//    else if (index.data().toString().compare("Restart") == 0)
-//    {
-//        cb->addItem(restartPixmap, "Restart");
-//        cb->setIconSize(QSize(size, size));
-//        cb->setToolTip("Restart");
-//    }
-//    else
-//    {
-//        cb->addItem(index.data().toString());
-//    }
-
-    if (index.data().toString().compare("HIDE") == 0)
-    {
-        const_cast<ButtonDelegate*>(this)->buttonStates[index] = 0;
-        cb->setVisible(false);
-    }
-
-    QObject::connect(cb, SIGNAL(released(QString, const QAbstractItemModel*, QString)), this,
-                     SLOT(onComboBoxRelease(QString, const QAbstractItemModel*, QString)));
-
-    return cb;
-}
-
 void ButtonDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
 {
-    if (QComboBox* cb = qobject_cast<QComboBox*>(editor))
-    {
-        // get the index of the text in the combobox that matches the current value of the item
-        QString currentText = index.data(Qt::EditRole).toString();
-        int cbIndex = cb->findText(currentText);
-        // if it is valid, adjust the combobox
-        if (cbIndex >= 0)
-        {
-            cb->setCurrentIndex(cbIndex);
-        }
-    }
-    else
-    {
-        QStyledItemDelegate::setEditorData(editor, index);
-    }
+    QStyledItemDelegate::setEditorData(editor, index);
 }
 
 void ButtonDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
 {
-    if (ComboBoxButton* cb = qobject_cast<ComboBoxButton*>(editor))
-    {
-        model->setData(index, cb->currentText(), Qt::EditRole);
-        //        cb->setScenarioIndex(index);
-    }
-    else
-    {
-        QStyledItemDelegate::setModelData(editor, model, index);
-    }
+    QStyledItemDelegate::setModelData(editor, model, index);
 }
 
 void ButtonDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
@@ -164,7 +93,7 @@ void ButtonDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option
 
     if (index.data().toString().compare("HIDE") == 0)
     {
-        const_cast<ButtonDelegate*>(this)->buttonStates[index] = 0;
+        const_cast<ButtonDelegate*>(this)->buttonStates[index] = {};
         return;
     }
 
@@ -179,17 +108,6 @@ void ButtonDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option
     }
 
     QApplication::style()->drawControl(QStyle::CE_PushButton, &button, painter, 0);
-
-    //Draw 'Combobox' arrow if it is an Scenario Button
-    //    if (!index.parent().isValid())
-    //    {
-    //        QStyleOptionHeader arrow;
-    //        arrow.iconAlignment = Qt::AlignRight;
-    //        arrow.rect = option.rect;
-    //        arrow.rect.setLeft(arrow.rect.left() + arrow.rect.width() * 0.7);
-    //        arrow.state = QStyle::State_DownArrow;
-    //        QApplication::style()->drawPrimitive(QStyle::PE_IndicatorHeaderArrow, &arrow, painter);
-    //    }
 }
 
 bool ButtonDelegate::editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index)
@@ -246,13 +164,4 @@ QSize ButtonDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelI
     }
     return QSize(option.rect.width(), option.rect.height() + size + 6);
     //QItemDelegate::sizeHint(option,index);
-}
-
-void ButtonDelegate::onComboBoxRelease(QString text, const QAbstractItemModel* model, const QString& scenarioName)
-{
-    // find current row of scenario (might have changed due to reordering or insertion)
-    int currentScenarioIndex = ScenarioModel::FindScenarioIndex(model, scenarioName);
-    ARMARX_CHECK_GREATER(currentScenarioIndex, -1);
-    auto index = model->index(currentScenarioIndex, 1);
-    emit comboBoxButtonClicked(currentScenarioIndex, index.column(), index.parent(), text);
-}
+}
\ No newline at end of file
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.h
index d7708b22..4c3f3ac3 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.h
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/buttondelegate.h
@@ -46,7 +46,6 @@ public:
     */
     ButtonDelegate(QWidget* parent = 0);
 
-    virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
     virtual void setEditorData(QWidget* editor, const QModelIndex& index) const;
     virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const;
 
@@ -74,13 +73,10 @@ public:
 
 signals:
     void buttonClicked(int row, int column, QModelIndex parent);
-    void comboBoxButtonClicked(int row, int column, QModelIndex parent, QString text);
 
 protected:
     bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override;
 
-private slots:
-    void onComboBoxRelease(QString text, const QAbstractItemModel* model, const QString& scenarioName);
 
 private:
     std::map<const QModelIndex, QFlags<QStyle::StateFlag>> buttonStates;
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.cpp
deleted file mode 100644
index ddffe8ed..00000000
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#include "comboboxbutton.h"
-#include "scenariomodel.h"
-#include <QMouseEvent>
-#include <QStylePainter>
-#include <ArmarXCore/core/logging/Logging.h>
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
-#include <ArmarXCore/util/ScenarioManagerCommon/parser/StatusManager.h>
-#include <ArmarXGui/gui-plugins/ScenarioManager/gui/scenarioitem.h>
-
-
-ComboBoxButton::ComboBoxButton(const QAbstractItemModel* model, const QString& scenarioName, QWidget* parent) :
-    QComboBox(parent), model(model), buttonPress(false), scenarioName(scenarioName)
-{
-}
-
-ComboBoxButton::~ComboBoxButton()
-{
-}
-
-
-void ComboBoxButton::setIceStatesActive(bool active)
-{
-    if (active)
-    {
-        QObject::connect(this, SIGNAL(currentIndexChanged(QString)), this, SLOT(onIndexChange(QString)));
-    }
-    else
-    {
-        QObject::disconnect(this, SIGNAL(currentIndexChanged(QString)), this, SLOT(onIndexChange(QString)));
-    }
-}
-
-void ComboBoxButton::paintEvent(QPaintEvent* e)
-{
-    if (buttonPress)
-    {
-        QStylePainter painter(this);
-        QStyleOptionComboBox opt;
-        opt.rect = e->rect();
-        opt.currentIcon = itemIcon(currentIndex());
-        opt.currentText = currentText();
-        opt.iconSize = iconSize();
-        opt.state |= QStyle::State_Sunken;
-        painter.drawComplexControl(QStyle::CC_ComboBox, opt);
-        painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
-    }
-    else
-    {
-        QComboBox::paintEvent(e);
-    }
-}
-
-
-void ComboBoxButton::mousePressEvent(QMouseEvent* e)
-{
-    if (e->x() < this->width() - 20)
-    {
-        buttonPress = true;
-    }
-    else
-    {
-        QComboBox::mousePressEvent(e);
-    }
-}
-
-void ComboBoxButton::mouseReleaseEvent(QMouseEvent* e)
-{
-    if (e->x() < this->width() - 20)
-    {
-        emit released(this->currentText(), model, scenarioName);
-    }
-    else
-    {
-        QComboBox::mouseReleaseEvent(e);
-    }
-    buttonPress = false;
-}
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.h
deleted file mode 100644
index 378faa20..00000000
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/comboboxbutton.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef COMBOBOXBUTTON_H
-#define COMBOBOXBUTTON_H
-
-
-#include <QComboBox>
-
-class ComboBoxButton : public QComboBox
-{
-    Q_OBJECT
-
-public:
-    explicit ComboBoxButton(const QAbstractItemModel* model, const QString& scenarioName, QWidget* parent = 0);
-    ~ComboBoxButton();
-    void setIceStatesActive(bool active);
-
-signals:
-    void released(QString, const QAbstractItemModel*, QString);
-
-
-protected:
-    virtual void mouseReleaseEvent(QMouseEvent* e);
-    virtual void mousePressEvent(QMouseEvent* e);
-    virtual void paintEvent(QPaintEvent* e);
-
-
-private:
-    const QAbstractItemModel* model;
-    bool buttonPress;
-    QString scenarioName;
-};
-
-#endif // COMBOBOXBUTTON_H
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.cpp
index cb4ce428..fc2c07ba 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.cpp
@@ -27,7 +27,6 @@
 #include <ArmarXGui/gui-plugins/ScenarioManager/gui/ui_scenariolistview.h>
 #include "scenarioitem.h"
 #include "treeitem.h"
-#include "comboboxbutton.h"
 
 #include <ArmarXCore/core/logging/Logging.h>
 
@@ -69,8 +68,6 @@ ScenarioListView::ScenarioListView(QWidget* parent) :
     QObject::connect(&removeAction, SIGNAL(triggered()),
                      this, SLOT(removeItemTriggered()));
 
-    QObject::connect(&startButtonDelegate, SIGNAL(comboBoxButtonClicked(int, int, QModelIndex, QString)),
-                     this, SLOT(startComboBoxClicked(int, int, QModelIndex, QString)));
     QObject::connect(&startButtonDelegate, SIGNAL(buttonClicked(int, int, QModelIndex)),
                      this, SLOT(startButtonClicked(int, int, QModelIndex)));
 
@@ -105,11 +102,6 @@ void ScenarioListView::on_searchBar_textEdited(const QString& text)
     ui->treeView->expandAll();
 }
 
-void ScenarioListView::startComboBoxClicked(int row, int column, QModelIndex parent, QString text)
-{
-    emit startApplication(row, column, parent);
-}
-
 void ScenarioListView::startButtonClicked(int row, int column, QModelIndex parent)
 {
     emit startApplication(row, column, parent);
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.h
index b3d15c12..ff1195a6 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.h
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/scenariolistview.h
@@ -80,7 +80,6 @@ public slots:
 
 private slots:
     void on_searchBar_textEdited(const QString& text);
-    void startComboBoxClicked(int row, int column, QModelIndex parent, QString text);
     void startButtonClicked(int row, int column, QModelIndex parent);
     void stopButtonClicked(int row, int column, QModelIndex parent);
 
-- 
GitLab