diff --git a/GUI/View/SampleDesigner/SampleListing.cpp b/GUI/View/SampleDesigner/SampleListing.cpp index 8f68d36ec81e4c3e5db84b62ef8ca2b92f361aad..33468c405e2ba819906d00a547f74a09602946ce 100644 --- a/GUI/View/SampleDesigner/SampleListing.cpp +++ b/GUI/View/SampleDesigner/SampleListing.cpp @@ -66,6 +66,8 @@ SampleListing::SampleListing(QWidget* parent, ProjectDocument* document) : QListView(parent) , m_document(document) { + setMaximumWidth(200); + m_model = new SampleListModel(this, document->sampleModel()); setContextMenuPolicy(Qt::CustomContextMenu); diff --git a/GUI/View/SampleDesigner/SampleView.cpp b/GUI/View/SampleDesigner/SampleView.cpp index b0dd2252fc39b8622f78e3997c879ca429bbc754..f265cebb84bb052306bf91cce4ac9509d3a1585d 100644 --- a/GUI/View/SampleDesigner/SampleView.cpp +++ b/GUI/View/SampleDesigner/SampleView.cpp @@ -18,7 +18,6 @@ #include "GUI/Model/Sample/LayerItem.h" #include "GUI/Model/Sample/ParticleLayoutItem.h" #include "GUI/Model/Sample/SampleItem.h" -#include "GUI/View/Dock/DocksController.h" #include "GUI/View/SampleDesigner/SampleEditor.h" #include "GUI/View/SampleDesigner/SampleListing.h" #include "GUI/View/SampleDesigner/ScriptPanel.h" @@ -32,62 +31,63 @@ #include <QDockWidget> #include <QMenu> #include <QMessageBox> +#include <QTabWidget> #include <QToolButton> #include <QWidgetAction> SampleView::SampleView(QWidget* parent, ProjectDocument* document) - : QMainWindow(parent) + : QWidget(parent) , m_document(document) { - setObjectName("SampleView"); + auto* layout = new QVBoxLayout(this); - connect(m_document, &ProjectDocument::singleSampleModeChanged, this, - &SampleView::updateSingleSampleMode); + // Top toolbar with action buttons "new", "import", "example" + auto* toolbar = new StyledToolbar; + layout->addWidget(toolbar); + toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - //... Central widget: sample editor + // Everything below + auto* hLayout = new QHBoxLayout; + layout->addLayout(hLayout); - auto* editor = new SampleEditor(this, document); - setCentralWidget(editor); + //... Left margin: sample listing - //... All other panels controlled by m_docks + m_listing = new SampleListing(this, m_document); + hLayout->addWidget(m_listing); + m_listing->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - m_docks = new DocksController(this); + //... Right block: sample editor and bottom panels - //... Left margin: sample selector and listing + auto* vLayout = new QVBoxLayout; + hLayout->addLayout(vLayout); - auto* selectorPane = new QWidget; - m_docks->addWidget(SAMPLE_LIST, selectorPane, Qt::LeftDockWidgetArea); - selectorPane->setWindowTitle("Samples"); + auto* editor = new SampleEditor(this, document); + vLayout->addWidget(editor); - auto* selectorLayout = new QVBoxLayout(selectorPane); - selectorLayout->setSpacing(0); + //... Below central widget: realspace and script panels - auto* selectorToolbar = new StyledToolbar(selectorPane); - selectorLayout->addWidget(selectorToolbar); - selectorToolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + auto* tabs = new QTabWidget; + vLayout->addWidget(tabs); - m_listing = new SampleListing(this, m_document); - selectorLayout->addWidget(m_listing); - m_listing->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + m_realspacePanel = new RealspacePanel(this); + tabs->addTab(m_realspacePanel, "3D view"); + + auto* scriptPanel = new ScriptPanel(this); + tabs->addTab(scriptPanel, "Python"); + + //... Finish - selectorToolbar->addAction(m_listing->newSampleAction()); + toolbar->addAction(m_listing->newSampleAction()); #ifdef BORNAGAIN_PYTHON - selectorToolbar->addAction(m_listing->importSampleAction()); + toolbar->addAction(m_listing->importSampleAction()); #endif - selectorToolbar->addAction(m_listing->chooseFromLibraryAction()); + toolbar->addAction(m_listing->chooseFromLibraryAction()); if (auto* btn = dynamic_cast<QToolButton*>( - selectorToolbar->widgetForAction(m_listing->chooseFromLibraryAction()))) + toolbar->widgetForAction(m_listing->chooseFromLibraryAction()))) btn->setPopupMode(QToolButton::InstantPopup); - //... Below central widget: realspace and script panels - - auto* scriptPanel = new ScriptPanel(this); - m_docks->addWidget(PYTHONPANEL, scriptPanel, Qt::BottomDockWidgetArea); - - m_realspacePanel = new RealspacePanel(this); - m_docks->addWidget(REALSPACEPANEL, m_realspacePanel, Qt::BottomDockWidgetArea); - - //... Finish + connect(m_document, &ProjectDocument::singleSampleModeChanged, this, + &SampleView::updateSingleSampleMode); connect(m_listing, &SampleListing::currentSampleChanged, editor, &SampleEditor::setCurrentSample); @@ -115,13 +115,11 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document) connect(editor, &SampleEditor::modified, m_document, &ProjectDocument::setModified, Qt::UniqueConnection); - - resetLayout(); } void SampleView::updateSingleSampleMode() { - m_docks->setDockVisible(SAMPLE_LIST, !m_document->singleSampleMode()); + // m_docks->setDockVisible(SAMPLE_LIST, !m_document->singleSampleMode()); } void SampleView::onRequestViewInRealspace(Item3D* item) @@ -131,7 +129,7 @@ void SampleView::onRequestViewInRealspace(Item3D* item) return; } - m_docks->setDockVisible(REALSPACEPANEL); + // m_docks->setDockVisible(REALSPACEPANEL); m_realspacePanel->widget()->setDisplayedItem(m_listing->currentSampleItem(), item); } @@ -163,14 +161,9 @@ void SampleView::onAboutToRemoveItem(Item3D* item) } } -void SampleView::toggleRealspaceView() -{ - m_docks->toggleDock(REALSPACEPANEL); -} - void SampleView::fillViewMenu(QMenu* menu) { - m_docks->addDockActionsToMenu(menu); + // m_docks->addDockActionsToMenu(menu); menu->addSeparator(); @@ -182,11 +175,6 @@ void SampleView::fillViewMenu(QMenu* menu) actionSampleMode->setCheckable(true); actionSampleMode->setDefaultWidget(sampleModeWidget); menu->addAction(actionSampleMode); - - auto* action = new QAction(menu); - action->setText("Reset to default layout"); - connect(action, &QAction::triggered, this, &SampleView::resetLayout); - menu->addAction(action); } void SampleView::showEvent(QShowEvent*) @@ -195,24 +183,6 @@ void SampleView::showEvent(QShowEvent*) m_listing->restoreSelection(); } -void SampleView::resetLayout() -{ - m_docks->resetLayout(); - - tabifyDockWidget(m_docks->findDock(REALSPACEPANEL), m_docks->findDock(PYTHONPANEL)); - m_docks->findDock(REALSPACEPANEL)->raise(); // makes first tab active - - m_docks->findDock(REALSPACEPANEL)->hide(); - m_docks->findDock(PYTHONPANEL)->hide(); - - if (auto* d = m_docks->findDock(SAMPLE_LIST)) { - if (m_document->singleSampleMode()) - d->hide(); - else - d->show(); - } -} - void SampleView::onSingleSampleModeChanged(bool newState) { if (newState) { diff --git a/GUI/View/SampleDesigner/SampleView.h b/GUI/View/SampleDesigner/SampleView.h index 2addea6cc1d48b06a8a68d2e371c5efded3d9f5c..8861019a2fa7e38ee0810666a8784346208efcd1 100644 --- a/GUI/View/SampleDesigner/SampleView.h +++ b/GUI/View/SampleDesigner/SampleView.h @@ -15,28 +15,23 @@ #ifndef BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEVIEW_H #define BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEVIEW_H -#include <QMainWindow> +#include <QWidget> -class DocksController; class Item3D; class ProjectDocument; class RealspacePanel; class SampleListing; -class SampleView : public QMainWindow { +class SampleView : public QWidget { Q_OBJECT public: - enum ESubWindows { PYTHONPANEL, REALSPACEPANEL, SAMPLE_LIST }; - SampleView(QWidget* parent, ProjectDocument* document); - void toggleRealspaceView(); void fillViewMenu(QMenu* menu); private: void showEvent(QShowEvent*) override; - void resetLayout(); void updateSingleSampleMode(); //! Show the item in the real space view @@ -48,7 +43,6 @@ private: void onSingleSampleModeChanged(bool newState); - DocksController* m_docks = nullptr; ProjectDocument* m_document = nullptr; RealspacePanel* m_realspacePanel = nullptr; SampleListing* m_listing = nullptr;