From 94fbbe20f2beb9a0547043651a9c5dc6aa7225cf Mon Sep 17 00:00:00 2001 From: Matthias <github@mpuchner.de> Date: Mon, 8 Feb 2021 17:09:01 +0100 Subject: [PATCH] Simplify action handling; simplify UI by in-place editing of real data items --- GUI/coregui/Models/RealDataModel.cpp | 28 +++++++--- GUI/coregui/Models/RealDataModel.h | 5 +- .../RealDataPropertiesWidget.cpp | 31 +---------- .../RealDataPropertiesWidget.h | 3 -- .../RealDataSelectorActions.cpp | 27 ---------- .../RealDataSelectorActions.h | 2 - .../RealDataSelectorWidget.cpp | 53 ++++++++++++++++++- .../RealDataSelectorWidget.h | 3 ++ 8 files changed, 80 insertions(+), 72 deletions(-) diff --git a/GUI/coregui/Models/RealDataModel.cpp b/GUI/coregui/Models/RealDataModel.cpp index d16f8321cd3..139220d0417 100644 --- a/GUI/coregui/Models/RealDataModel.cpp +++ b/GUI/coregui/Models/RealDataModel.cpp @@ -21,13 +21,6 @@ RealDataModel::RealDataModel(QObject* parent) : SessionModel(SessionXML::RealDat setObjectName(SessionXML::RealDataModelTag); } -// Qt::ItemFlags RealDataModel::flags(const QModelIndex &index) const -//{ -// Qt::ItemFlags result_flags = SessionModel::flags(index); -// result_flags |= Qt::ItemIsEditable; -// return result_flags; -//} - QVector<SessionItem*> RealDataModel::nonXMLData() const { QVector<SessionItem*> result; @@ -41,3 +34,24 @@ QVector<SessionItem*> RealDataModel::nonXMLData() const return result; } + +Qt::ItemFlags RealDataModel::flags(const QModelIndex& index) const +{ + return SessionModel::flags(index) | Qt::ItemIsEditable; +} + +bool RealDataModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (!index.isValid()) + return false; + + if (role == Qt::EditRole) { + SessionItem* item = itemForIndex(index); + if (item) { + item->setItemName(value.toString()); + return true; + } + } + + return SessionModel::setData(index, value, role); +} diff --git a/GUI/coregui/Models/RealDataModel.h b/GUI/coregui/Models/RealDataModel.h index c84a3b3535b..dd26f55623c 100644 --- a/GUI/coregui/Models/RealDataModel.h +++ b/GUI/coregui/Models/RealDataModel.h @@ -24,9 +24,10 @@ class RealDataModel : public SessionModel { public: explicit RealDataModel(QObject* parent = 0); - // Qt::ItemFlags flags(const QModelIndex &index) const; - QVector<SessionItem*> nonXMLData() const override; + virtual QVector<SessionItem*> nonXMLData() const override; + virtual Qt::ItemFlags flags(const QModelIndex& index) const override; + virtual bool setData(const QModelIndex& index, const QVariant& value, int role) override; }; #endif // BORNAGAIN_GUI_COREGUI_MODELS_REALDATAMODEL_H diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp index e0f6fc1d1ab..75b54ab76c4 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp @@ -22,17 +22,9 @@ #include <QLineEdit> #include <QVBoxLayout> -namespace { -const QString instrumentNameTooltip = "Name of real data"; -const QString selectorTooltip = "Select instrument to link with real data"; -} // namespace - RealDataPropertiesWidget::RealDataPropertiesWidget(QWidget* parent) : QWidget(parent) , m_linkManager(new LinkInstrumentManager(this)) - , m_dataNameMapper(new QDataWidgetMapper(this)) - , m_dataNameLabel(new QLabel("Dataset")) - , m_dataNameEdit(new QLineEdit) , m_instrumentLabel(new QLabel("Linked instrument")) , m_instrumentCombo(new QComboBox) , m_currentDataItem(0) @@ -44,14 +36,8 @@ RealDataPropertiesWidget::RealDataPropertiesWidget(QWidget* parent) mainLayout->setMargin(5); mainLayout->setSpacing(2); - m_dataNameLabel->setToolTip(instrumentNameTooltip); - m_dataNameEdit->setToolTip(instrumentNameTooltip); - m_instrumentLabel->setToolTip(selectorTooltip); - m_instrumentCombo->setToolTip(selectorTooltip); + m_instrumentCombo->setToolTip("Select instrument to link with real data"); - mainLayout->addWidget(m_dataNameLabel); - mainLayout->addWidget(m_dataNameEdit); - mainLayout->addSpacing(5); mainLayout->addWidget(m_instrumentLabel); mainLayout->addWidget(m_instrumentCombo); @@ -77,8 +63,6 @@ void RealDataPropertiesWidget::setModels(InstrumentModel* instrumentModel, void RealDataPropertiesWidget::setItem(SessionItem* item) { - m_dataNameMapper->clearMapping(); - if (item == m_currentDataItem) return; @@ -100,13 +84,6 @@ void RealDataPropertiesWidget::setItem(SessionItem* item) m_currentDataItem->mapper()->setOnItemDestroy([this](SessionItem*) { m_currentDataItem = 0; }, this); - // Initialize QLineEdit to edit itemName directly in the model - m_dataNameMapper->setModel(item->model()); - m_dataNameMapper->setRootIndex(item->index()); - m_dataNameMapper->setCurrentModelIndex(item->getItem(SessionItem::P_NAME)->index()); - m_dataNameMapper->addMapping(m_dataNameEdit, 1); - m_dataNameMapper->toFirst(); - // Set combo selector to show linked instrument setComboToIdentifier(item->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString()); } @@ -195,12 +172,8 @@ void RealDataPropertiesWidget::setComboConnected(bool isConnected) void RealDataPropertiesWidget::setPropertiesEnabled(bool enabled) { - m_dataNameLabel->setEnabled(enabled); - m_dataNameEdit->setEnabled(enabled); m_instrumentLabel->setEnabled(enabled); m_instrumentCombo->setEnabled(enabled); - if (enabled == false) { - m_dataNameEdit->clear(); + if (!enabled) m_instrumentCombo->setCurrentIndex(0); - } } diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h index 8806ca88c45..6f5d81384ed 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h @@ -52,9 +52,6 @@ private: void setPropertiesEnabled(bool enabled); LinkInstrumentManager* m_linkManager; - QDataWidgetMapper* m_dataNameMapper; - QLabel* m_dataNameLabel; - QLineEdit* m_dataNameEdit; QLabel* m_instrumentLabel; QComboBox* m_instrumentCombo; QString m_current_id; diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp index bc26fb7d199..2f57d46a657 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp @@ -222,33 +222,6 @@ void RealDataSelectorActions::onRotateDataRequest() QApplication::restoreOverrideCursor(); } -void RealDataSelectorActions::onContextMenuRequest(const QPoint& point, - const QModelIndex& indexAtPoint) -{ - QMenu menu; - menu.setToolTipsVisible(true); - - setAllActionsEnabled(indexAtPoint.isValid()); - - m_import2dDataAction->setEnabled(true); - m_import1dDataAction->setEnabled(true); - - menu.addAction(m_removeDataAction); - menu.addAction(m_rotateDataAction); - menu.addSeparator(); - menu.addAction(m_import2dDataAction); - menu.addAction(m_import1dDataAction); - menu.exec(point); -} - -void RealDataSelectorActions::setAllActionsEnabled(bool value) -{ - m_import2dDataAction->setEnabled(value); - m_import1dDataAction->setEnabled(value); - m_rotateDataAction->setEnabled(value); - m_removeDataAction->setEnabled(value); -} - void RealDataSelectorActions::updateSelection() { if (!m_selectionModel->hasSelection()) { diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.h b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.h index 5ba9fa6bfe8..3a3d7b9a573 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.h +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.h @@ -37,10 +37,8 @@ public slots: void onImport2dDataAction(); void onRemoveDataAction(); void onRotateDataRequest(); - void onContextMenuRequest(const QPoint& point, const QModelIndex& indexAtPoint); private: - void setAllActionsEnabled(bool value); void updateSelection(); void importDataLoop(int ndim); diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.cpp b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.cpp index f7f209c5f79..fd52928aedd 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.cpp @@ -19,6 +19,9 @@ #include "GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.h" #include "GUI/coregui/mainwindow/StyledToolBar.h" #include <QItemSelectionModel> +#include <QLineEdit> +#include <QListView> +#include <QMenu> #include <QSplitter> #include <QVBoxLayout> @@ -27,11 +30,19 @@ RealDataSelectorWidget::RealDataSelectorWidget(QWidget* parent) , m_selectorActions(new RealDataSelectorActions(this)) , m_selectorWidget(new ItemSelectorWidget) , m_propertiesWidget(new RealDataPropertiesWidget) + , m_renameDataAction(new QAction(this)) { setMinimumSize(128, 600); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); setWindowTitle("RealDataSelectorWidget"); + m_renameDataAction->setText("Rename this data"); + m_renameDataAction->setIcon(QIcon()); // #TODO: Icon needed? + m_renameDataAction->setIconText("Rename"); + m_renameDataAction->setToolTip("Rename data"); + connect(m_renameDataAction, &QAction::triggered, this, + &RealDataSelectorWidget::onRenameDataRequest); + QToolBar* toolBar = new StyledToolBar(this); toolBar->setMinimumSize(toolBar->minimumHeight(), toolBar->minimumHeight()); toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); @@ -54,8 +65,8 @@ RealDataSelectorWidget::RealDataSelectorWidget(QWidget* parent) mainLayout->addWidget(splitter); setLayout(mainLayout); - connect(m_selectorWidget, &ItemSelectorWidget::contextMenuRequest, m_selectorActions, - &RealDataSelectorActions::onContextMenuRequest); + connect(m_selectorWidget, &ItemSelectorWidget::contextMenuRequest, this, + &RealDataSelectorWidget::onContextMenuRequest); connect(m_selectorWidget, &ItemSelectorWidget::selectionChanged, this, &RealDataSelectorWidget::onSelectionChanged); @@ -86,3 +97,41 @@ void RealDataSelectorWidget::onSelectionChanged(SessionItem* item) m_propertiesWidget->setItem(item); emit selectionChanged(item); } + +void RealDataSelectorWidget::onContextMenuRequest(const QPoint& point, + const QModelIndex& indexAtPoint) +{ + + const auto setAllActionsEnabled = [this](bool value) { + m_selectorActions->m_import2dDataAction->setEnabled(value); + m_selectorActions->m_import1dDataAction->setEnabled(value); + m_selectorActions->m_rotateDataAction->setEnabled(value); + m_selectorActions->m_removeDataAction->setEnabled(value); + m_renameDataAction->setEnabled(value); + }; + + QMenu menu; + menu.setToolTipsVisible(true); + + setAllActionsEnabled(indexAtPoint.isValid()); + + m_selectorActions->m_import2dDataAction->setEnabled(true); + m_selectorActions->m_import1dDataAction->setEnabled(true); + + menu.addAction(m_renameDataAction); + menu.addAction(m_selectorActions->m_removeDataAction); + menu.addAction(m_selectorActions->m_rotateDataAction); + menu.addSeparator(); + menu.addAction(m_selectorActions->m_import2dDataAction); + menu.addAction(m_selectorActions->m_import1dDataAction); + menu.exec(point); +} + +void RealDataSelectorWidget::onRenameDataRequest() +{ + QModelIndex currentIndex = m_selectorWidget->selectionModel()->currentIndex(); + if (!currentIndex.isValid()) + return; + + m_selectorWidget->listView()->edit(currentIndex); +} diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.h b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.h index 743fff36460..8a1b5c5672f 100644 --- a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.h +++ b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorWidget.h @@ -44,11 +44,14 @@ signals: public slots: void onSelectionChanged(SessionItem* item); + void onContextMenuRequest(const QPoint& point, const QModelIndex& indexAtPoint); + void onRenameDataRequest(); private: RealDataSelectorActions* m_selectorActions; ItemSelectorWidget* m_selectorWidget; RealDataPropertiesWidget* m_propertiesWidget; + QAction* m_renameDataAction; }; #endif // BORNAGAIN_GUI_COREGUI_VIEWS_IMPORTDATAWIDGETS_REALDATASELECTORWIDGET_H -- GitLab