mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2025-01-12 16:20:25 +08:00
Merge branch 'duerr-ndt-auto_hide_feature' into auto_hide_feature_refactor
This commit is contained in:
commit
38ee87f762
@ -12,6 +12,7 @@
|
|||||||
#include <QPlainTextEdit>
|
#include <QPlainTextEdit>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
|
|
||||||
|
#include "AutoHideDockContainer.h"
|
||||||
#include "DockAreaWidget.h"
|
#include "DockAreaWidget.h"
|
||||||
#include "DockAreaTitleBar.h"
|
#include "DockAreaTitleBar.h"
|
||||||
|
|
||||||
@ -44,10 +45,9 @@ CMainWindow::CMainWindow(QWidget *parent)
|
|||||||
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
||||||
TableDockWidget->setWidget(table);
|
TableDockWidget->setWidget(table);
|
||||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
TableDockWidget->resize(250, 150);
|
|
||||||
TableDockWidget->setMinimumSize(200,150);
|
TableDockWidget->setMinimumSize(200,150);
|
||||||
TableDockWidget->setDefaultAutoHideDockProportion(0.5);
|
const auto autoHideContainer = DockManager->addAutoHideDockWidget(SideBarLocation::Left, TableDockWidget, CDockWidget::Last);
|
||||||
DockManager->addAutoHideDockWidget(SideBarLocation::Left, TableDockWidget, CDockWidget::Last);
|
autoHideContainer->setSize(480, 100);
|
||||||
ui->menuView->addAction(TableDockWidget->toggleViewAction());
|
ui->menuView->addAction(TableDockWidget->toggleViewAction());
|
||||||
|
|
||||||
table = new QTableWidget();
|
table = new QTableWidget();
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
namespace ads
|
namespace ads
|
||||||
{
|
{
|
||||||
static const int ResizeMargin = 4;
|
static const int ResizeMargin = 30;
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
bool static isHorizontalArea(SideBarLocation Area)
|
bool static isHorizontalArea(SideBarLocation Area)
|
||||||
@ -136,8 +136,9 @@ struct AutoHideDockContainerPrivate
|
|||||||
void updateResizeHandleSizeLimitMax()
|
void updateResizeHandleSizeLimitMax()
|
||||||
{
|
{
|
||||||
auto Rect = _this->parentContainer()->contentRect();
|
auto Rect = _this->parentContainer()->contentRect();
|
||||||
ResizeHandle->setMaxResizeSize(ResizeHandle->orientation() == Qt::Horizontal
|
const auto maxResizeHandleSize = ResizeHandle->orientation() == Qt::Horizontal
|
||||||
? Rect.width() : Rect.height());
|
? Rect.width() : Rect.height();
|
||||||
|
ResizeHandle->setMaxResizeSize(maxResizeHandleSize - ResizeMargin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -216,18 +217,18 @@ void CAutoHideDockContainer::updateSize()
|
|||||||
switch (sideTabBarArea())
|
switch (sideTabBarArea())
|
||||||
{
|
{
|
||||||
case SideBarLocation::Top:
|
case SideBarLocation::Top:
|
||||||
resize(rect.width(), qMin(rect.height(), d->Size.height()));
|
resize(rect.width(), qMin(rect.height(), d->Size.height() - ResizeMargin));
|
||||||
move(rect.topLeft());
|
move(rect.topLeft());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SideBarLocation::Left:
|
case SideBarLocation::Left:
|
||||||
resize(qMin(d->Size.width(), rect.width()), rect.height());
|
resize(qMin(d->Size.width(), rect.width() - ResizeMargin), rect.height());
|
||||||
move(rect.topLeft());
|
move(rect.topLeft());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SideBarLocation::Right:
|
case SideBarLocation::Right:
|
||||||
{
|
{
|
||||||
resize(qMin(d->Size.width(), rect.width()), rect.height());
|
resize(qMin(d->Size.width(), rect.width() - ResizeMargin), rect.height());
|
||||||
QPoint p = rect.topRight();
|
QPoint p = rect.topRight();
|
||||||
p.rx() -= (width() - 1);
|
p.rx() -= (width() - 1);
|
||||||
move(p);
|
move(p);
|
||||||
@ -236,7 +237,7 @@ void CAutoHideDockContainer::updateSize()
|
|||||||
|
|
||||||
case SideBarLocation::Bottom:
|
case SideBarLocation::Bottom:
|
||||||
{
|
{
|
||||||
resize(rect.width(), qMin(rect.height(), d->Size.height()));
|
resize(rect.width(), qMin(rect.height(), d->Size.height() - ResizeMargin));
|
||||||
QPoint p = rect.bottomLeft();
|
QPoint p = rect.bottomLeft();
|
||||||
p.ry() -= (height() - 1);
|
p.ry() -= (height() - 1);
|
||||||
move(p);
|
move(p);
|
||||||
@ -293,7 +294,7 @@ void CAutoHideDockContainer::addDockWidget(CDockWidget* DockWidget)
|
|||||||
|
|
||||||
// Prevent overriding of d->Size parameter when this function is called during
|
// Prevent overriding of d->Size parameter when this function is called during
|
||||||
// state restoring
|
// state restoring
|
||||||
if (!DockWidget->dockManager()->isRestoringState())
|
if (!DockWidget->dockManager()->isRestoringState() && OldDockArea)
|
||||||
{
|
{
|
||||||
// The initial size should be a little bit bigger than the original dock
|
// The initial size should be a little bit bigger than the original dock
|
||||||
// area size to prevent that the resize handle of this auto hid dock area
|
// area size to prevent that the resize handle of this auto hid dock area
|
||||||
@ -321,7 +322,7 @@ CDockAreaWidget* CAutoHideDockContainer::dockAreaWidget() const
|
|||||||
void CAutoHideDockContainer::moveContentsToParent()
|
void CAutoHideDockContainer::moveContentsToParent()
|
||||||
{
|
{
|
||||||
cleanupAndDelete();
|
cleanupAndDelete();
|
||||||
// If we unpin the auto hide tock widget, then we insert it into the same
|
// If we unpin the auto hide dock widget, then we insert it into the same
|
||||||
// location like it had as a auto hide widget. This brings the least surprise
|
// location like it had as a auto hide widget. This brings the least surprise
|
||||||
// to the user and he does not have to search where the widget was inserted.
|
// to the user and he does not have to search where the widget was inserted.
|
||||||
d->DockWidget->setDockArea(nullptr);
|
d->DockWidget->setDockArea(nullptr);
|
||||||
@ -438,6 +439,12 @@ void CAutoHideDockContainer::toggleCollapseState()
|
|||||||
collapseView(isVisible());
|
collapseView(isVisible());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CAutoHideDockContainer::setSize(int width, int height)
|
||||||
|
{
|
||||||
|
d->Size = QSize(width, height);
|
||||||
|
updateSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
bool CAutoHideDockContainer::eventFilter(QObject* watched, QEvent* event)
|
bool CAutoHideDockContainer::eventFilter(QObject* watched, QEvent* event)
|
||||||
|
@ -146,6 +146,13 @@ public:
|
|||||||
* Toggles the current collapse state
|
* Toggles the current collapse state
|
||||||
*/
|
*/
|
||||||
void toggleCollapseState();
|
void toggleCollapseState();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this instead of resize. This will ensure the size is consistent internally.
|
||||||
|
* E.g. If you set a height less than the parent height when it's vertical
|
||||||
|
* It will simply be rescaled to the parent height while the width will be resized
|
||||||
|
*/
|
||||||
|
void setSize(int width, int height);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ set(ads_SRCS
|
|||||||
DockWidgetSideTab.cpp
|
DockWidgetSideTab.cpp
|
||||||
AutoHideDockContainer.cpp
|
AutoHideDockContainer.cpp
|
||||||
PushButton.cpp
|
PushButton.cpp
|
||||||
|
ResizeHandle.cpp
|
||||||
ads.qrc
|
ads.qrc
|
||||||
)
|
)
|
||||||
set(ads_HEADERS
|
set(ads_HEADERS
|
||||||
@ -56,6 +57,7 @@ set(ads_HEADERS
|
|||||||
DockWidgetSideTab.h
|
DockWidgetSideTab.h
|
||||||
AutoHideDockContainer.h
|
AutoHideDockContainer.h
|
||||||
PushButton.h
|
PushButton.h
|
||||||
|
ResizeHandle.h
|
||||||
)
|
)
|
||||||
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
||||||
if (UNIX AND NOT APPLE)
|
if (UNIX AND NOT APPLE)
|
||||||
|
@ -1537,7 +1537,7 @@ CAutoHideDockContainer* CDockContainerWidget::createAndSetupAutoHideContainer(
|
|||||||
{
|
{
|
||||||
if (d->DockManager != DockWidget->dockManager())
|
if (d->DockManager != DockWidget->dockManager())
|
||||||
{
|
{
|
||||||
DockWidget->setDockManager(d->DockManager); // Overlay Dock Container needs a valid dock manager
|
DockWidget->setDockManager(d->DockManager); // Auto hide Dock Container needs a valid dock manager
|
||||||
}
|
}
|
||||||
if (!CDockManager::testConfigFlag(CDockManager::AutoHideFeatureEnabled))
|
if (!CDockManager::testConfigFlag(CDockManager::AutoHideFeatureEnabled))
|
||||||
{
|
{
|
||||||
@ -1550,11 +1550,10 @@ CAutoHideDockContainer* CDockContainerWidget::createAndSetupAutoHideContainer(
|
|||||||
sideTabBar(area)->insertSideTab(insertOrder == CDockWidget::First ? 0 : -1, DockWidget->sideTabWidget());
|
sideTabBar(area)->insertSideTab(insertOrder == CDockWidget::First ? 0 : -1, DockWidget->sideTabWidget());
|
||||||
DockWidget->sideTabWidget()->show();
|
DockWidget->sideTabWidget()->show();
|
||||||
|
|
||||||
auto AutoHideContainer = new CAutoHideDockContainer(DockWidget, area, this);
|
const auto AutoHideContainer = new CAutoHideDockContainer(DockWidget, area, this);
|
||||||
AutoHideContainer->hide();
|
AutoHideContainer->hide();
|
||||||
d->DockManager->dockFocusController()->clearDockWidgetFocus(DockWidget);
|
d->DockManager->dockFocusController()->clearDockWidgetFocus(DockWidget);
|
||||||
|
|
||||||
//auto AutoHideContainer = sideTabBar(area)->insertDockWidget(insertOrder == CDockWidget::First ? 0 : -1, DockWidget);
|
|
||||||
return AutoHideContainer;
|
return AutoHideContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,6 @@ struct DockWidgetPrivate
|
|||||||
QList<QAction*> TitleBarActions;
|
QList<QAction*> TitleBarActions;
|
||||||
CDockWidget::eMinimumSizeHintMode MinimumSizeHintMode = CDockWidget::MinimumSizeHintFromDockWidget;
|
CDockWidget::eMinimumSizeHintMode MinimumSizeHintMode = CDockWidget::MinimumSizeHintFromDockWidget;
|
||||||
WidgetFactory* Factory = nullptr;
|
WidgetFactory* Factory = nullptr;
|
||||||
double DefaultAutoHideDockProportion = 0.25;
|
|
||||||
CDockWidget::eAutoHideInsertOrder AutoHideInsertOrder = CDockWidget::Last;
|
CDockWidget::eAutoHideInsertOrder AutoHideInsertOrder = CDockWidget::Last;
|
||||||
QPointer<CDockWidgetSideTab> SideTabWidget;
|
QPointer<CDockWidgetSideTab> SideTabWidget;
|
||||||
|
|
||||||
@ -1133,20 +1132,6 @@ bool CDockWidget::isCurrentTab() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void CDockWidget::setDefaultAutoHideDockProportion(float Proportion)
|
|
||||||
{
|
|
||||||
d->DefaultAutoHideDockProportion = Proportion;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
float CDockWidget::DefaultAutoHideDockProportion() const
|
|
||||||
{
|
|
||||||
return d->DefaultAutoHideDockProportion;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void CDockWidget::setAutoHideInsertOrder(eAutoHideInsertOrder insertOrder)
|
void CDockWidget::setAutoHideInsertOrder(eAutoHideInsertOrder insertOrder)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user