diff --git a/Doc/graph/mask-classes.gv b/Doc/graph/mask-classes.gv index 6f6ff7498f7d79d42423728c84c7ac83ca451352..811e3435a4d93412b10f2760b34d3d8b712c4737 100644 --- a/Doc/graph/mask-classes.gv +++ b/Doc/graph/mask-classes.gv @@ -14,9 +14,9 @@ MaskEditingFrame[label="MaskEditingFrame\n< DataAccessWidget\n< QWidget" style=f MaskEditingFrame->MaskEditorActions; MaskEditingFrame->MaskPanel; MaskEditingFrame->MaskEditorCanvas; -MaskEditingFrame->MaskToolbox[style=dashed color=blue] +MaskEditingFrame->MaskToolbar[style=dashed color=blue] -MaskToolbox[label="MaskToolbox\n< QToolBar\n< QWidget" style=filled fillcolor=orchid] +MaskToolbar[label="MaskToolbar\n< QToolBar\n< QWidget" style=filled fillcolor=orchid] MaskEditorActions[label="MaskEditorActions\n< QObject" style=filled fillcolor=beige]; MaskEditorActions->MaskeditorListmodel; @@ -65,7 +65,7 @@ MaskGraphicsProxy[label="MaskGraphicsProxy\n< QGraphicsProxyWidget\n... < QGraph ColorMap[label="ColorMap\n< ScientificPlot\n< QWidget" style=filled fillcolor=orchid]; ColorMap->Data2DItem; -MaskToolbox->MaskEditorActions[style=dotted color=magenta]; +MaskToolbar->MaskEditorActions[style=dotted color=magenta]; Data2DItem[label="Data2DItem\n< DataItem\n< QObject" style=filled fillcolor=beige]; Data2DItem->MaskList; diff --git a/Doc/graph/projn-classes.gv b/Doc/graph/projn-classes.gv index 8483b04159452524c04babc5ea4f9093aea5d114..833142edd257444744a3ca27b3ce643239f026eb 100644 --- a/Doc/graph/projn-classes.gv +++ b/Doc/graph/projn-classes.gv @@ -7,7 +7,7 @@ digraph maskClasses Plot2DWithProjectionFrame->DataAccessWidget[arrowhead=onormal color=chocolate4]; Plot2DWithProjectionFrame->ProjectionActions; - Plot2DWithProjectionFrame->ProjectionsToolpanel; + Plot2DWithProjectionFrame->ProjectionToolbar; Plot2DWithProjectionFrame->ProjectionsEditorCanvas; Plot2DWithProjectionFrame->ProjectionsWidget; Plot2DWithProjectionFrame->Scale2DEditor; @@ -15,7 +15,7 @@ digraph maskClasses ProjectionActions->MaskeditorListmodel; ProjectionActions->Data2DItem; - ProjectionsToolpanel->ProjectionActions; + ProjectionToolbar->ProjectionActions; ProjectionsEditorCanvas->MaskGraphicsScene; ProjectionsEditorCanvas->MaskGraphicsView; diff --git a/GUI/View/Canvas/MaskEditorCanvas.cpp b/GUI/View/Canvas/MaskEditorCanvas.cpp index 6ab228199c8645b04f6c730e7855445e6b68a179..a96619cad653a80a3ab3f21681df28f5110a6daa 100644 --- a/GUI/View/Canvas/MaskEditorCanvas.cpp +++ b/GUI/View/Canvas/MaskEditorCanvas.cpp @@ -25,12 +25,11 @@ #include "GUI/View/Scene/MaskGraphicsView.h" #include <QVBoxLayout> -MaskEditorCanvas::MaskEditorCanvas(QWidget* parent) - : QWidget(parent) - , m_scene(new MaskGraphicsScene) +MaskEditorCanvas::MaskEditorCanvas() + : m_scene(new MaskGraphicsScene) , m_view(new MaskGraphicsView(m_scene)) - , m_data2DItem(nullptr) , m_statusLabel(new PlotStatusLabel(nullptr, this)) + , m_data2DItem(nullptr) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -53,9 +52,10 @@ void MaskEditorCanvas::updateMaskCanvas(Data2DItem* data2DItem, QItemSelectionMo { m_data2DItem = data2DItem; - repaintScene(); m_scene->associateItems(data2DItem, data2DItem->getOrCreateMaskModel(), selModel); + repaintScene(); + m_statusLabel->addPlot(m_scene->colorMap()); } diff --git a/GUI/View/Canvas/MaskEditorCanvas.h b/GUI/View/Canvas/MaskEditorCanvas.h index 5b8a385749b5f92a2d836a0aca3a14139241ac7b..29230a109c97775a01f0035e42cedf441306133b 100644 --- a/GUI/View/Canvas/MaskEditorCanvas.h +++ b/GUI/View/Canvas/MaskEditorCanvas.h @@ -17,7 +17,6 @@ #include "GUI/View/Scene/MaskFlags.h" #include <QItemSelectionModel> -#include <QModelIndex> #include <QWidget> #include <memory> @@ -32,11 +31,10 @@ class PlotStatusLabel; class MaskEditorCanvas : public QWidget { Q_OBJECT public: - MaskEditorCanvas(QWidget* parent = nullptr); + MaskEditorCanvas(); ~MaskEditorCanvas(); void updateMaskCanvas(Data2DItem* data2DItem, QItemSelectionModel* selModel); - void resetMaskCanvas(); MaskGraphicsScene* getScene() { return m_scene; } @@ -46,9 +44,9 @@ signals: void deleteSelectedRequest(); public slots: - void onPresentationChange(bool pixelized); - void onSavePlotRequest(); void onResetViewRequest(); + void onSavePlotRequest(); + void onPresentationChange(bool pixelized); private: void repaintScene(); @@ -56,8 +54,8 @@ private: MaskGraphicsScene* m_scene; MaskGraphicsView* m_view; - Data2DItem* m_data2DItem; PlotStatusLabel* m_statusLabel; + Data2DItem* m_data2DItem; std::unique_ptr<Datafield> m_backup_data; bool m_backup_interpolated = false; }; diff --git a/GUI/View/Canvas/ProjectionsEditorCanvas.cpp b/GUI/View/Canvas/ProjectionsEditorCanvas.cpp index 7bfb552e4e2f58bdf642d5f6d6cce2d24e72c937..664f8b9cee70e24d876074cf908a41e6907abff4 100644 --- a/GUI/View/Canvas/ProjectionsEditorCanvas.cpp +++ b/GUI/View/Canvas/ProjectionsEditorCanvas.cpp @@ -26,9 +26,8 @@ #include <QItemSelectionModel> #include <QVBoxLayout> -ProjectionsEditorCanvas::ProjectionsEditorCanvas(QWidget* parent) - : QWidget(parent) - , m_scene(new MaskGraphicsScene) +ProjectionsEditorCanvas::ProjectionsEditorCanvas() + : m_scene(new MaskGraphicsScene) , m_view(new MaskGraphicsView(m_scene)) , m_statusLabel(new PlotStatusLabel(nullptr, this)) , m_currentActivity(MaskFlags::HORIZONTAL_LINE_MODE) @@ -148,7 +147,7 @@ void ProjectionsEditorCanvas::onResetViewRequest() gDoc->setModified(); } -void ProjectionsEditorCanvas::onActivityChanged(MaskFlags::MaskMode mask_mode) +void ProjectionsEditorCanvas::setProjectionsCanvasMode(MaskFlags::MaskMode mask_mode) { m_currentActivity = mask_mode; m_scene->onActivityChanged(mask_mode); diff --git a/GUI/View/Canvas/ProjectionsEditorCanvas.h b/GUI/View/Canvas/ProjectionsEditorCanvas.h index cc42a215777837a896153ff82501ecafee5966b4..85e1b96cbc1c3eff4f76c4e26a3fc468fca916d1 100644 --- a/GUI/View/Canvas/ProjectionsEditorCanvas.h +++ b/GUI/View/Canvas/ProjectionsEditorCanvas.h @@ -35,24 +35,26 @@ class PlotStatusLabel; class ProjectionsEditorCanvas : public QWidget { Q_OBJECT public: - ProjectionsEditorCanvas(QWidget* parent = nullptr); - virtual ~ProjectionsEditorCanvas(); + ProjectionsEditorCanvas(); + ~ProjectionsEditorCanvas(); void updateProjsCanvas(Data2DItem* data2DItem); void resetProjsCanvas(); signals: - void changeProjectionsTabRequest(MaskFlags::MaskMode); void changeActivityRequest(MaskFlags::MaskMode); void deleteSelectedRequest(); + void changeProjectionsTabRequest(MaskFlags::MaskMode); void marginsChanged(double left, double right); public slots: + void onResetViewRequest(); + void setProjectionsCanvasMode(MaskFlags::MaskMode mask_mode); + +private slots: void onEnteringColorMap(); void onLeavingColorMap(); void onPositionChanged(double x, double y); - void onResetViewRequest(); - void onActivityChanged(MaskFlags::MaskMode mask_mode); private: void onLineItemMoved(LineItem* sender); @@ -61,12 +63,10 @@ private: MaskGraphicsScene* m_scene; MaskGraphicsView* m_view; - ColorMap* m_colorMap; PlotStatusLabel* m_statusLabel; - - std::unique_ptr<LineItem> m_liveProjection; //!< temporary, matching mouse move Data2DItem* m_data2DItem; - + ColorMap* m_colorMap; + std::unique_ptr<LineItem> m_liveProjection; //!< temporary, matching mouse move MaskFlags::MaskMode m_currentActivity; bool m_block_update = false; }; diff --git a/GUI/View/Frame/MaskEditingFrame.cpp b/GUI/View/Frame/MaskEditingFrame.cpp index 045b9191b5abe918128ace4140b00c8033b90430..233b7e3d38f3ecb5b1d286b29cc9cfda01b5a528 100644 --- a/GUI/View/Frame/MaskEditingFrame.cpp +++ b/GUI/View/Frame/MaskEditingFrame.cpp @@ -13,14 +13,14 @@ // ************************************************************************************************ #include "GUI/View/Frame/MaskEditingFrame.h" +#include "Base/Util/Assert.h" #include "GUI/Model/Data/Data2DItem.h" -#include "GUI/Model/Mask/MaskItems.h" #include "GUI/Model/Mask/MaskeditorListmodel.h" #include "GUI/View/Canvas/MaskEditorActions.h" #include "GUI/View/Canvas/MaskEditorCanvas.h" -#include "GUI/View/Canvas/MaskToolbox.h" #include "GUI/View/Scene/MaskGraphicsScene.h" #include "GUI/View/Setup/MaskPanel.h" +#include "GUI/View/Setup/MaskToolbar.h" #include <QSplitter> #include <QVBoxLayout> @@ -30,8 +30,6 @@ MaskEditingFrame::MaskEditingFrame(QWidget* parent) , m_panel(new MaskPanel) , m_canvas(new MaskEditorCanvas) { - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - auto* layout = new QHBoxLayout; setLayout(layout); layout->setContentsMargins(0, 0, 0, 0); @@ -39,14 +37,13 @@ MaskEditingFrame::MaskEditingFrame(QWidget* parent) auto* splitter = new QSplitter; layout->addWidget(splitter); + splitter->setOrientation(Qt::Horizontal); splitter->addWidget(m_canvas); splitter->addWidget(m_panel); splitter->setCollapsible(1, true); - auto* toolbox = new MaskToolbox(m_actions); - layout->addWidget(toolbox); - toolbox->setOrientation(Qt::Vertical); - toolbox->setStyleSheet("QToolBar{border-left:1px solid rgb(180,180,180);}"); + auto* toolbar = new MaskToolbar(m_actions); + layout->addWidget(toolbar); m_panel->setPanelHidden(true); @@ -55,24 +52,24 @@ MaskEditingFrame::MaskEditingFrame(QWidget* parent) connect(m_actions, &MaskEditorActions::resetViewRequest, m_canvas, &MaskEditorCanvas::onResetViewRequest); - connect(m_actions, &MaskEditorActions::propertyPanelRequest, this, - &MaskEditingFrame::onPropertyPanelRequest); + connect(m_actions, &MaskEditorActions::propertyPanelRequest, + [this] { m_panel->setPanelHidden(!m_panel->isHidden()); }); connect(m_actions, &MaskEditorActions::savePlotRequest, m_canvas, &MaskEditorCanvas::onSavePlotRequest); - connect(toolbox, &MaskToolbox::activityChanged, m_canvas->getScene(), + connect(toolbar, &MaskToolbar::activityChanged, m_canvas->getScene(), &MaskGraphicsScene::onActivityChanged); - connect(toolbox, &MaskToolbox::maskValueChanged, m_canvas->getScene(), + connect(toolbar, &MaskToolbar::maskValueChanged, m_canvas->getScene(), &MaskGraphicsScene::onMaskValueChanged); - connect(toolbox, &MaskToolbox::presentationChange, m_canvas, + connect(toolbar, &MaskToolbar::presentationChange, m_canvas, &MaskEditorCanvas::onPresentationChange); // space bar push (request for zoom mode) - connect(m_canvas, &MaskEditorCanvas::changeActivityRequest, toolbox, - &MaskToolbox::onChangeActivityRequest); + connect(m_canvas, &MaskEditorCanvas::changeActivityRequest, toolbar, + &MaskToolbar::onChangeActivityRequest); connect(m_canvas, &MaskEditorCanvas::deleteSelectedRequest, m_actions, &MaskEditorActions::onDeleteMaskAction); @@ -87,13 +84,7 @@ MaskEditingFrame::MaskEditingFrame(QWidget* parent) void MaskEditingFrame::setJobOrDatafileItem(QObject* item) { setBaseItem(item); - updateMaskFrame(); -} - -//! shows/hides right panel with properties -void MaskEditingFrame::onPropertyPanelRequest() -{ - m_panel->setPanelHidden(!m_panel->isHidden()); + updateFrame(); } //! Returns list of actions intended for styled toolbox (on the top). @@ -103,19 +94,7 @@ QList<QAction*> MaskEditingFrame::actionList() return m_actions->topToolboxActions(); } -void MaskEditingFrame::showEvent(QShowEvent*) -{ - if (currentData2DItem()) - updateMaskFrame(); -} - -void MaskEditingFrame::hideEvent(QHideEvent*) -{ - m_panel->resetMaskPanel(); - m_canvas->resetMaskCanvas(); -} - -void MaskEditingFrame::updateMaskFrame() +void MaskEditingFrame::updateFrame() { ASSERT(currentData2DItem()); @@ -130,3 +109,15 @@ void MaskEditingFrame::updateMaskFrame() update(); } + +void MaskEditingFrame::showEvent(QShowEvent*) +{ + if (currentData2DItem()) + updateFrame(); +} + +void MaskEditingFrame::hideEvent(QHideEvent*) +{ + m_panel->resetMaskPanel(); + m_canvas->resetMaskCanvas(); +} diff --git a/GUI/View/Frame/MaskEditingFrame.h b/GUI/View/Frame/MaskEditingFrame.h index 89040299f12c5f98183dcae072e9990aebdc9ce9..b4112de9047e524a7dad56c19b8b02b6f5bfa9f8 100644 --- a/GUI/View/Frame/MaskEditingFrame.h +++ b/GUI/View/Frame/MaskEditingFrame.h @@ -33,8 +33,7 @@ public: QList<QAction*> actionList() override; private: - void updateMaskFrame(); - void onPropertyPanelRequest(); + void updateFrame(); void showEvent(QShowEvent*) override; void hideEvent(QHideEvent*) override; diff --git a/GUI/View/Frame/Plot2DWithProjectionFrame.cpp b/GUI/View/Frame/Plot2DWithProjectionFrame.cpp index e2d3cc62a315c0b761eea1aead0db5f79a04bf9c..75898f32c22eb6035730005ac7bc931b469e385b 100644 --- a/GUI/View/Frame/Plot2DWithProjectionFrame.cpp +++ b/GUI/View/Frame/Plot2DWithProjectionFrame.cpp @@ -15,19 +15,17 @@ #include "GUI/View/Frame/Plot2DWithProjectionFrame.h" #include "Base/Util/Assert.h" #include "GUI/Model/Data/Data2DItem.h" -#include "GUI/Model/Mask/ProjectionList.h" #include "GUI/View/Canvas/ProjectionsEditorCanvas.h" #include "GUI/View/Canvas/ProjectionsWidget.h" #include "GUI/View/Setup/ProjectionActions.h" -#include "GUI/View/Setup/ProjectionsToolpanel.h" +#include "GUI/View/Setup/ProjectionToolbar.h" #include "GUI/View/Setup/Scale2DEditor.h" -#include <QBoxLayout> +#include <QHBoxLayout> #include <QSplitter> Plot2DWithProjectionFrame::Plot2DWithProjectionFrame(QWidget* parent) : DataAccessWidget(parent) - , m_editorActions(new ProjectionActions(this)) - , m_toolbar(new ProjectionsToolpanel(m_editorActions)) + , m_actions(new ProjectionActions(this)) , m_projectionsCanvas(new ProjectionsEditorCanvas) , m_projectionsWidget(new ProjectionsWidget) , m_scaleEditor(new Scale2DEditor(this)) @@ -47,21 +45,55 @@ Plot2DWithProjectionFrame::Plot2DWithProjectionFrame(QWidget* parent) m_scaleEditor->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); m_scaleEditor->setHidden(true); - m_toolbar->setOrientation(Qt::Vertical); - m_toolbar->setStyleSheet("QToolBar{border-left:1px solid rgb(180,180,180);}"); - layout->addWidget(m_toolbar); + auto* toolbar = new ProjectionToolbar(m_actions); + layout->addWidget(toolbar); - setup_connections(); + //... Connections + + connect(m_actions, &ProjectionActions::resetViewRequest, m_projectionsCanvas, + &ProjectionsEditorCanvas::onResetViewRequest); + + connect(m_actions, &ProjectionActions::propertyPanelRequest, + [this] { m_scaleEditor->setHidden(!m_scaleEditor->isHidden()); }); + + connect(toolbar, &ProjectionToolbar::activityChanged, m_projectionsCanvas, + &ProjectionsEditorCanvas::setProjectionsCanvasMode); + + connect(toolbar, &ProjectionToolbar::activityChanged, m_projectionsWidget, + &ProjectionsWidget::onActivityChanged); + + connect(m_projectionsWidget, &ProjectionsWidget::changeActivityRequest, toolbar, + &ProjectionToolbar::onProjectionTabChange); + + connect(m_projectionsCanvas, &ProjectionsEditorCanvas::deleteSelectedRequest, m_actions, + &ProjectionActions::onDeleteAction); + + connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeProjectionsTabRequest, + m_projectionsWidget, &ProjectionsWidget::onActivityChanged); + + // space bar push (request for zoom mode) + connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeActivityRequest, toolbar, + &ProjectionToolbar::onChangeActivityRequest); + + connect(m_projectionsCanvas, &ProjectionsEditorCanvas::marginsChanged, m_projectionsWidget, + &ProjectionsWidget::onMarginsChanged); + + toolbar->onChangeActivityRequest(MaskFlags::HORIZONTAL_LINE_MODE); } void Plot2DWithProjectionFrame::setJobOrDatafileItem(QObject* item) { setBaseItem(item); m_scaleEditor->setJobOrDatafileItem(item); - updateProjsFrame(); + updateFrame(); } -void Plot2DWithProjectionFrame::updateProjsFrame() +QList<QAction*> Plot2DWithProjectionFrame::actionList() +{ + return m_actions->topToolboxActions(); +} + +void Plot2DWithProjectionFrame::updateFrame() { ASSERT(currentData2DItem()); @@ -72,13 +104,13 @@ void Plot2DWithProjectionFrame::updateProjsFrame() m_projectionsCanvas->updateProjsCanvas(currentData2DItem()); m_projectionsWidget->setData2DItem(currentData2DItem()); - m_editorActions->updateProjsActions(currentData2DItem()); + m_actions->updateProjsActions(currentData2DItem()); } void Plot2DWithProjectionFrame::showEvent(QShowEvent*) { if (currentData2DItem()) - updateProjsFrame(); + updateFrame(); } void Plot2DWithProjectionFrame::hideEvent(QHideEvent*) @@ -87,49 +119,3 @@ void Plot2DWithProjectionFrame::hideEvent(QHideEvent*) m_projectionsWidget->disconnectItem(); m_projectionsWidget->setData2DItem(nullptr); } - -QList<QAction*> Plot2DWithProjectionFrame::actionList() -{ - return m_editorActions->topToolboxActions(); -} - -void Plot2DWithProjectionFrame::setup_connections() -{ - // tool panel request is propagated from editorActions to this MaskEditor - connect(m_editorActions, &ProjectionActions::resetViewRequest, m_projectionsCanvas, - &ProjectionsEditorCanvas::onResetViewRequest, Qt::UniqueConnection); - - // tool panel request is propagated from editorActions to this MaskEditor - connect(m_editorActions, &ProjectionActions::propertyPanelRequest, - [this] { m_scaleEditor->setHidden(!m_scaleEditor->isHidden()); }); - - // selection/drawing activity is propagated from Toolbar to graphics scene - connect(m_toolbar, &ProjectionsToolpanel::activityChanged, m_projectionsCanvas, - &ProjectionsEditorCanvas::onActivityChanged, Qt::UniqueConnection); - - // selection/drawing activity is propagated from Toolbar to Projections Widget - connect(m_toolbar, &ProjectionsToolpanel::activityChanged, m_projectionsWidget, - &ProjectionsWidget::onActivityChanged, Qt::UniqueConnection); - - // click on projections tab is propagated to tool bar - connect(m_projectionsWidget, &ProjectionsWidget::changeActivityRequest, m_toolbar, - &ProjectionsToolpanel::onProjectionTabChange, Qt::UniqueConnection); - - // Delete request is propagated from canvas to actions - connect(m_projectionsCanvas, &ProjectionsEditorCanvas::deleteSelectedRequest, m_editorActions, - &ProjectionActions::onDeleteAction, Qt::UniqueConnection); - - // moving projection automatically switches projections tab - connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeProjectionsTabRequest, - m_projectionsWidget, &ProjectionsWidget::onActivityChanged, Qt::UniqueConnection); - - // space bar push (request for zoom mode) is propagated from graphics view to Toolbar - connect(m_projectionsCanvas, &ProjectionsEditorCanvas::changeActivityRequest, m_toolbar, - &ProjectionsToolpanel::onChangeActivityRequest, Qt::UniqueConnection); - - // ColorMap margins changed, canvas -> projection widget - connect(m_projectionsCanvas, &ProjectionsEditorCanvas::marginsChanged, m_projectionsWidget, - &ProjectionsWidget::onMarginsChanged, Qt::UniqueConnection); - - m_toolbar->onChangeActivityRequest(MaskFlags::HORIZONTAL_LINE_MODE); -} diff --git a/GUI/View/Frame/Plot2DWithProjectionFrame.h b/GUI/View/Frame/Plot2DWithProjectionFrame.h index dd67b51fc14a4b986bcffa646444e5dda9f5c63e..f037e074de702cb4141dbd104dbb7cb4f34430ad 100644 --- a/GUI/View/Frame/Plot2DWithProjectionFrame.h +++ b/GUI/View/Frame/Plot2DWithProjectionFrame.h @@ -19,7 +19,6 @@ class ProjectionActions; class ProjectionsEditorCanvas; -class ProjectionsToolpanel; class ProjectionsWidget; class Scale2DEditor; @@ -35,13 +34,11 @@ public: QList<QAction*> actionList() override; private: - void updateProjsFrame(); + void updateFrame(); void showEvent(QShowEvent*) override; void hideEvent(QHideEvent*) override; - void setup_connections(); - ProjectionActions* m_editorActions; - ProjectionsToolpanel* m_toolbar; //! main tool bar with buttons at the right + ProjectionActions* m_actions; ProjectionsEditorCanvas* m_projectionsCanvas; //! canvas with color map at the top ProjectionsWidget* m_projectionsWidget; //! bottom widget to draw projections plot Scale2DEditor* m_scaleEditor; //! panel at the right with properties diff --git a/GUI/View/Scene/MaskGraphicsProxy.cpp b/GUI/View/Scene/MaskGraphicsProxy.cpp index b39b124e5e0bdbee663b5946852947a188a19780..e00d3053e9dc0323e9570c1ec738a08bf27bef6d 100644 --- a/GUI/View/Scene/MaskGraphicsProxy.cpp +++ b/GUI/View/Scene/MaskGraphicsProxy.cpp @@ -16,9 +16,7 @@ #include <QGraphicsSceneMouseEvent> MaskGraphicsProxy::MaskGraphicsProxy() - : m_zooming(false) { - resize(1200, 1000); setZooming(true); } diff --git a/GUI/View/Canvas/MaskToolbox.cpp b/GUI/View/Setup/MaskToolbar.cpp similarity index 92% rename from GUI/View/Canvas/MaskToolbox.cpp rename to GUI/View/Setup/MaskToolbar.cpp index c8f2dd39380cce3f950a2adb08c23d4f4dfb8ff6..9e1f0ec32a8e63a66d5bda31b682cd980e3383bd 100644 --- a/GUI/View/Canvas/MaskToolbox.cpp +++ b/GUI/View/Setup/MaskToolbar.cpp @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/Canvas/MaskToolbox.cpp -//! @brief Implements class MaskToolbox. +//! @file GUI/View/Setup/MaskToolbar.cpp +//! @brief Implements class MaskToolbar. //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -12,7 +12,7 @@ // // ************************************************************************************************ -#include "GUI/View/Canvas/MaskToolbox.h" +#include "GUI/View/Setup/MaskToolbar.h" #include "Base/Util/Assert.h" #include "GUI/View/Canvas/MaskEditorActions.h" #include "GUI/View/Tool/mainwindow_constants.h" @@ -22,12 +22,12 @@ #include <QToolButton> #include <QVariant> -MaskToolbox::MaskToolbox(MaskEditorActions* actions, QWidget* parent) - : QToolBar(parent) - , m_activityButtonGroup(new QButtonGroup(this)) +MaskToolbar::MaskToolbar(MaskEditorActions* actions) + : m_activityButtonGroup(new QButtonGroup(this)) { + setOrientation(Qt::Vertical); + setStyleSheet("border-left:1px solid rgb(180,180,180)"); setIconSize(QSize(GUI::Style::toolbar_icon_size, GUI::Style::toolbar_icon_size)); - setProperty("_q_custom_style_disabled", QVariant(true)); //... Zoom / selection mode @@ -168,25 +168,25 @@ MaskToolbox::MaskToolbox(MaskEditorActions* actions, QWidget* parent) add_separator(); } -void MaskToolbox::onChangeActivityRequest(MaskFlags::MaskMode mask_mode) +void MaskToolbar::onChangeActivityRequest(MaskFlags::MaskMode mask_mode) { setCurrentActivity(mask_mode); emit activityChanged(currentActivity()); } -void MaskToolbox::add_separator() +void MaskToolbar::add_separator() { addWidget(new QLabel(" ")); addSeparator(); addWidget(new QLabel(" ")); } -MaskFlags::MaskMode MaskToolbox::currentActivity() const +MaskFlags::MaskMode MaskToolbar::currentActivity() const { return MaskFlags::EMaskMode(m_activityButtonGroup->checkedId()); } -void MaskToolbox::setCurrentActivity(MaskFlags::MaskMode mask_mode) +void MaskToolbar::setCurrentActivity(MaskFlags::MaskMode mask_mode) { m_activityButtonGroup->button(mask_mode)->setChecked(true); } diff --git a/GUI/View/Canvas/MaskToolbox.h b/GUI/View/Setup/MaskToolbar.h similarity index 76% rename from GUI/View/Canvas/MaskToolbox.h rename to GUI/View/Setup/MaskToolbar.h index 9b586666bfbe69a4b1446238ff8afe38f6b9aa6f..78d092809f84a9300aa8bc0a599f99af4f6360c8 100644 --- a/GUI/View/Canvas/MaskToolbox.h +++ b/GUI/View/Setup/MaskToolbar.h @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/Canvas/MaskToolbox.h -//! @brief Defines class MaskToolbox. +//! @file GUI/View/Setup/MaskToolbar.h +//! @brief Defines class MaskToolbar. //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -12,8 +12,8 @@ // // ************************************************************************************************ -#ifndef BORNAGAIN_GUI_VIEW_CANVAS_MASKTOOLBOX_H -#define BORNAGAIN_GUI_VIEW_CANVAS_MASKTOOLBOX_H +#ifndef BORNAGAIN_GUI_VIEW_SETUP_MASKTOOLBAR_H +#define BORNAGAIN_GUI_VIEW_SETUP_MASKTOOLBAR_H #include "GUI/View/Scene/MaskFlags.h" #include <QButtonGroup> @@ -23,10 +23,10 @@ class MaskEditorActions; //! Iconic representation of mask editing tools. -class MaskToolbox : public QToolBar { +class MaskToolbar : public QToolBar { Q_OBJECT public: - MaskToolbox(MaskEditorActions* actions, QWidget* parent = nullptr); + MaskToolbar(MaskEditorActions* actions); signals: void activityChanged(MaskFlags::MaskMode); @@ -45,4 +45,4 @@ private: QButtonGroup* m_activityButtonGroup; }; -#endif // BORNAGAIN_GUI_VIEW_CANVAS_MASKTOOLBOX_H +#endif // BORNAGAIN_GUI_VIEW_SETUP_MASKTOOLBAR_H diff --git a/GUI/View/Setup/ProjectionsToolpanel.cpp b/GUI/View/Setup/ProjectionToolbar.cpp similarity index 64% rename from GUI/View/Setup/ProjectionsToolpanel.cpp rename to GUI/View/Setup/ProjectionToolbar.cpp index 5a4a62b5be7bad730ac6c5392b8419a627641176..c4abf2f4bd5858923343a0638534162199af223a 100644 --- a/GUI/View/Setup/ProjectionsToolpanel.cpp +++ b/GUI/View/Setup/ProjectionToolbar.cpp @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/Setup/ProjectionsToolpanel.cpp -//! @brief Implements class ProjectionsToolpanel. +//! @file GUI/View/Setup/ProjectionToolbar.cpp +//! @brief Implements class ProjectionToolbar. //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -12,73 +12,33 @@ // // ************************************************************************************************ -#include "GUI/View/Setup/ProjectionsToolpanel.h" +#include "GUI/View/Setup/ProjectionToolbar.h" #include "GUI/View/Setup/ProjectionActions.h" #include "GUI/View/Tool/mainwindow_constants.h" #include <QLabel> #include <QToolButton> -namespace { - -const QString pan_zoom_tooltip = "Pan/zoom mode (space)\n" - "Drag axes with the mouse, use mouse wheel to zoom in/out"; - -const QString reset_view_tooltip = "Reset view\nx,y,z axes range will be set to default"; - -const QString selection_mode_tooltip = - "Selection mode\nYou can select existing projections and move them around"; - -const QString horizontal_mode_tooltip = - "Horizontal projections mode\nCreate projection along x-axis by clicking on color map"; - -const QString vertical_mode_tooltip = - "Vertical projections mode\nCreate projection along y-axis by clicking on color map"; - -} // namespace - -ProjectionsToolpanel::ProjectionsToolpanel(ProjectionActions* editorActions, QWidget* parent) - : QToolBar(parent) - , m_editorActions(editorActions) +ProjectionToolbar::ProjectionToolbar(ProjectionActions* editorActions) + : m_editorActions(editorActions) , m_activityButtonGroup(new QButtonGroup(this)) { + setOrientation(Qt::Vertical); + setStyleSheet("border-left:1px solid rgb(180,180,180);"); setIconSize(QSize(GUI::Style::toolbar_icon_size, GUI::Style::toolbar_icon_size)); - setProperty("_q_custom_style_disabled", QVariant(true)); - - setup_selection_group(); - setup_shapes_group(); - setup_extratools_group(); - - connect(m_activityButtonGroup, &QButtonGroup::idClicked, - [this] { emit activityChanged(currentActivity()); }); -} -void ProjectionsToolpanel::onChangeActivityRequest(MaskFlags::MaskMode mask_mode) -{ - setCurrentActivity(mask_mode); - emit activityChanged(currentActivity()); -} - -//! Change activity only if current activity is one of drawing mode (horizontal, vertical -//! projections drawing). -void ProjectionsToolpanel::onProjectionTabChange(MaskFlags::MaskMode mask_mode) -{ - if (currentActivity() == MaskFlags::HORIZONTAL_LINE_MODE - || currentActivity() == MaskFlags::VERTICAL_LINE_MODE) - onChangeActivityRequest(mask_mode); -} + //... Selection group -void ProjectionsToolpanel::setup_selection_group() -{ auto* panButton = new QToolButton(this); panButton->setIcon(QIcon(":/images/hand-right.svg")); - panButton->setToolTip(pan_zoom_tooltip); + panButton->setToolTip("Pan/zoom mode (space)\n" + "Drag axes with the mouse, use mouse wheel to zoom in/out"); panButton->setCheckable(true); panButton->setChecked(true); addWidget(panButton); auto* resetViewButton = new QToolButton(this); resetViewButton->setIcon(QIcon(":/images/camera-metering-center.svg")); - resetViewButton->setToolTip(reset_view_tooltip); + resetViewButton->setToolTip("Reset view\nx,y,z axes range will be set to default"); addWidget(resetViewButton); connect(resetViewButton, &QToolButton::clicked, m_editorActions, &ProjectionActions::resetViewRequest); @@ -87,36 +47,40 @@ void ProjectionsToolpanel::setup_selection_group() auto* selectionButton = new QToolButton(this); selectionButton->setIcon(QIcon(":/images/maskeditor_arrow.svg")); - selectionButton->setToolTip(selection_mode_tooltip); + selectionButton->setToolTip( + "Selection mode\nYou can select existing projections and move them around"); selectionButton->setCheckable(true); addWidget(selectionButton); m_activityButtonGroup->addButton(panButton, MaskFlags::PAN_ZOOM_MODE); m_activityButtonGroup->addButton(selectionButton, MaskFlags::SELECTION_MODE); -} -void ProjectionsToolpanel::setup_shapes_group() -{ + //... Shapes group + auto* horizontalLineButton = new QToolButton(this); horizontalLineButton->setIcon(QIcon(":/images/maskeditor_horizontalline.svg")); - horizontalLineButton->setToolTip(horizontal_mode_tooltip); + horizontalLineButton->setToolTip( + "Horizontal projections mode\nCreate projection along x-axis by clicking on color map"); horizontalLineButton->setCheckable(true); addWidget(horizontalLineButton); auto* verticalLineButton = new QToolButton(this); verticalLineButton->setIcon(QIcon(":/images/maskeditor_verticalline.svg")); - verticalLineButton->setToolTip(vertical_mode_tooltip); + verticalLineButton->setToolTip( + "Vertical projections mode\nCreate projection along y-axis by clicking on color map"); verticalLineButton->setCheckable(true); addWidget(verticalLineButton); m_activityButtonGroup->addButton(verticalLineButton, MaskFlags::VERTICAL_LINE_MODE); m_activityButtonGroup->addButton(horizontalLineButton, MaskFlags::HORIZONTAL_LINE_MODE); + connect(m_activityButtonGroup, &QButtonGroup::idClicked, + [this] { emit activityChanged(currentActivity()); }); + add_separator(); -} -void ProjectionsToolpanel::setup_extratools_group() -{ + //... Extratools group + auto* saveButton = new QToolButton(this); saveButton->setIcon(QIcon(":/images/maskeditor_save.svg")); saveButton->setToolTip("Save created projections in multi-column ASCII file."); @@ -124,19 +88,34 @@ void ProjectionsToolpanel::setup_extratools_group() connect(saveButton, &QToolButton::clicked, m_editorActions, &ProjectionActions::onSaveAction); } -void ProjectionsToolpanel::add_separator() +void ProjectionToolbar::onChangeActivityRequest(MaskFlags::MaskMode mask_mode) +{ + setCurrentActivity(mask_mode); + emit activityChanged(currentActivity()); +} + +//! Change activity only if current activity is one of drawing mode (horizontal, vertical +//! projections drawing). +void ProjectionToolbar::onProjectionTabChange(MaskFlags::MaskMode mask_mode) +{ + if (currentActivity() == MaskFlags::HORIZONTAL_LINE_MODE + || currentActivity() == MaskFlags::VERTICAL_LINE_MODE) + onChangeActivityRequest(mask_mode); +} + +void ProjectionToolbar::add_separator() { addWidget(new QLabel(" ")); addSeparator(); addWidget(new QLabel(" ")); } -MaskFlags::MaskMode ProjectionsToolpanel::currentActivity() const +MaskFlags::MaskMode ProjectionToolbar::currentActivity() const { return MaskFlags::EMaskMode(m_activityButtonGroup->checkedId()); } -void ProjectionsToolpanel::setCurrentActivity(MaskFlags::MaskMode mask_mode) +void ProjectionToolbar::setCurrentActivity(MaskFlags::MaskMode mask_mode) { int button_index = static_cast<int>(mask_mode); m_activityButtonGroup->button(button_index)->setChecked(true); diff --git a/GUI/View/Setup/ProjectionsToolpanel.h b/GUI/View/Setup/ProjectionToolbar.h similarity index 71% rename from GUI/View/Setup/ProjectionsToolpanel.h rename to GUI/View/Setup/ProjectionToolbar.h index 53c29dea671691c2e9ce80703f811b3d3742a208..2acfb7ed9b9416c4096beb806d5237b2a86b3a02 100644 --- a/GUI/View/Setup/ProjectionsToolpanel.h +++ b/GUI/View/Setup/ProjectionToolbar.h @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/Setup/ProjectionsToolpanel.h -//! @brief Defines class ProjectionsToolpanel. +//! @file GUI/View/Setup/ProjectionToolbar.h +//! @brief Defines class ProjectionToolbar. //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -12,8 +12,8 @@ // // ************************************************************************************************ -#ifndef BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONSTOOLPANEL_H -#define BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONSTOOLPANEL_H +#ifndef BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONTOOLBAR_H +#define BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONTOOLBAR_H #include "GUI/View/Scene/MaskFlags.h" #include <QButtonGroup> @@ -24,10 +24,10 @@ class ProjectionActions; //! Toolbar with projections buttons (horizontal projections, vertical projections, select, zoom) //! located at the right-hand side of ProjectionsEditor (part of JobProjectionsWidget). -class ProjectionsToolpanel : public QToolBar { +class ProjectionToolbar : public QToolBar { Q_OBJECT public: - ProjectionsToolpanel(ProjectionActions* editorActions, QWidget* parent = nullptr); + ProjectionToolbar(ProjectionActions* editorActions); public slots: void onChangeActivityRequest(MaskFlags::MaskMode mask_mode); @@ -37,9 +37,6 @@ signals: void activityChanged(MaskFlags::MaskMode); private: - void setup_selection_group(); - void setup_shapes_group(); - void setup_extratools_group(); void add_separator(); MaskFlags::MaskMode currentActivity() const; void setCurrentActivity(MaskFlags::MaskMode mask_mode); @@ -48,4 +45,4 @@ private: QButtonGroup* m_activityButtonGroup; }; -#endif // BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONSTOOLPANEL_H +#endif // BORNAGAIN_GUI_VIEW_SETUP_PROJECTIONTOOLBAR_H