From 885d49734b28c86e8fc1de88861da89cee10c742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Franke?= Date: Mon, 24 Oct 2016 06:45:30 +0200 Subject: [PATCH] Add vertical scrollbar to General tab of Simulation dialog Without scrollbar, the hight of the dialog may exceed the size of a laptop screen. The OK/Cancel buttons become unaccessible under Gnome. --- .../OMEditGUI/Simulation/SimulationDialog.cpp | 29 ++++++++++++++++++- .../OMEditGUI/Simulation/SimulationDialog.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp b/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp index b2f9fa906ca..a36245dea84 100644 --- a/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp +++ b/OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp @@ -110,6 +110,28 @@ void SimulationDialog::directSimulate(LibraryTreeItem *pLibraryTreeItem, bool la simulate(); } +/*! + A scroll area with vertical bar and adjustment of width + See: https://forum.qt.io/topic/13374/solved-qscrollarea-vertical-scroll-only + */ +class VerticalScrollArea : public QScrollArea +{ +public: + VerticalScrollArea() + { + setWidgetResizable(true); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + } + + virtual bool eventFilter(QObject *o, QEvent *e) + { + if (o && o == widget() && e->type() == QEvent::Resize) + setMinimumWidth(widget()->minimumSizeHint().width() + verticalScrollBar()->width()); + return QScrollArea::eventFilter(o, e); + } +}; + /*! Creates all the controls and set their layout. */ @@ -124,6 +146,11 @@ void SimulationDialog::setUpForm() mpSimulationTabWidget = new QTabWidget; // General Tab mpGeneralTab = new QWidget; + // General Tab scroll area + mpGeneralTabScrollArea = new VerticalScrollArea; + mpGeneralTabScrollArea->setFrameShape(QFrame::NoFrame); + mpGeneralTabScrollArea->setBackgroundRole(QPalette::Base); + mpGeneralTabScrollArea->setWidget(mpGeneralTab); // Simulation Interval mpSimulationIntervalGroupBox = new QGroupBox(tr("Simulation Interval")); mpStartTimeLabel = new Label(tr("Start Time:")); @@ -270,7 +297,7 @@ void SimulationDialog::setUpForm() pGeneralTabLayout->addWidget(mpLaunchAnimationCheckBox, 7, 0, 1, 3); mpGeneralTab->setLayout(pGeneralTabLayout); // add General Tab to Simulation TabWidget - mpSimulationTabWidget->addTab(mpGeneralTab, Helper::general); + mpSimulationTabWidget->addTab(mpGeneralTabScrollArea, Helper::general); // Output Tab mpOutputTab = new QWidget; // Output Format diff --git a/OMEdit/OMEditGUI/Simulation/SimulationDialog.h b/OMEdit/OMEditGUI/Simulation/SimulationDialog.h index 9e672810f3a..2510e01a225 100644 --- a/OMEdit/OMEditGUI/Simulation/SimulationDialog.h +++ b/OMEdit/OMEditGUI/Simulation/SimulationDialog.h @@ -83,6 +83,7 @@ class SimulationDialog : public QDialog QTabWidget *mpSimulationTabWidget; // General Tab QWidget *mpGeneralTab; + QScrollArea *mpGeneralTabScrollArea; QGroupBox *mpSimulationIntervalGroupBox; Label *mpStartTimeLabel; QLineEdit *mpStartTimeTextBox;