mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-11-15 13:15:43 +08:00
Added showcase for DockComponentsFactory - a help button is injected into a title bar
This commit is contained in:
parent
ff1439c719
commit
65eeffd5e1
@ -73,6 +73,8 @@
|
|||||||
#include "DockAreaTitleBar.h"
|
#include "DockAreaTitleBar.h"
|
||||||
#include "DockAreaTabBar.h"
|
#include "DockAreaTabBar.h"
|
||||||
#include "FloatingDockContainer.h"
|
#include "FloatingDockContainer.h"
|
||||||
|
#include "DockComponentsFactory.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
@ -142,6 +144,25 @@ static QIcon svgIcon(const QString& File)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
class CCustomComponentsFactory : public ads::CDockComponentsFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using Super = ads::CDockComponentsFactory;
|
||||||
|
ads::CDockAreaTitleBar* createDockAreaTitleBar(ads::CDockAreaWidget* DockArea) const override
|
||||||
|
{
|
||||||
|
auto TitleBar = Super::createDockAreaTitleBar(DockArea);
|
||||||
|
auto CustomButton = new QToolButton(DockArea);
|
||||||
|
CustomButton->setToolTip(QObject::tr("Help"));
|
||||||
|
CustomButton->setIcon(svgIcon(":/adsdemo/images/help_outline.svg"));
|
||||||
|
CustomButton->setAutoRaise(true);
|
||||||
|
int Index = TitleBar->indexOf(TitleBar->button(ads::TitleBarButtonTabsMenu));
|
||||||
|
TitleBar->insertWidget(Index + 1, CustomButton);
|
||||||
|
return TitleBar;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu)
|
static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu)
|
||||||
{
|
{
|
||||||
@ -202,28 +223,29 @@ static ads::CDockWidget* createEditorWidget(QMenu* ViewMenu)
|
|||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
static ads::CDockWidget* createTableWidget(QMenu* ViewMenu)
|
static ads::CDockWidget* createTableWidget(QMenu* ViewMenu)
|
||||||
{
|
{
|
||||||
static int TableCount = 0;
|
static int TableCount = 0;
|
||||||
QTableWidget* w = new QTableWidget();
|
QTableWidget* w = new QTableWidget();
|
||||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Table %1").arg(TableCount++));
|
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Table %1").arg(TableCount++));
|
||||||
static int colCount = 5;
|
static int colCount = 5;
|
||||||
static int rowCount = 30;
|
static int rowCount = 30;
|
||||||
w->setColumnCount(colCount);
|
w->setColumnCount(colCount);
|
||||||
w->setRowCount(rowCount);
|
w->setRowCount(rowCount);
|
||||||
for (int col = 0; col < colCount; ++col)
|
for (int col = 0; col < colCount; ++col)
|
||||||
{
|
{
|
||||||
w->setHorizontalHeaderItem(col, new QTableWidgetItem(QString("Col %1").arg(col+1)));
|
w->setHorizontalHeaderItem(col, new QTableWidgetItem(QString("Col %1").arg(col+1)));
|
||||||
for (int row = 0; row < rowCount; ++row)
|
for (int row = 0; row < rowCount; ++row)
|
||||||
{
|
{
|
||||||
w->setItem(row, col, new QTableWidgetItem(QString("T %1-%2").arg(row + 1).arg(col+1)));
|
w->setItem(row, col, new QTableWidgetItem(QString("T %1-%2").arg(row + 1).arg(col+1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DockWidget->setWidget(w);
|
DockWidget->setWidget(w);
|
||||||
DockWidget->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
|
DockWidget->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
|
||||||
ViewMenu->addAction(DockWidget->toggleViewAction());
|
ViewMenu->addAction(DockWidget->toggleViewAction());
|
||||||
return DockWidget;
|
return DockWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -318,7 +340,11 @@ void MainWindowPrivate::createContent()
|
|||||||
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetMovable, false);
|
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetMovable, false);
|
||||||
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);
|
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);
|
||||||
appendFeaturStringToWindowTitle(FileSystemWidget);
|
appendFeaturStringToWindowTitle(FileSystemWidget);
|
||||||
|
|
||||||
|
// Test custom factory - we inject a help button into the title bar
|
||||||
|
ads::CDockComponentsFactory::setFactory(new CCustomComponentsFactory());
|
||||||
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
|
||||||
|
ads::CDockComponentsFactory::resetDefaultFactory();
|
||||||
|
|
||||||
// We create a calender widget and clear all flags to prevent the dock area
|
// We create a calender widget and clear all flags to prevent the dock area
|
||||||
// from closing
|
// from closing
|
||||||
|
@ -12,5 +12,6 @@
|
|||||||
<file>images/custom-menu-button.svg</file>
|
<file>images/custom-menu-button.svg</file>
|
||||||
<file>app.css</file>
|
<file>app.css</file>
|
||||||
<file>images/plus.svg</file>
|
<file>images/plus.svg</file>
|
||||||
|
<file>images/help_outline.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -44,17 +44,24 @@ CDockAreaTitleBar* CDockComponentsFactory::createDockAreaTitleBar(CDockAreaWidge
|
|||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
const CDockComponentsFactory* CDockComponentsFactory::defaultFactory()
|
const CDockComponentsFactory* CDockComponentsFactory::factory()
|
||||||
{
|
{
|
||||||
return DefaultFactory.get();
|
return DefaultFactory.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
void CDockComponentsFactory::setDefaultFactory(CDockComponentsFactory* Factory)
|
void CDockComponentsFactory::setFactory(CDockComponentsFactory* Factory)
|
||||||
{
|
{
|
||||||
DefaultFactory.reset(Factory);
|
DefaultFactory.reset(Factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CDockComponentsFactory::resetDefaultFactory()
|
||||||
|
{
|
||||||
|
DefaultFactory.reset(new CDockComponentsFactory());
|
||||||
|
}
|
||||||
} // namespace ads
|
} // namespace ads
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// INCLUDES
|
// INCLUDES
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
#include "ads_globals.h"
|
||||||
|
|
||||||
namespace ads
|
namespace ads
|
||||||
{
|
{
|
||||||
class CDockWidgetTab;
|
class CDockWidgetTab;
|
||||||
@ -30,7 +32,7 @@ class CDockWidget;
|
|||||||
* CDockComponentsFactory::setDefaultFactory(new MyComponentsFactory()));
|
* CDockComponentsFactory::setDefaultFactory(new MyComponentsFactory()));
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
class CDockComponentsFactory
|
class ADS_EXPORT CDockComponentsFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -45,13 +47,18 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Returns the default components factory
|
* Returns the default components factory
|
||||||
*/
|
*/
|
||||||
static const CDockComponentsFactory* defaultFactory();
|
static const CDockComponentsFactory* factory();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a new default factory for creation of GUI elements.
|
* Sets a new default factory for creation of GUI elements.
|
||||||
* This function takes ownership of the given Factory.
|
* This function takes ownership of the given Factory.
|
||||||
*/
|
*/
|
||||||
static void setDefaultFactory(CDockComponentsFactory* Factory);
|
static void setFactory(CDockComponentsFactory* Factory);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the current factory to the
|
||||||
|
*/
|
||||||
|
static void resetDefaultFactory();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +67,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
inline const CDockComponentsFactory* componentsFactory()
|
inline const CDockComponentsFactory* componentsFactory()
|
||||||
{
|
{
|
||||||
return CDockComponentsFactory::defaultFactory();
|
return CDockComponentsFactory::factory();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ads
|
} // namespace ads
|
||||||
|
Loading…
Reference in New Issue
Block a user