aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/advanceddockingsystem/dockwidgettab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/advanceddockingsystem/dockwidgettab.cpp')
-rw-r--r--src/libs/advanceddockingsystem/dockwidgettab.cpp77
1 files changed, 53 insertions, 24 deletions
diff --git a/src/libs/advanceddockingsystem/dockwidgettab.cpp b/src/libs/advanceddockingsystem/dockwidgettab.cpp
index 611580d368..af0ce4baef 100644
--- a/src/libs/advanceddockingsystem/dockwidgettab.cpp
+++ b/src/libs/advanceddockingsystem/dockwidgettab.cpp
@@ -116,7 +116,7 @@ namespace ADS
*/
bool testConfigFlag(DockManager::eConfigFlag flag) const
{
- return DockManager::configFlags().testFlag(flag);
+ return DockManager::testConfigFlag(flag);
}
/**
@@ -168,12 +168,18 @@ namespace ADS
m_titleLabel->setText(m_dockWidget->windowTitle());
m_titleLabel->setObjectName("dockWidgetTabLabel");
m_titleLabel->setAlignment(Qt::AlignCenter);
- QObject::connect(m_titleLabel, &ElidingLabel::elidedChanged, q, &DockWidgetTab::elidedChanged);
+ QObject::connect(m_titleLabel,
+ &ElidingLabel::elidedChanged,
+ q,
+ &DockWidgetTab::elidedChanged);
m_closeButton = createCloseButton();
m_closeButton->setObjectName("tabCloseButton");
- internal::setButtonIcon(m_closeButton, QStyle::SP_TitleBarCloseButton, TabCloseIcon);
+ internal::setButtonIcon(m_closeButton,
+ QStyle::SP_TitleBarCloseButton,
+ TabCloseIcon);
m_closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ m_closeButton->setIconSize(QSize(14, 14));
q->onDockWidgetFeaturesChanged();
internal::setToolTip(m_closeButton, QObject::tr("Close Tab"));
QObject::connect(m_closeButton,
@@ -189,11 +195,11 @@ namespace ADS
boxLayout->setContentsMargins(2 * spacing, 0, 0, 0);
boxLayout->setSpacing(0);
q->setLayout(boxLayout);
- boxLayout->addWidget(m_titleLabel, 1);
+ boxLayout->addWidget(m_titleLabel, 1, Qt::AlignVCenter);
boxLayout->addSpacing(spacing);
- boxLayout->addWidget(m_closeButton);
+ boxLayout->addWidget(m_closeButton, 0, Qt::AlignVCenter);
boxLayout->addSpacing(qRound(spacing * 4.0 / 3.0));
- boxLayout->setAlignment(Qt::AlignCenter);
+ boxLayout->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
m_titleLabel->setVisible(true);
}
@@ -226,18 +232,20 @@ namespace ADS
qCInfo(adsLog) << "startFloating";
m_dragState = draggingState;
- QSize size = m_dockArea->size();
AbstractFloatingWidget *floatingWidget = nullptr;
- bool opaqueUndocking = DockManager::configFlags().testFlag(DockManager::OpaqueUndocking)
+ bool opaqueUndocking = DockManager::testConfigFlag(DockManager::OpaqueUndocking)
|| (DraggingFloatingWidget != draggingState);
// If section widget has multiple tabs, we take only one tab
// If it has only one single tab, we can move the complete
// dock area into floating widget
+ QSize size;
if (m_dockArea->dockWidgetsCount() > 1) {
floatingWidget = createFloatingWidget(m_dockWidget, opaqueUndocking);
+ size = m_dockWidget->size();
} else {
floatingWidget = createFloatingWidget(m_dockArea, opaqueUndocking);
+ size = m_dockArea->size();
}
if (DraggingFloatingWidget == draggingState) {
@@ -259,6 +267,8 @@ namespace ADS
setAttribute(Qt::WA_NoMousePropagation, true);
d->m_dockWidget = dockWidget;
d->createLayout();
+ if (DockManager::testConfigFlag(DockManager::FocusHighlighting))
+ setFocusPolicy(Qt::ClickFocus);
}
DockWidgetTab::~DockWidgetTab()
@@ -352,9 +362,9 @@ namespace ADS
// If we undock, we need to restore the initial position of this
// tab because it looks strange if it remains on its dragged position
if (d->isDraggingState(DraggingTab)
- && !DockManager::configFlags().testFlag(DockManager::OpaqueUndocking)) {
+ && !DockManager::testConfigFlag(DockManager::OpaqueUndocking))
parentWidget()->layout()->update();
- }
+
d->startFloating();
}
return;
@@ -364,9 +374,9 @@ namespace ADS
{
// If we start dragging the tab, we save its initial position to
// restore it later
- if (DraggingTab != d->m_dragState) {
+ if (DraggingTab != d->m_dragState)
d->m_tabDragStartPosition = this->pos();
- }
+
d->m_dragState = DraggingTab;
return;
}
@@ -377,9 +387,8 @@ namespace ADS
void DockWidgetTab::contextMenuEvent(QContextMenuEvent *event)
{
event->accept();
- if (d->isDraggingState(DraggingFloatingWidget)) {
+ if (d->isDraggingState(DraggingFloatingWidget))
return;
- }
d->saveDragStartMousePosition(event->globalPos());
QMenu menu(this);
@@ -407,16 +416,27 @@ namespace ADS
bool allTabsHaveCloseButton = d->testConfigFlag(DockManager::AllTabsHaveCloseButton);
bool tabHasCloseButton = (activeTabHasCloseButton && active) | allTabsHaveCloseButton;
d->m_closeButton->setVisible(dockWidgetClosable && tabHasCloseButton);
- if (d->m_isActiveTab == active) {
+
+ // Focus related stuff
+ if (DockManager::testConfigFlag(DockManager::FocusHighlighting)
+ && !d->m_dockWidget->dockManager()->isRestoringState()) {
+ bool updateFocusStyle = false;
+ if (active && !hasFocus()) {
+ setFocus(Qt::OtherFocusReason);
+ updateFocusStyle = true;
+ }
+
+ if (d->m_isActiveTab == active) {
+ if (updateFocusStyle)
+ updateStyle();
+ return;
+ }
+ } else if (d->m_isActiveTab == active) {
return;
}
d->m_isActiveTab = active;
-
- style()->unpolish(this);
- style()->polish(this);
- d->m_titleLabel->style()->unpolish(d->m_titleLabel);
- d->m_titleLabel->style()->polish(d->m_titleLabel);
+ updateStyle();
update();
updateGeometry();
@@ -432,9 +452,8 @@ namespace ADS
void DockWidgetTab::setIcon(const QIcon &icon)
{
QBoxLayout *boxLayout = qobject_cast<QBoxLayout *>(layout());
- if (!d->m_iconLabel && icon.isNull()) {
+ if (!d->m_iconLabel && icon.isNull())
return;
- }
if (!d->m_iconLabel) {
d->m_iconLabel = new QLabel();
@@ -493,9 +512,9 @@ namespace ADS
void DockWidgetTab::detachDockWidget()
{
- if (!d->m_dockWidget->features().testFlag(DockWidget::DockWidgetFloatable)) {
+ if (!d->m_dockWidget->features().testFlag(DockWidget::DockWidgetFloatable))
return;
- }
+
d->saveDragStartMousePosition(QCursor::pos());
d->startFloating(DraggingInactive);
}
@@ -521,4 +540,14 @@ namespace ADS
d->m_closeButton->setSizePolicy(sizePolicy);
}
+ void DockWidgetTab::setElideMode(Qt::TextElideMode mode)
+ {
+ d->m_titleLabel->setElideMode(mode);
+ }
+
+ void DockWidgetTab::updateStyle()
+ {
+ internal::repolishStyle(this, internal::RepolishDirectChildren);
+ }
+
} // namespace ADS