mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-12-26 08:01:32 +08:00
Merge pull request #20 from yozka/feature_2
set tooltip for titlebar and menu
This commit is contained in:
commit
e352ce559b
@ -127,7 +127,7 @@ struct MainWindowPrivate
|
|||||||
Ui::MainWindow ui;
|
Ui::MainWindow ui;
|
||||||
QAction* SavePerspectiveAction = nullptr;
|
QAction* SavePerspectiveAction = nullptr;
|
||||||
QWidgetAction* PerspectiveListAction = nullptr;
|
QWidgetAction* PerspectiveListAction = nullptr;
|
||||||
QComboBox* PerspectiveComboBox = nullptr;;
|
QComboBox* PerspectiveComboBox = nullptr;
|
||||||
ads::CDockManager* DockManager = nullptr;
|
ads::CDockManager* DockManager = nullptr;
|
||||||
|
|
||||||
MainWindowPrivate(CMainWindow* _public) : _this(_public) {}
|
MainWindowPrivate(CMainWindow* _public) : _this(_public) {}
|
||||||
@ -188,6 +188,7 @@ void MainWindowPrivate::createContent()
|
|||||||
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
||||||
DockWidget = createCalendarDockWidget(ViewMenu);
|
DockWidget = createCalendarDockWidget(ViewMenu);
|
||||||
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
|
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
|
||||||
|
DockWidget->setTabToolTip(QString("Tab ToolTip\nHodie est dies magna"));
|
||||||
DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea);
|
DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea);
|
||||||
|
|
||||||
// Test dock area docking
|
// Test dock area docking
|
||||||
|
@ -119,9 +119,14 @@ void DockAreaTitleBarPrivate::createButtons()
|
|||||||
TabsMenuButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarUnshadeButton));
|
TabsMenuButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarUnshadeButton));
|
||||||
|
|
||||||
QMenu* TabsMenu = new QMenu(TabsMenuButton);
|
QMenu* TabsMenu = new QMenu(TabsMenuButton);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
TabsMenu->setToolTipsVisible(true);
|
||||||
|
#endif
|
||||||
_this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow()));
|
_this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow()));
|
||||||
TabsMenuButton->setMenu(TabsMenu);
|
TabsMenuButton->setMenu(TabsMenu);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
TabsMenuButton->setToolTip(QObject::tr("List all tabs"));
|
TabsMenuButton->setToolTip(QObject::tr("List all tabs"));
|
||||||
|
#endif
|
||||||
TabsMenuButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
TabsMenuButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
TopLayout->addWidget(TabsMenuButton, 0);
|
TopLayout->addWidget(TabsMenuButton, 0);
|
||||||
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
|
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
|
||||||
@ -131,7 +136,9 @@ void DockAreaTitleBarPrivate::createButtons()
|
|||||||
UndockButton = new tTileBarButton();
|
UndockButton = new tTileBarButton();
|
||||||
UndockButton->setObjectName("undockButton");
|
UndockButton->setObjectName("undockButton");
|
||||||
UndockButton->setAutoRaise(true);
|
UndockButton->setAutoRaise(true);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
UndockButton->setToolTip(QObject::tr("Detach Group"));
|
UndockButton->setToolTip(QObject::tr("Detach Group"));
|
||||||
|
#endif
|
||||||
UndockButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarNormalButton));
|
UndockButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarNormalButton));
|
||||||
UndockButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
UndockButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
TopLayout->addWidget(UndockButton, 0);
|
TopLayout->addWidget(UndockButton, 0);
|
||||||
@ -148,6 +155,7 @@ void DockAreaTitleBarPrivate::createButtons()
|
|||||||
CloseIcon.addPixmap(disabledPixmap, QIcon::Disabled);
|
CloseIcon.addPixmap(disabledPixmap, QIcon::Disabled);
|
||||||
|
|
||||||
CloseButton->setIcon(CloseIcon);
|
CloseButton->setIcon(CloseIcon);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
if (testConfigFlag(CDockManager::DockAreaCloseButtonClosesTab))
|
if (testConfigFlag(CDockManager::DockAreaCloseButtonClosesTab))
|
||||||
{
|
{
|
||||||
CloseButton->setToolTip(QObject::tr("Close Active Tab"));
|
CloseButton->setToolTip(QObject::tr("Close Active Tab"));
|
||||||
@ -156,6 +164,7 @@ void DockAreaTitleBarPrivate::createButtons()
|
|||||||
{
|
{
|
||||||
CloseButton->setToolTip(QObject::tr("Close Group"));
|
CloseButton->setToolTip(QObject::tr("Close Group"));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
TopLayout->addWidget(CloseButton, 0);
|
TopLayout->addWidget(CloseButton, 0);
|
||||||
_this->connect(CloseButton, SIGNAL(clicked()), SLOT(onCloseButtonClicked()));
|
_this->connect(CloseButton, SIGNAL(clicked()), SLOT(onCloseButtonClicked()));
|
||||||
@ -240,6 +249,9 @@ void CDockAreaTitleBar::onTabsMenuAboutToShow()
|
|||||||
}
|
}
|
||||||
auto Tab = d->TabBar->tab(i);
|
auto Tab = d->TabBar->tab(i);
|
||||||
QAction* Action = menu->addAction(Tab->icon(), Tab->text());
|
QAction* Action = menu->addAction(Tab->icon(), Tab->text());
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
Action->setToolTip(Tab->toolTip());
|
||||||
|
#endif
|
||||||
Action->setData(i);
|
Action->setData(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,6 +324,7 @@ QAbstractButton* CDockAreaTitleBar::button(TitleBarButton which) const
|
|||||||
void CDockAreaTitleBar::setVisible(bool Visible)
|
void CDockAreaTitleBar::setVisible(bool Visible)
|
||||||
{
|
{
|
||||||
Super::setVisible(Visible);
|
Super::setVisible(Visible);
|
||||||
|
markTabsMenuOutdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +53,6 @@ private:
|
|||||||
friend struct DockAreaTitleBarPrivate;
|
friend struct DockAreaTitleBarPrivate;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void markTabsMenuOutdated();
|
|
||||||
void onTabsMenuAboutToShow();
|
void onTabsMenuAboutToShow();
|
||||||
void onCloseButtonClicked();
|
void onCloseButtonClicked();
|
||||||
void onUndockButtonClicked();
|
void onUndockButtonClicked();
|
||||||
@ -61,6 +60,10 @@ private slots:
|
|||||||
void onCurrentTabChanged(int Index);
|
void onCurrentTabChanged(int Index);
|
||||||
void showContextMenu(const QPoint& pos);
|
void showContextMenu(const QPoint& pos);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void markTabsMenuOutdated();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using Super = QFrame;
|
using Super = QFrame;
|
||||||
/**
|
/**
|
||||||
@ -88,6 +91,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void setVisible(bool Visible) override;
|
virtual void setVisible(bool Visible) override;
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
/**
|
||||||
* This signal is emitted if a tab in the tab bar is clicked by the user
|
* This signal is emitted if a tab in the tab bar is clicked by the user
|
||||||
|
@ -236,10 +236,10 @@ using DockAreaLayout = CDockAreaLayout;
|
|||||||
*/
|
*/
|
||||||
struct DockAreaWidgetPrivate
|
struct DockAreaWidgetPrivate
|
||||||
{
|
{
|
||||||
CDockAreaWidget* _this;
|
CDockAreaWidget* _this = nullptr;
|
||||||
QBoxLayout* Layout;
|
QBoxLayout* Layout = nullptr;
|
||||||
DockAreaLayout* ContentsLayout;
|
DockAreaLayout* ContentsLayout = nullptr;
|
||||||
CDockAreaTitleBar* TitleBar;
|
CDockAreaTitleBar* TitleBar = nullptr;
|
||||||
CDockManager* DockManager = nullptr;
|
CDockManager* DockManager = nullptr;
|
||||||
bool UpdateCloseButton = false;
|
bool UpdateCloseButton = false;
|
||||||
|
|
||||||
@ -680,10 +680,24 @@ void CDockAreaWidget::updateTitleBarVisibility()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (d->TitleBar)
|
||||||
|
{
|
||||||
d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget());
|
d->TitleBar->setVisible(!Container->isFloating() || !Container->hasTopLevelDockWidget());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CDockAreaWidget::markTitleBarMenuOutdated()
|
||||||
|
{
|
||||||
|
if (d->TitleBar)
|
||||||
|
{
|
||||||
|
d->TitleBar->markTabsMenuOutdated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void CDockAreaWidget::saveState(QXmlStreamWriter& s) const
|
void CDockAreaWidget::saveState(QXmlStreamWriter& s) const
|
||||||
{
|
{
|
||||||
|
@ -130,6 +130,12 @@ protected:
|
|||||||
*/
|
*/
|
||||||
void internalSetCurrentDockWidget(CDockWidget* DockWidget);
|
void internalSetCurrentDockWidget(CDockWidget* DockWidget);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marks tabs menu to update
|
||||||
|
*/
|
||||||
|
void markTitleBarMenuOutdated();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void toggleView(bool Open);
|
void toggleView(bool Open);
|
||||||
|
|
||||||
|
@ -58,8 +58,8 @@ namespace ads
|
|||||||
*/
|
*/
|
||||||
struct DockWidgetPrivate
|
struct DockWidgetPrivate
|
||||||
{
|
{
|
||||||
CDockWidget* _this;
|
CDockWidget* _this = nullptr;
|
||||||
QBoxLayout* Layout;
|
QBoxLayout* Layout = nullptr;
|
||||||
QWidget* Widget = nullptr;
|
QWidget* Widget = nullptr;
|
||||||
CDockWidgetTab* TabWidget = nullptr;
|
CDockWidgetTab* TabWidget = nullptr;
|
||||||
CDockWidget::DockWidgetFeatures Features = CDockWidget::AllDockWidgetFeatures;
|
CDockWidget::DockWidgetFeatures Features = CDockWidget::AllDockWidgetFeatures;
|
||||||
@ -516,12 +516,36 @@ bool CDockWidget::event(QEvent *e)
|
|||||||
{
|
{
|
||||||
d->ToggleViewAction->setText(title);
|
d->ToggleViewAction->setText(title);
|
||||||
}
|
}
|
||||||
|
if (d->DockArea)
|
||||||
|
{
|
||||||
|
d->DockArea->markTitleBarMenuOutdated();//update tabs menu
|
||||||
|
}
|
||||||
emit titleChanged(title);
|
emit titleChanged(title);
|
||||||
}
|
}
|
||||||
return QFrame::event(e);
|
return Super::event(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
//============================================================================
|
||||||
|
void CDockWidget::setTabToolTip(const QString &text)
|
||||||
|
{
|
||||||
|
if (d->TabWidget)
|
||||||
|
{
|
||||||
|
d->TabWidget->setToolTip(text);
|
||||||
|
}
|
||||||
|
if (d->ToggleViewAction)
|
||||||
|
{
|
||||||
|
d->ToggleViewAction->setToolTip(text);
|
||||||
|
}
|
||||||
|
if (d->DockArea)
|
||||||
|
{
|
||||||
|
d->DockArea->markTitleBarMenuOutdated();//update tabs menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void CDockWidget::setIcon(const QIcon& Icon)
|
void CDockWidget::setIcon(const QIcon& Icon)
|
||||||
{
|
{
|
||||||
|
@ -136,6 +136,8 @@ protected:
|
|||||||
void toggleViewInternal(bool Open);
|
void toggleViewInternal(bool Open);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
using Super = QFrame;
|
||||||
|
|
||||||
enum DockWidgetFeature
|
enum DockWidgetFeature
|
||||||
{
|
{
|
||||||
DockWidgetClosable = 0x01,
|
DockWidgetClosable = 0x01,
|
||||||
@ -385,6 +387,14 @@ public:
|
|||||||
QSize toolBarIconSize(eState State) const;
|
QSize toolBarIconSize(eState State) const;
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
/**
|
||||||
|
* This is function sets text tooltip for title bar widget
|
||||||
|
* and tooltip for toggle view action
|
||||||
|
*/
|
||||||
|
void setTabToolTip(const QString &text);
|
||||||
|
#endif
|
||||||
|
|
||||||
public: // reimplements QFrame -----------------------------------------------
|
public: // reimplements QFrame -----------------------------------------------
|
||||||
/**
|
/**
|
||||||
* Emits titleChanged signal if title change event occurs
|
* Emits titleChanged signal if title change event occurs
|
||||||
|
@ -153,7 +153,9 @@ void DockWidgetTabPrivate::createLayout()
|
|||||||
CloseButton->setIcon(CloseIcon);
|
CloseButton->setIcon(CloseIcon);
|
||||||
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
CloseButton->setVisible(false);
|
CloseButton->setVisible(false);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
CloseButton->setToolTip(QObject::tr("Close Tab"));
|
CloseButton->setToolTip(QObject::tr("Close Tab"));
|
||||||
|
#endif
|
||||||
_this->connect(CloseButton, SIGNAL(clicked()), SIGNAL(closeRequested()));
|
_this->connect(CloseButton, SIGNAL(clicked()), SIGNAL(closeRequested()));
|
||||||
|
|
||||||
QFontMetrics fm(TitleLabel->font());
|
QFontMetrics fm(TitleLabel->font());
|
||||||
@ -264,7 +266,7 @@ void CDockWidgetTab::mousePressEvent(QMouseEvent* ev)
|
|||||||
emit clicked();
|
emit clicked();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QFrame::mousePressEvent(ev);
|
Super::mousePressEvent(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -280,7 +282,7 @@ void CDockWidgetTab::mouseReleaseEvent(QMouseEvent* ev)
|
|||||||
|
|
||||||
d->DragStartMousePosition = QPoint();
|
d->DragStartMousePosition = QPoint();
|
||||||
d->DragState = DraggingInactive;
|
d->DragState = DraggingInactive;
|
||||||
QFrame::mouseReleaseEvent(ev);
|
Super::mouseReleaseEvent(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -290,7 +292,7 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
if (!(ev->buttons() & Qt::LeftButton) || d->isDraggingState(DraggingInactive))
|
if (!(ev->buttons() & Qt::LeftButton) || d->isDraggingState(DraggingInactive))
|
||||||
{
|
{
|
||||||
d->DragState = DraggingInactive;
|
d->DragState = DraggingInactive;
|
||||||
QFrame::mouseMoveEvent(ev);
|
Super::mouseMoveEvent(ev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +300,7 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
if (d->isDraggingState(DraggingFloatingWidget))
|
if (d->isDraggingState(DraggingFloatingWidget))
|
||||||
{
|
{
|
||||||
d->FloatingWidget->moveFloating();
|
d->FloatingWidget->moveFloating();
|
||||||
QFrame::mouseMoveEvent(ev);
|
Super::mouseMoveEvent(ev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,7 +340,7 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFrame::mouseMoveEvent(ev);
|
Super::mouseMoveEvent(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -422,7 +424,9 @@ void CDockWidgetTab::setIcon(const QIcon& Icon)
|
|||||||
d->IconLabel = new QLabel();
|
d->IconLabel = new QLabel();
|
||||||
d->IconLabel->setAlignment(Qt::AlignVCenter);
|
d->IconLabel->setAlignment(Qt::AlignVCenter);
|
||||||
d->IconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
d->IconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
d->IconLabel->setToolTip(d->TitleLabel->toolTip());
|
d->IconLabel->setToolTip(d->TitleLabel->toolTip());
|
||||||
|
#endif
|
||||||
Layout->insertWidget(0, d->IconLabel, Qt::AlignVCenter);
|
Layout->insertWidget(0, d->IconLabel, Qt::AlignVCenter);
|
||||||
Layout->insertSpacing(1, qRound(1.5 * Layout->contentsMargins().left() / 2.0));
|
Layout->insertSpacing(1, qRound(1.5 * Layout->contentsMargins().left() / 2.0));
|
||||||
}
|
}
|
||||||
@ -504,7 +508,25 @@ void CDockWidgetTab::onDetachActionTriggered()
|
|||||||
d->startFloating(DraggingInactive);
|
d->startFloating(DraggingInactive);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ads
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
bool CDockWidgetTab::event(QEvent *e)
|
||||||
|
{
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
|
if (e->type() == QEvent::ToolTipChange)
|
||||||
|
{
|
||||||
|
const auto text = toolTip();
|
||||||
|
d->TitleLabel->setToolTip(text);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return Super::event(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ads
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// EOF DockWidgetTab.cpp
|
// EOF DockWidgetTab.cpp
|
||||||
|
@ -136,6 +136,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool isClosable() const;
|
bool isClosable() const;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Track event ToolTipChange and set child ToolTip
|
||||||
|
*/
|
||||||
|
virtual bool event(QEvent *e) override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
virtual void setVisible(bool visible) override;
|
virtual void setVisible(bool visible) override;
|
||||||
|
@ -88,7 +88,9 @@ CElidingLabel::CElidingLabel(const QString& text, QWidget* parent, Qt::WindowFla
|
|||||||
d(new ElidingLabelPrivate(this))
|
d(new ElidingLabelPrivate(this))
|
||||||
{
|
{
|
||||||
d->Text = text;
|
d->Text = text;
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
setToolTip(text);
|
setToolTip(text);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -183,7 +185,9 @@ void CElidingLabel::setText(const QString &text)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
d->Text = text;
|
d->Text = text;
|
||||||
|
#ifndef QT_NO_TOOLTIP
|
||||||
setToolTip( text );
|
setToolTip( text );
|
||||||
|
#endif
|
||||||
d->elideText(this->size().width());
|
d->elideText(this->size().width());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user