From a78422bf3eefbfd9ae97f40f5342b5b055c8a8ad Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 3 Aug 2014 14:40:32 +0200 Subject: [PATCH] Allow auto ajdust for floating widgets (via menu) refs #299 --- src/blackgui/components/infobarstatus.ui | 10 ++++++-- .../components/maininfoareacomponent.cpp | 23 +++++++++++++++++++ .../components/maininfoareacomponent.h | 6 ++++- src/blackgui/dockwidget.cpp | 3 +++ src/blackgui/dockwidget.h | 6 +++-- src/blackgui/dockwidgetinfoarea.cpp | 2 +- 6 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/blackgui/components/infobarstatus.ui b/src/blackgui/components/infobarstatus.ui index 7fbfdcb65..7058bdd57 100644 --- a/src/blackgui/components/infobarstatus.ui +++ b/src/blackgui/components/infobarstatus.ui @@ -11,7 +11,11 @@ - Frame + Info status bar + + + + :/own/icons/own/swift/swift24.png:/own/icons/own/swift/swift24.png QFrame::StyledPanel @@ -164,6 +168,8 @@ 1 - + + + diff --git a/src/blackgui/components/maininfoareacomponent.cpp b/src/blackgui/components/maininfoareacomponent.cpp index 2d22387d1..7ef5c023b 100644 --- a/src/blackgui/components/maininfoareacomponent.cpp +++ b/src/blackgui/components/maininfoareacomponent.cpp @@ -124,6 +124,17 @@ namespace BlackGui menu->addAction(showMenuText); connect(showMenuText, &QAction::toggled, this, &CMainInfoAreaComponent::ps_showTabTexts); + // auto adjust floating widgets + QAction *autoAdjustFloatingWidget = new QAction(menu); + autoAdjustFloatingWidget->setObjectName("AutoAdjustFloatingWidgets"); + autoAdjustFloatingWidget->setIconText("Auto adjust floating widgets"); + autoAdjustFloatingWidget->setIcon(CIcons::resize16()); + autoAdjustFloatingWidget->setCheckable(true); + autoAdjustFloatingWidget->setChecked(this->m_autoAdjustFloatingWidgets); + menu->addAction(autoAdjustFloatingWidget); + connect(autoAdjustFloatingWidget, &QAction::toggled, this, &CMainInfoAreaComponent::ps_toggleAutoAdjustFloatingWidget); + + // tab bar position menu->addAction(CIcons::dockBottom16(), "Toogle tabbar position", this, SLOT(ps_toggleTabBarPosition())); } } @@ -506,6 +517,18 @@ namespace BlackGui } } + void CMainInfoAreaComponent::ps_toggleAutoAdjustFloatingWidget(bool adjust) + { + if (adjust == this->m_autoAdjustFloatingWidgets) return; + this->m_autoAdjustFloatingWidgets = adjust; + QList::iterator i; + for (i = this->m_dockableWidgets.begin(); i != this->m_dockableWidgets.end(); ++i) + { + CDockWidgetInfoArea *dw = (*i); + dw->setAutoAdjustWhenFloating(adjust); + } + } + void CMainInfoAreaComponent::ps_setTabBarPosition(QTabWidget::TabPosition position) { Q_ASSERT(position == QTabWidget::North || position == QTabWidget::South); diff --git a/src/blackgui/components/maininfoareacomponent.h b/src/blackgui/components/maininfoareacomponent.h index 47470228d..74c21d3bd 100644 --- a/src/blackgui/components/maininfoareacomponent.h +++ b/src/blackgui/components/maininfoareacomponent.h @@ -121,7 +121,8 @@ namespace BlackGui QList m_dockableWidgets ; QTabBar *m_tabBar = nullptr; bool m_showTabTexts = true; - bool m_infoAreaFloating = false; //!< whole info area floating + bool m_infoAreaFloating = false; //!< whole info area floating + bool m_autoAdjustFloatingWidgets = true; //!< auto ajdust the floating widgets //! Tabify the widgets void tabifyAllWidgets(); @@ -181,6 +182,9 @@ namespace BlackGui //! Show the tab texts, or just the icons void ps_showTabTexts(bool show); + //! Toggle checkable setting + void ps_toggleAutoAdjustFloatingWidget(bool adjust); + //! Tab position for docked widgets tab //! \remarks North or South working, East / West not void ps_setTabBarPosition(QTabWidget::TabPosition position); diff --git a/src/blackgui/dockwidget.cpp b/src/blackgui/dockwidget.cpp index 6f5502d9b..f057139cc 100644 --- a/src/blackgui/dockwidget.cpp +++ b/src/blackgui/dockwidget.cpp @@ -118,6 +118,9 @@ namespace BlackGui } this->setNullTitleBar(); this->setContentsMargins(this->m_marginsWhenFloating); + if (this->m_autoAdjustWhenFloating) { + this->adjustSize(); + } } else { diff --git a/src/blackgui/dockwidget.h b/src/blackgui/dockwidget.h index 3d4e3b609..80c683da7 100644 --- a/src/blackgui/dockwidget.h +++ b/src/blackgui/dockwidget.h @@ -50,6 +50,9 @@ namespace BlackGui //! Margins when widget is floating void setMarginsWhenDocked(int left, int top, int right, int bottom) { this->m_marginsWhenDocked = QMargins(left, top, right, bottom); } + //! Auto adjust size when floating + void setAutoAdjustWhenFloating(bool autoAdjust) { this->m_autoAdjustWhenFloating = autoAdjust; } + //! Window title backup const QString &windowTitleBackup() const { return this->m_windowTitleBackup; } @@ -59,8 +62,6 @@ namespace BlackGui //! Show the window title when docked void showTitleWhenDocked(bool show); - - public slots: //! Toggle floating void toggleFloating(); @@ -100,6 +101,7 @@ namespace BlackGui QMargins m_marginsWhenDocked; //!< Offsets when window is floating QString m_windowTitleBackup; //!< original title, even if the widget title is deleted for layout purposes bool m_windowTitleWhenDocked = true; + bool m_autoAdjustWhenFloating = true; //! Empty widget with no size void initTitleBarWidgets(); diff --git a/src/blackgui/dockwidgetinfoarea.cpp b/src/blackgui/dockwidgetinfoarea.cpp index e9c8246f4..bd9395863 100644 --- a/src/blackgui/dockwidgetinfoarea.cpp +++ b/src/blackgui/dockwidgetinfoarea.cpp @@ -26,7 +26,7 @@ namespace BlackGui // Dockable widget's context menu CDockWidget::addToContextMenu(contextMenu); - // from main component + // from main component (info area) contextMenu->addSeparator(); mainWidget->addToContextMenu(contextMenu); }