summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartsgallery/mainwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/chartsgallery/mainwidget.cpp')
-rw-r--r--examples/charts/chartsgallery/mainwidget.cpp46
1 files changed, 39 insertions, 7 deletions
diff --git a/examples/charts/chartsgallery/mainwidget.cpp b/examples/charts/chartsgallery/mainwidget.cpp
index cb535217..8607a71a 100644
--- a/examples/charts/chartsgallery/mainwidget.cpp
+++ b/examples/charts/chartsgallery/mainwidget.cpp
@@ -48,6 +48,7 @@
#include <QListView>
#include <QModelIndex>
#include <QStringListModel>
+#include <QVBoxLayout>
#include <algorithm>
@@ -100,19 +101,15 @@ MainWidget::MainWidget(QWidget *parent)
std::sort(examples.begin(), examples.end());
m_listModel->setStringList(examples);
- m_listView->setMaximumWidth(220);
m_listView->setModel(m_listModel);
m_listView->setCurrentIndex(m_listModel->index(0));
m_listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ m_contentArea->installEventFilter(this);
+
setMinimumSize(800, 400);
resize(1200, 600);
- auto layout = new QHBoxLayout(this);
- layout->addWidget(m_listView);
- layout->addWidget(m_contentArea);
- setLayout(layout);
-
connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged, this,
[this](const QModelIndex &index) {
setActiveExample(m_exampleMap[m_listModel->data(index).toString()]);
@@ -127,7 +124,21 @@ MainWidget::MainWidget(QWidget *parent)
void MainWidget::resizeEvent(QResizeEvent *)
{
- m_activeWidget->resize(m_contentArea->size());
+ bool isHorizontal = width() >= height();
+ if (!layout() || isHorizontal != m_isHorizontal)
+ relayout(isHorizontal);
+
+ if (m_isHorizontal)
+ m_listView->setMaximumHeight(QWIDGETSIZE_MAX);
+ else
+ m_listView->setMaximumHeight(height() / 3);
+}
+
+bool MainWidget::eventFilter(QObject *object, QEvent *event)
+{
+ if (event->type() == QEvent::Resize && object == m_contentArea && m_activeWidget)
+ m_activeWidget->resize(m_contentArea->size());
+ return QObject::eventFilter(object, event);
}
void MainWidget::setActiveExample(Example example)
@@ -260,3 +271,24 @@ void MainWidget::setActiveExample(Example example)
m_activeWidget->resize(m_contentArea->size());
m_activeWidget->setVisible(true);
}
+
+void MainWidget::relayout(bool horizontal)
+{
+ m_isHorizontal = horizontal;
+
+ delete layout();
+
+ QBoxLayout *layout;
+ if (horizontal) {
+ layout = new QHBoxLayout(this);
+ layout->addWidget(m_listView);
+ layout->addWidget(m_contentArea);
+ m_listView->setMaximumWidth(220);
+ } else {
+ layout = new QVBoxLayout(this);
+ layout->addWidget(m_contentArea);
+ layout->addWidget(m_listView);
+ m_listView->setMaximumWidth(QWIDGETSIZE_MAX);
+ }
+ setLayout(layout);
+}