Added functions to insert custom dock area title bar widgets

This commit is contained in:
Uwe Kindler 2020-02-07 13:42:11 +01:00
parent d10d59a8e2
commit efb9b879dd
4 changed files with 46 additions and 19 deletions

View File

@ -170,6 +170,7 @@ void CDockAreaTabBar::setCurrentIndex(int index)
emit currentChanging(index);
d->CurrentIndex = index;
d->updateTabs();
updateGeometry();
emit currentChanged(index);
}

View File

@ -66,7 +66,7 @@ struct DockAreaTitleBarPrivate
QPointer<tTitleBarButton> TabsMenuButton;
QPointer<tTitleBarButton> UndockButton;
QPointer<tTitleBarButton> CloseButton;
QBoxLayout* TopLayout;
QBoxLayout* Layout;
CDockAreaWidget* DockArea;
CDockAreaTabBar* TabBar;
bool MenuOutdated = true;
@ -212,7 +212,7 @@ void DockAreaTitleBarPrivate::createButtons()
TabsMenuButton->setMenu(TabsMenu);
internal::setToolTip(TabsMenuButton, QObject::tr("List all tabs"));
TabsMenuButton->setSizePolicy(ButtonSizePolicy);
TopLayout->addWidget(TabsMenuButton, 0);
Layout->addWidget(TabsMenuButton, 0);
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
SLOT(onTabsMenuActionTriggered(QAction*)));
@ -223,7 +223,7 @@ void DockAreaTitleBarPrivate::createButtons()
internal::setToolTip(UndockButton, QObject::tr("Detach Group"));
internal::setButtonIcon(UndockButton, QStyle::SP_TitleBarNormalButton, ads::DockAreaUndockIcon);
UndockButton->setSizePolicy(ButtonSizePolicy);
TopLayout->addWidget(UndockButton, 0);
Layout->addWidget(UndockButton, 0);
_this->connect(UndockButton, SIGNAL(clicked()), SLOT(onUndockButtonClicked()));
// Close button
@ -241,7 +241,7 @@ void DockAreaTitleBarPrivate::createButtons()
}
CloseButton->setSizePolicy(ButtonSizePolicy);
CloseButton->setIconSize(QSize(16, 16));
TopLayout->addWidget(CloseButton, 0);
Layout->addWidget(CloseButton, 0);
_this->connect(CloseButton, SIGNAL(clicked()), SLOT(onCloseButtonClicked()));
}
@ -250,7 +250,8 @@ void DockAreaTitleBarPrivate::createButtons()
void DockAreaTitleBarPrivate::createTabBar()
{
TabBar = new CDockAreaTabBar(DockArea);
TopLayout->addWidget(TabBar);
TabBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
Layout->addWidget(TabBar);
_this->connect(TabBar, SIGNAL(tabClosed(int)), SLOT(markTabsMenuOutdated()));
_this->connect(TabBar, SIGNAL(tabOpened(int)), SLOT(markTabsMenuOutdated()));
_this->connect(TabBar, SIGNAL(tabInserted(int)), SLOT(markTabsMenuOutdated()));
@ -314,18 +315,16 @@ CDockAreaTitleBar::CDockAreaTitleBar(CDockAreaWidget* parent) :
d->DockArea = parent;
setObjectName("dockAreaTitleBar");
d->TopLayout = new QBoxLayout(QBoxLayout::LeftToRight);
d->TopLayout->setContentsMargins(0, 0, 0, 0);
d->TopLayout->setSpacing(0);
setLayout(d->TopLayout);
d->Layout = new QBoxLayout(QBoxLayout::LeftToRight);
d->Layout->setContentsMargins(0, 0, 0, 0);
d->Layout->setSpacing(0);
setLayout(d->Layout);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
d->createTabBar();
d->TabBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
auto horizontalSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
d->TopLayout->addSpacerItem(horizontalSpacer);
d->Layout->addSpacerItem(horizontalSpacer);
d->createButtons();
}
@ -449,7 +448,7 @@ void CDockAreaTitleBar::updateDockWidgetActionsButtons()
{
for (auto Button : d->DockWidgetActionsButtons)
{
d->TopLayout->removeWidget(Button);
d->Layout->removeWidget(Button);
delete Button;
}
d->DockWidgetActionsButtons.clear();
@ -469,7 +468,7 @@ void CDockAreaTitleBar::updateDockWidgetActionsButtons()
Button->setAutoRaise(true);
Button->setPopupMode(QToolButton::InstantPopup);
Button->setObjectName(Action->objectName());
d->TopLayout->insertWidget(InsertIndex++, Button, 0);
d->Layout->insertWidget(InsertIndex++, Button, 0);
d->DockWidgetActionsButtons.append(Button);
}
}
@ -634,6 +633,20 @@ void CDockAreaTitleBar::contextMenuEvent(QContextMenuEvent* ev)
}
//============================================================================
void CDockAreaTitleBar::insertWidget(int index, QWidget *widget)
{
d->Layout->insertWidget(index, widget);
}
//============================================================================
int CDockAreaTitleBar::indexOf(QWidget *widget) const
{
return d->Layout->indexOf(widget);
}
} // namespace ads
#include "DockAreaTitleBar.moc"

View File

@ -98,6 +98,7 @@ public slots:
public:
using Super = QFrame;
/**
* Default Constructor
*/
@ -129,6 +130,23 @@ public:
*/
virtual void setVisible(bool Visible) override;
/**
* Inserts a custom widget at position index into this title bar.
* If index is negative, the widget is added at the end.
* You can use this function to insert custom widgets into the title bar.
*/
void insertWidget(int index, QWidget *widget);
/**
* Searches for widget widget in this title bar.
* You can use this function, to get the position of the default
* widget in the tile bar.
* \code
* int tabBarIndex = TitleBar->indexOf(TitleBar->tabBar());
* int closeButtonIndex = TitleBar->indexOf(TitleBar->button(TitleBarButtonClose));
* \endcode
*/
int indexOf(QWidget *widget) const;
signals:
/**

View File

@ -92,8 +92,3 @@ QScrollArea#dockWidgetScrollArea
}
ads--CDockAreaTitleBar
{
background: red;
}