From bbd6811c8dd72478467919adcdd1a702918aa960 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 26 Apr 2019 01:20:05 +0200 Subject: [PATCH] Improved vertical resizing / vertical header vor interactive vertical resizing --- src/blackgui/share/qss/stdwidget.qss | 1 + src/blackgui/views/viewbase.cpp | 1 + src/blackgui/views/viewbase.h | 9 ++- src/blackgui/views/viewbasenontemplate.cpp | 67 ++++++++++++++++------ 4 files changed, 58 insertions(+), 20 deletions(-) diff --git a/src/blackgui/share/qss/stdwidget.qss b/src/blackgui/share/qss/stdwidget.qss index 6525038fe..0eb8da9ab 100644 --- a/src/blackgui/share/qss/stdwidget.qss +++ b/src/blackgui/share/qss/stdwidget.qss @@ -605,6 +605,7 @@ QHeaderView::section { QHeaderView { border-width: 0px; + background-color: darkslategray; } /* style the sort indicator */ diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 145c9f3d5..75c0369f6 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -946,5 +946,6 @@ namespace BlackGui if (!index.isValid()) { return; } emit this->objectSelected(CVariant::fromValue(at(index))); } + } // namespace } // namespace diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 60bca363a..c122347d6 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -317,7 +317,11 @@ namespace BlackGui //! Force that columns are extended to full viewport width. //! Workaround as of https://stackoverflow.com/q/3433664/356726 - void setForceColumnsToMaxSize(bool force) { m_forceColumnsToMaxSize = force; } + //! \deprecated use setWordWrap + void setForceColumnsToMaxSize(bool force) + { + this->setWordWrap(!force); + } //! Resize mode void setHorizontalHeaderSectionResizeMode(QHeaderView::ResizeMode mode); @@ -544,6 +548,9 @@ namespace BlackGui //! Remove filter virtual void removeFilter() = 0; + //! Vertical header + void showVerticalHeader(); + //! Filter dialog finished virtual bool filterDialogFinished(int status) = 0; diff --git a/src/blackgui/views/viewbasenontemplate.cpp b/src/blackgui/views/viewbasenontemplate.cpp index b6bb34d04..489ecfc44 100644 --- a/src/blackgui/views/viewbasenontemplate.cpp +++ b/src/blackgui/views/viewbasenontemplate.cpp @@ -412,20 +412,22 @@ namespace BlackGui // resize to content might decrease performance, // so I only allow changing to "content resizing" if size matches - const bool enabled = !this->reachedResizeThreshold(); + // const bool enabled = !this->reachedResizeThreshold(); + const bool enabled = true; const bool autoResize = (m_resizeMode == ResizingAuto); // when not set to auto, then lets set how we want to resize rows - if (m_rowResizeMode == Interactive) - { - QAction *a = menuActions.addAction(CIcons::resizeVertical16(), " Resize rows to content (auto), can be slow", CMenuAction::pathViewResize(), nullptr, { this, &CViewBaseNonTemplate::rowsResizeModeToContent }); - a->setEnabled(enabled && !autoResize); - } - else - { - QAction *a = menuActions.addAction(CIcons::resizeVertical16(), "Resize rows interactively", CMenuAction::pathViewResize(), nullptr, { this, &CViewBaseNonTemplate::rowsResizeModeToInteractive }); - a->setEnabled(!autoResize); - } + // for auto this is too slow + const bool ww = this->wordWrap(); + QAction *resizeRowsAction = menuActions.addAction(CIcons::resizeVertical16(), "Resize rows to content", CMenuAction::pathViewResize(), nullptr, { this, &CViewBaseNonTemplate::resizeRowsToContents }); + resizeRowsAction->setEnabled(ww); + + /** + QAction *a1 = menuActions.addAction(CIcons::resizeVertical16(), "Resize rows to content (auto), can be slow", CMenuAction::pathViewResize(), nullptr, { this, &CViewBaseNonTemplate::rowsResizeModeToContent }); + a1->setEnabled(ww && m_rowResizeMode == Interactive && enabled && !autoResize); + QAction *a2 = menuActions.addAction(CIcons::resizeVertical16(), "Resize rows interactively", CMenuAction::pathViewResize(), nullptr, { this, &CViewBaseNonTemplate::rowsResizeModeToInteractive }); + a2->setEnabled(ww && m_rowResizeMode == Content && !autoResize); + **/ // export actions, display in text edit if (CBuildConfig::isLocalDeveloperDebugBuild()) @@ -681,6 +683,17 @@ namespace BlackGui verticalHeader->setSectionResizeMode(QHeaderView::Interactive); verticalHeader->setDefaultSectionSize(height); m_rowResizeMode = Interactive; + this->showVerticalHeader(); + } + + void CViewBaseNonTemplate::showVerticalHeader() + { + QHeaderView *verticalHeader = this->verticalHeader(); + verticalHeader->setVisible( + this->wordWrap() && + m_resizeMode != ResizingAuto && + m_rowResizeMode == Interactive); + verticalHeader->setFixedWidth(16); } void CViewBaseNonTemplate::rowsResizeModeToContent() @@ -689,6 +702,7 @@ namespace BlackGui Q_ASSERT(verticalHeader); verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents); m_rowResizeMode = Content; + this->showVerticalHeader(); } void CViewBaseNonTemplate::rowsResizeModeBasedOnThreshold(int elements) @@ -767,12 +781,10 @@ namespace BlackGui void CViewBaseNonTemplate::fullResizeToContents() { - //! \fixme 2019-04 Disabled the magic FOO trick for resizing - //! Not working anymore and NOT needed ??? anymore, seems like - /** - // resize to maximum magic trick from: - // http://stackoverflow.com/q/3433664/356726 + //! \fixme 2019-04 Disabled the magic FOO trick for resizing + // Not working anymore and NOT needed ??? anymore, seems like + // resize to maximum magic trick from: http://stackoverflow.com/q/3433664/356726 this->setVisible(false); const QRect vpOriginal = this->viewport()->geometry(); if (m_forceColumnsToMaxSize) @@ -786,8 +798,6 @@ namespace BlackGui } **/ - this->resizeColumnsToContents(); // columns - // useless if mode is Interactive if (m_rowResizeMode == Content) { @@ -803,6 +813,12 @@ namespace BlackGui this->horizontalHeader()->setStretchLastSection(true); } + // const int cols = this->colorCount(); + // if (this->endsWithEmptyColumn()) { this->setColumnWidth(cols - 1, 10); } + // gives a weird NO METRICS warning + + this->resizeColumnsToContents(); // columns + /** Magic FOO // if (m_forceColumnsToMaxSize) { this->viewport()->setGeometry(vpOriginal); } // if I store the original visibility and then @@ -841,13 +857,26 @@ namespace BlackGui void CViewBaseNonTemplate::toggleResizeMode(bool checked) { m_resizeMode = checked ? ResizingAuto : ResizingOff; + if (m_resizeMode == ResizingAuto) + { + // make sure not use this one here + this->rowsResizeModeToInteractive(); + } + else + { + this->showVerticalHeader(); + } } void CViewBaseNonTemplate::toggleWordWrap(bool checked) { if (this->wordWrap() == checked) { return; } + if (checked) + { + // menuAddItems() + } this->setWordWrap(checked); - this->resizeRowsToContents(); + this->showVerticalHeader(); // can be slow } void CViewBaseNonTemplate::toggleAutoDisplay()