Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2583408420 | ||
|
|
dec0442007 | ||
|
|
c020f82a6c | ||
|
|
c1555c30cc | ||
|
|
d6cb127320 | ||
|
|
c2373eb7de | ||
|
|
d5843ff7d3 | ||
|
|
c135782001 | ||
|
|
79c208da4f | ||
|
|
b67c4a0c84 | ||
|
|
6b9105b813 | ||
|
|
6c6e0333a9 | ||
|
|
d55387d087 | ||
|
|
bf9560f8ea | ||
|
|
ec196715e0 |
53
README.md
53
README.md
@@ -4,10 +4,11 @@
|
||||
|
||||
------------------
|
||||
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
|
||||
[](gnu-lgpl-v2.1.md)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions?query=workflow%3Alinux-builds)
|
||||
[](https://ci.appveyor.com/project/githubuser0xFFFF/qt-advanced-docking-system/branch/master)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/graphs/contributors)
|
||||
|
||||
Qt Advanced Docking System lets you create customizable layouts using a full
|
||||
@@ -15,14 +16,14 @@ featured window docking system similar to what is found in many popular
|
||||
integrated development environments (IDEs) such as Visual Studio.
|
||||
|
||||
- [What's new...](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
|
||||
- [Documentation](doc/user-guide.md)
|
||||
- Original Repository: https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System
|
||||
- [Documentation](https://githubuser0xffff.github.io/Qt-Advanced-Docking-System/doc/user-guide.html)
|
||||
- Original Repository: [https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System)
|
||||
|
||||
[](https://www.youtube.com/watch?v=7pdNfafg3Qc)
|
||||
|
||||
## New and Noteworthy
|
||||
|
||||
Release [4.1](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest) significantly improves the Auto-Hide functionality and also brings improvements
|
||||
Release [4.1](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest) significantly improves the Auto-Hide functionality and also brings improvements
|
||||
for Drag and Drop of dock widgets into dock area tabs. These are the highlights of the new version:
|
||||
|
||||
#### Drag & Drop to Auto-Hide
|
||||
@@ -57,7 +58,7 @@ That means, you can drag them to a different border or sidebar:
|
||||
|
||||
#### Auto-Hide Tab Sorting
|
||||
|
||||
You can drag Auto-Hide tabs to a new position in the current sidebar
|
||||
You can drag Auto-Hide tabs to a new position in the current sidebar
|
||||
to sort them:
|
||||
|
||||

|
||||
@@ -81,7 +82,7 @@ sidebar:
|
||||
#### Dock Area Tab Insert Order
|
||||
|
||||
And last but not least the new version also improves the docking of widgets
|
||||
into the tabs of a Dock area. Just as with Auto-Hide tabs, you can now determine the position at which a tab is inserted by moving the mouse over an already existing tab (insertion before the tab) or behind the last tab
|
||||
into the tabs of a Dock area. Just as with Auto-Hide tabs, you can now determine the position at which a tab is inserted by moving the mouse over an already existing tab (insertion before the tab) or behind the last tab
|
||||
(appending):
|
||||
|
||||

|
||||
@@ -192,6 +193,7 @@ know it from Visual Studio.
|
||||
- [ADTF 3](#adtf-3)
|
||||
- [DREAM3D-NX](#dream3d-nx)
|
||||
- [LabPlot](#labplot)
|
||||
- [Scrutiny Debugger](#scrutiny-debugger)
|
||||
- [Alternative Docking System Implementations](#alternative-docking-system-implementations)
|
||||
- [KDDockWidgets](#kddockwidgets)
|
||||
- [QtitanDocking](#qtitandocking)
|
||||
@@ -218,7 +220,7 @@ into floating windows is supported.
|
||||
|
||||
### Grouped dragging
|
||||
|
||||
When dragging the titlebar of a dock, all the tabs that are tabbed with it are
|
||||
When dragging the titlebar of a dock, all the tabs that are tabbed with it are
|
||||
going to be dragged. So you can move complete groups of tabbed widgets into
|
||||
a floating widget or from one dock area to another one.
|
||||
|
||||
@@ -231,7 +233,7 @@ a floating widget or from one dock area to another one.
|
||||
A perspective defines the set and layout of dock windows in the main
|
||||
window. You can save the current layout of the dockmanager into a named
|
||||
perspective to make your own custom perspective. Later you can simply
|
||||
select a perspective from the perspective list to quickly switch the complete
|
||||
select a perspective from the perspective list to quickly switch the complete
|
||||
main window layout.
|
||||
|
||||

|
||||
@@ -253,6 +255,7 @@ If this flag is cleared, the widget resizing is deferred until the mouse button
|
||||
In contrast to the standard Qt docking system, docking with the ADS works more like a drag & drop operation. That means, the dragged dock widget or dock area is not undocked immediately. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
|
||||
|
||||
The drag preview widget can be configured by a number of global dock manager flags:
|
||||
|
||||
- `DragPreviewIsDynamic`: if this flag is enabled, the preview will be adjusted dynamically to the drop area
|
||||
- `DragPreviewShowsContentPixmap`: the created drag preview window shows a static copy of the content of the dock widget / dock are that is dragged
|
||||
- `DragPreviewHasWindowFrame`: this flag configures if the drag preview is frameless like a QRubberBand or looks like a real window
|
||||
@@ -322,7 +325,7 @@ pip install PySide6-QtAds
|
||||
```
|
||||
|
||||
Sample code is available [here](https://github.com/mborgerson/Qt-Advanced-Docking-System/tree/pyside6/examples). To run the samples, you'll also need to install latest qtpy
|
||||
from source (pip install https://github.com/spyder-ide/qtpy/archive/refs/heads/master.zip).
|
||||
from source (pip install <https://github.com/spyder-ide/qtpy/archive/refs/heads/master.zip>).
|
||||
The PySide6 bindings were contributed by:
|
||||
|
||||
- [mborgerson](https://github.com/mborgerson)
|
||||
@@ -346,7 +349,6 @@ The PyQt6 bindings were contributed by:
|
||||
|
||||
Please file PyQt6Ads-specific issues at [pyapp-kit/PyQt6Ads](https://github.com/pyapp-kit/PyQt6Ads).
|
||||
|
||||
|
||||
### PyQt5
|
||||
|
||||
A package is available via [conda-forge](https://github.com/conda-forge/pyqtads-feedstock).
|
||||
@@ -370,21 +372,19 @@ The library supports **Qt5** and **Qt6**.
|
||||
|
||||
### Windows
|
||||
|
||||
Windows 10 [](https://ci.appveyor.com/project/githubuser0xFFFF/qt-advanced-docking-system/branch/master)
|
||||
Windows 10 / 11 [](https://ci.appveyor.com/project/githubuser0xFFFF/qt-advanced-docking-system/branch/master)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml)
|
||||
|
||||
The library was developed on and for Windows. It is used in a commercial Windows application and is therefore constantly tested.
|
||||
|
||||
### macOS
|
||||
|
||||
macOS [](https://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System)
|
||||
|
||||
The application can be compiled for macOS. A user reported, that the library works on macOS. If have not tested it.
|
||||
|
||||

|
||||
|
||||
### Linux
|
||||
|
||||
[](https://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System)
|
||||
[](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions?query=workflow%3Alinux-builds)
|
||||
|
||||
Unfortunately, there is no such thing as a Linux operating system. Linux is a heterogeneous environment with a variety of different distributions. So it is not possible to support "Linux" like it is possible for Windows. It is only possible to support and test a small subset of Linux distributions. The library can be compiled for and has been developed and tested with some Linux distributions. Depending on the used window manager or compositor, dock widgets
|
||||
@@ -613,7 +613,7 @@ highlights are:
|
||||
|
||||
### [Notepad Next](https://github.com/dail8859/NotepadNext)
|
||||
|
||||
Notepad Next is a cross-platform reimplementation of Notepad++ that uses the
|
||||
Notepad Next is a cross-platform reimplementation of Notepad++ that uses the
|
||||
Advanced Docking System to arrange the open source files on the screen.
|
||||
|
||||
[read more...](https://github.com/dail8859/NotepadNext)
|
||||
@@ -676,7 +676,7 @@ The Automotive Data and Time-Triggered Framework was designed as a Rapid Prototy
|
||||
- Recording of vehicle data for visualisation
|
||||
- Simulation of complex scenarios in SIL/HIL test environments
|
||||
|
||||
The software features time-based processing of multiple data streams and graphical editing of dynamic filter graphs. It also includes an SDK for custom plug-ins and reusable components, as well as components for data visualization in both 2D and 3D. This is was the
|
||||
The software features time-based processing of multiple data streams and graphical editing of dynamic filter graphs. It also includes an SDK for custom plug-ins and reusable components, as well as components for data visualization in both 2D and 3D. This is was the
|
||||
[manual](https://support.digitalwerk.net/adtf/v3/adtf_html/page_adtf_xsystem_plugin.html)
|
||||
says about the switch to Qt Advanced Docking:
|
||||
|
||||
@@ -708,6 +708,27 @@ The LabPlot project recently switched to the Qt Advanced Docking System for thei
|
||||
|
||||
[read more...](https://labplot.kde.org/)
|
||||
|
||||
### [Scrutiny Debugger](https://scrutinydebugger.com/)
|
||||
|
||||
Scrutiny is an [open source](https://github.com/scrutinydebugger/) non-intrusive, real-time debugger for embedded systems, built for fast introspection, memory access, and signal visualization—without stopping your application. It uses the Qt Advanced Docking System (ADS) to provide fully customizable dashboards for monitoring and control.
|
||||
|
||||
Some of the highlights are:
|
||||
|
||||
- **Debug without interfering** — Inspect C++ memory live without disrupting execution flow.
|
||||
- **HIL testing made easy** — Write to variables through the GUI or SDK to simulate conditions.
|
||||
- **Configure during production** — Access and tweak variables anytime via GUI or Python.
|
||||
- **Catch fast events** — Embedded graphs sample at task-level frequency, even with multithreading.
|
||||
- **Build your dashboard** — Use ADS to create and save custom layouts for your debug sessions.
|
||||
- **No JTAG needed** — Communicates over serial, CAN, or network interfaces.
|
||||
- **Compact C++11 library** — Lightweight and easy to integrate into your firmware.
|
||||
- **Live graphs and runtime values** — Visualize variables, RPVs, and aliases in real time.
|
||||
|
||||
ADS powers Scrutiny’s flexible interface, letting users organize views and data panels to suit their workflow — ideal for real-time monitoring, testing, and debugging.
|
||||
|
||||
[read more...](https://scrutinydebugger.com/)
|
||||
|
||||
[](https://www.youtube.com/watch?v=Dd3osxW-Clo)
|
||||
|
||||
## Alternative Docking System Implementations
|
||||
|
||||
If this Qt Advanced Docking System does not fit to your needs you may consider some of the alternative docking system solutions for Qt.
|
||||
|
||||
@@ -41,6 +41,7 @@ int main(int argc, char *argv[])
|
||||
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
#endif
|
||||
#endif
|
||||
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||
std::shared_ptr<int> b;
|
||||
QApplication a(argc, argv);
|
||||
a.setApplicationName("Advanced Docking System Demo");
|
||||
|
||||
BIN
doc/showcase_scrutiny-dark.png
Normal file
BIN
doc/showcase_scrutiny-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 197 KiB |
@@ -69,6 +69,11 @@
|
||||
- [Dock Widget Size / Minimum Size Handling](#dock-widget-size--minimum-size-handling)
|
||||
- [Styling](#styling)
|
||||
- [Disabling the Internal Style Sheet](#disabling-the-internal-style-sheet)
|
||||
- [Using ADS on Linux](#using-ads-on-linux)
|
||||
- [Supported Distributions](#supported-distributions)
|
||||
- [Requirements](#requirements)
|
||||
- [Manjaro xfce 25.0.1 and Xubuntu 24.04.2 issues](#manjaro-xfce-2501-and-xubuntu-24042-issues)
|
||||
- [OpenGl + ADS](#opengl--ads)
|
||||
|
||||
## Configuration Flags
|
||||
|
||||
@@ -953,3 +958,51 @@ just call the function for settings the stylesheet with an empty string.
|
||||
DockManager->setStyleSheet("");
|
||||
```
|
||||
|
||||
## Using ADS on Linux
|
||||
|
||||
### Supported Distributions
|
||||
|
||||
Unfortunately, there is no such thing as a Linux operating system. Linux is a heterogeneous environment with a variety of different distributions. So it is not possible to support "Linux" like it is possible for Windows. It is only possible to support and test a small subset of Linux distributions. The library can be compiled for and has been developed and tested with some Linux distributions. Depending on the used window manager or compositor, dock widgets
|
||||
with native title bars are supported or not. If native title bars are not supported,
|
||||
the library switches to `QWidget` based title bars.
|
||||
|
||||
- **Kubuntu 18.04 and 19.10** - uses KWin - no native title bars
|
||||
- **Ubuntu 18.04, 19.10 and 20.04** - native title bars are supported
|
||||
- **Ubuntu 22.04** - uses Wayland -> no native title bars
|
||||
|
||||
### Requirements
|
||||
|
||||
There are some requirements for the Linux distribution that have to be met:
|
||||
|
||||
- an X server that supports ARGB visuals and a compositing window manager. This is required to display the translucent dock overlays ([https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows](https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows)). If your Linux distribution does not support this, or if you disable this feature, you will very likely see issue [#95](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/95).
|
||||
- Wayland is not properly supported by Qt yet. If you use Wayland, then you should set the session type to x11: `XDG_SESSION_TYPE=x11 ./AdvancedDockingSystemDemo`. You will find more details about this in issue [#288](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/288).
|
||||
|
||||
Screenshot Kubuntu:
|
||||

|
||||
|
||||
Screenshot Ubuntu:
|
||||

|
||||
|
||||
### Manjaro xfce 25.0.1 and Xubuntu 24.04.2 issues
|
||||
|
||||
There is a known focus stealing issue with the xfce4 compositor reported in issue [#734]. This issue
|
||||
can be solved by enabling the setting **Activate focus stealing prevention**. `Settings > Window Manager Tweaks` has a tab called `Focus`.
|
||||
|
||||
Selecting `Activate focus stealing prevention` and `Do nothing` for `When a window raises itself`, seems to mitigate the issue. Deselecting `Enable display compositing` on the `Compositor` tab, also works.
|
||||
|
||||

|
||||
|
||||
## OpenGl + ADS
|
||||
|
||||
If you would like to use OpenGL widgets with ADS such as `GLWidget`, QML or `QWebEngineView`, then you need
|
||||
to set `QApplication::setAttribute(Qt::AA_ShareOpenGLContexts)` before creating your application and your
|
||||
widgets (see issue [#732])
|
||||
|
||||
```c++
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||
QApplication application(argc, argv);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
BIN
doc/xfce4_focus_stealing_issue.png
Normal file
BIN
doc/xfce4_focus_stealing_issue.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
@@ -33,7 +33,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
// Set central widget
|
||||
QPlainTextEdit* w = new QPlainTextEdit();
|
||||
w->setPlaceholderText("This is the central editor. Enter your text here.");
|
||||
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
|
||||
CDockWidget* CentralDockWidget = DockManager->createDockWidget("CentralWidget");
|
||||
CentralDockWidget->setWidget(w);
|
||||
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
|
||||
@@ -42,7 +42,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* table = new QTableWidget();
|
||||
table->setColumnCount(3);
|
||||
table->setRowCount(10);
|
||||
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
||||
CDockWidget* TableDockWidget = DockManager->createDockWidget("Table 1");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->setMinimumSize(200,150);
|
||||
@@ -53,7 +53,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
table = new QTableWidget();
|
||||
table->setColumnCount(5);
|
||||
table->setRowCount(1020);
|
||||
TableDockWidget = new CDockWidget("Table 2");
|
||||
TableDockWidget = DockManager->createDockWidget("Table 2");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->resize(250, 150);
|
||||
@@ -64,7 +64,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* propertiesTable = new QTableWidget();
|
||||
propertiesTable->setColumnCount(3);
|
||||
propertiesTable->setRowCount(10);
|
||||
CDockWidget* PropertiesDockWidget = new CDockWidget("Properties");
|
||||
CDockWidget* PropertiesDockWidget = DockManager->createDockWidget("Properties");
|
||||
PropertiesDockWidget->setWidget(propertiesTable);
|
||||
PropertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
PropertiesDockWidget->resize(250, 150);
|
||||
|
||||
@@ -35,14 +35,14 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
// Set central widget
|
||||
QPlainTextEdit* w = new QPlainTextEdit();
|
||||
w->setPlaceholderText("This is the central editor. Enter your text here.");
|
||||
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
|
||||
CDockWidget* CentralDockWidget = DockManager->createDockWidget("CentralWidget");
|
||||
CentralDockWidget->setWidget(w);
|
||||
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
|
||||
|
||||
{
|
||||
DroppableItem* droppableItem = new DroppableItem("Drop text here.");
|
||||
CDockWidget* dropDockWidget = new CDockWidget("Tab 1");
|
||||
CDockWidget* dropDockWidget = DockManager->createDockWidget("Tab 1");
|
||||
dropDockWidget->setWidget(droppableItem);
|
||||
dropDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
dropDockWidget->setMinimumSize(200,150);
|
||||
@@ -54,7 +54,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
}
|
||||
{
|
||||
DroppableItem* droppableItem = new DroppableItem("Drop text here.");
|
||||
CDockWidget* dropDockWidget = new CDockWidget("Tab 2");
|
||||
CDockWidget* dropDockWidget = DockManager->createDockWidget("Tab 2");
|
||||
dropDockWidget->setWidget(droppableItem);
|
||||
dropDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
dropDockWidget->setMinimumSize(200,150);
|
||||
@@ -68,7 +68,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* propertiesTable = new QTableWidget();
|
||||
propertiesTable->setColumnCount(3);
|
||||
propertiesTable->setRowCount(10);
|
||||
CDockWidget* PropertiesDockWidget = new CDockWidget("Properties");
|
||||
CDockWidget* PropertiesDockWidget = DockManager->createDockWidget("Properties");
|
||||
PropertiesDockWidget->setWidget(propertiesTable);
|
||||
PropertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
PropertiesDockWidget->resize(250, 150);
|
||||
|
||||
@@ -40,7 +40,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
// Set central widget
|
||||
QPlainTextEdit* w = new QPlainTextEdit();
|
||||
w->setPlaceholderText("This is the central editor. Enter your text here.");
|
||||
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
|
||||
CDockWidget* CentralDockWidget = DockManager->createDockWidget("CentralWidget");
|
||||
CentralDockWidget->setWidget(w);
|
||||
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
|
||||
@@ -49,7 +49,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* table = new QTableWidget();
|
||||
table->setColumnCount(3);
|
||||
table->setRowCount(10);
|
||||
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
||||
CDockWidget* TableDockWidget = DockManager->createDockWidget("Table 1");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->resize(250, 150);
|
||||
@@ -60,7 +60,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
table = new QTableWidget();
|
||||
table->setColumnCount(5);
|
||||
table->setRowCount(1020);
|
||||
TableDockWidget = new CDockWidget("Table 2");
|
||||
TableDockWidget = DockManager->createDockWidget("Table 2");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->resize(250, 150);
|
||||
@@ -71,7 +71,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* propertiesTable = new QTableWidget();
|
||||
propertiesTable->setColumnCount(3);
|
||||
propertiesTable->setRowCount(10);
|
||||
CDockWidget* PropertiesDockWidget = new CDockWidget("Properties");
|
||||
CDockWidget* PropertiesDockWidget = DockManager->createDockWidget("Properties");
|
||||
PropertiesDockWidget->setWidget(propertiesTable);
|
||||
PropertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
PropertiesDockWidget->resize(250, 150);
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include <QToolBar>
|
||||
|
||||
#include "DockAreaWidget.h"
|
||||
#include "DockAreaTitleBar.h"
|
||||
|
||||
|
||||
using namespace ads;
|
||||
@@ -36,7 +35,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
|
||||
l1->setWordWrap(true);
|
||||
l1->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
l1->setText("Docking widget 1");
|
||||
ads::CDockWidget *dockWidget1 = new ads::CDockWidget("Dock 1");
|
||||
ads::CDockWidget *dockWidget1 = DockManager->createDockWidget("Dock 1");
|
||||
dockWidget1->setWidget(l1);
|
||||
DockManager->addDockWidget(ads::LeftDockWidgetArea, dockWidget1);
|
||||
|
||||
@@ -44,7 +43,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
|
||||
l2->setWordWrap(true);
|
||||
l2->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
l2->setText("Docking widget 2");
|
||||
ads::CDockWidget *dockWidget2 = new ads::CDockWidget("Dock 2");
|
||||
ads::CDockWidget *dockWidget2 = DockManager->createDockWidget("Dock 2");
|
||||
dockWidget2->setWidget(l2);
|
||||
DockManager->addDockWidget(ads::RightDockWidgetArea, dockWidget2);
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
int i = 0;
|
||||
QObject::connect(action, &QAction::triggered, [&]() {
|
||||
auto dw = new ads::CDockWidget(QStringLiteral("test %1 [DockWidgetDeleteOnClose]").arg(i++), &w);
|
||||
auto dw = dockManager->createDockWidget(QStringLiteral("test %1 [DockWidgetDeleteOnClose]").arg(i++), &w);
|
||||
auto editor = new QTextEdit(QStringLiteral("lorem ipsum..."), dw);
|
||||
dw->setWidget(editor);
|
||||
dw->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
|
||||
@@ -54,7 +54,7 @@ int main(int argc, char *argv[])
|
||||
qDebug() << "doc dock widget created!" << dw << area;
|
||||
});
|
||||
|
||||
auto dw = new ads::CDockWidget(QStringLiteral("test %1 [DeleteContentOnClose]").arg(i++), &w);
|
||||
auto dw = dockManager->createDockWidget(QStringLiteral("test %1 [DeleteContentOnClose]").arg(i++), &w);
|
||||
auto editor = new QTextEdit(QStringLiteral("recreated lorem ipsum......"), dw);
|
||||
dw->setWidget(editor);
|
||||
dw->setFeature(ads::CDockWidget::DeleteContentOnClose, true);
|
||||
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
|
||||
action = new QAction("New", &w);
|
||||
w.menuBar()->addAction(action);
|
||||
QObject::connect(action, &QAction::triggered, [&]() {
|
||||
auto dw = new ads::CDockWidget(QStringLiteral("test %1").arg(i++), &w);
|
||||
auto dw = dockManager->createDockWidget(QStringLiteral("test %1").arg(i++), &w);
|
||||
auto editor = new QTextEdit(QStringLiteral("lorem ipsum..."), dw);
|
||||
dw->setWidget(editor);
|
||||
auto area = dockManager->addDockWidgetTab(ads::CenterDockWidgetArea, dw);
|
||||
|
||||
@@ -54,7 +54,7 @@ ads::CDockAreaWidget* DockInDockWidget::addTabWidget( QWidget* widget, const QSt
|
||||
}
|
||||
}
|
||||
|
||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(name);
|
||||
ads::CDockWidget* DockWidget = m_mgr->createDockWidget(name);
|
||||
DockWidget->setWidget(widget);
|
||||
DockWidget->setIcon( icon );
|
||||
|
||||
@@ -101,7 +101,7 @@ DockInDockWidget* DockInDockWidget::createGroup( const QString& groupName, QIcon
|
||||
DockInDockWidget* child = new DockInDockWidget( this, m_topLevelDockWidget, m_perspectivesManager );
|
||||
child->setObjectName( groupName );
|
||||
|
||||
ads::CDockWidget* DockWidget = new ads::CDockWidget(groupName);
|
||||
ads::CDockWidget* DockWidget = m_mgr->createDockWidget(groupName);
|
||||
DockWidget->setWidget(child);
|
||||
DockWidget->setIcon(icon);
|
||||
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
#include <QToolBar>
|
||||
|
||||
#include "DockAreaWidget.h"
|
||||
#include "DockAreaTitleBar.h"
|
||||
#include "DockAreaTabBar.h"
|
||||
#include "FloatingDockContainer.h"
|
||||
#include "DockComponentsFactory.h"
|
||||
|
||||
@@ -44,7 +42,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QLabel* label = new QLabel();
|
||||
label->setText("This is a DockArea which is always visible, even if it does not contain any DockWidgets.");
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
|
||||
CDockWidget* CentralDockWidget = DockManager->createDockWidget("CentralWidget");
|
||||
CentralDockWidget->setWidget(label);
|
||||
CentralDockWidget->setFeature(ads::CDockWidget::NoTab, true);
|
||||
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
|
||||
@@ -53,7 +51,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* table = new QTableWidget();
|
||||
table->setColumnCount(3);
|
||||
table->setRowCount(10);
|
||||
CDockWidget* TableDockWidget = new CDockWidget("Table 1");
|
||||
CDockWidget* TableDockWidget = DockManager->createDockWidget("Table 1");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->resize(250, 150);
|
||||
@@ -65,7 +63,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
table = new QTableWidget();
|
||||
table->setColumnCount(5);
|
||||
table->setRowCount(1020);
|
||||
TableDockWidget = new CDockWidget("Table 2");
|
||||
TableDockWidget = DockManager->createDockWidget("Table 2");
|
||||
TableDockWidget->setWidget(table);
|
||||
TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
TableDockWidget->resize(250, 150);
|
||||
@@ -76,7 +74,7 @@ CMainWindow::CMainWindow(QWidget *parent)
|
||||
QTableWidget* propertiesTable = new QTableWidget();
|
||||
propertiesTable->setColumnCount(3);
|
||||
propertiesTable->setRowCount(10);
|
||||
CDockWidget* PropertiesDockWidget = new CDockWidget("Properties");
|
||||
CDockWidget* PropertiesDockWidget = DockManager->createDockWidget("Properties");
|
||||
PropertiesDockWidget->setWidget(propertiesTable);
|
||||
PropertiesDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||
PropertiesDockWidget->resize(250, 150);
|
||||
|
||||
@@ -35,7 +35,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
|
||||
// Create a dock widget with the title Label 1 and set the created label
|
||||
// as the dock widget content
|
||||
ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1");
|
||||
ads::CDockWidget* DockWidget = m_DockManager->createDockWidget("Label 1");
|
||||
DockWidget->setWidget(l);
|
||||
|
||||
// Add the toggleViewAction of the dock widget to the menu to give
|
||||
|
||||
@@ -28,7 +28,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
|
||||
// Create a dock widget with the title Label 1 and set the created label
|
||||
// as the dock widget content
|
||||
ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1");
|
||||
ads::CDockWidget* DockWidget = m_DockManager->createDockWidget("Label 1");
|
||||
DockWidget->setWidget(l);
|
||||
|
||||
// Add the toggleViewAction of the dock widget to the menu to give
|
||||
@@ -42,7 +42,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
// Create an example editor
|
||||
QPlainTextEdit* te = new QPlainTextEdit();
|
||||
te->setPlaceholderText("Please enter your text here into this QPlainTextEdit...");
|
||||
DockWidget = new ads::CDockWidget("Editor 1");
|
||||
DockWidget = m_DockManager->createDockWidget("Editor 1");
|
||||
DockWidget->setWidget(te);
|
||||
ui->menuView->addAction(DockWidget->toggleViewAction());
|
||||
m_DockManager->addDockWidget(ads::BottomDockWidgetArea, DockWidget);
|
||||
|
||||
@@ -24,7 +24,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
|
||||
// Create a dock widget with the title Label 1 and set the created label
|
||||
// as the dock widget content
|
||||
ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1");
|
||||
ads::CDockWidget* DockWidget = m_DockManager->createDockWidget("Label 1");
|
||||
DockWidget->setWidget(l);
|
||||
|
||||
// Add the toggleViewAction of the dock widget to the menu to give
|
||||
|
||||
@@ -7,10 +7,16 @@ if (${QT_VERSION_MAJOR})
|
||||
else()
|
||||
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||
endif()
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets REQUIRED)
|
||||
if (UNIX AND NOT APPLE)
|
||||
|
||||
set(ads_DEP_LIBS Core Gui Widgets)
|
||||
if (UNIX AND NOT APPLE AND QT_VERSION_MAJOR STREQUAL "6" AND QT_VERSION_MINOR GREATER 8)
|
||||
set(ads_DEP_LIBS Core Gui GuiPrivate Widgets)
|
||||
endif()
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${ads_DEP_LIBS} REQUIRED)
|
||||
if (UNIX AND NOT APPLE AND QT_VERSION_MAJOR STREQUAL "6" AND QT_VERSION_MINOR GREATER 8)
|
||||
include_directories(${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
if(BUILD_STATIC)
|
||||
set(CMAKE_STATIC_LIBRARY_SUFFIX "_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
|
||||
@@ -60,7 +60,7 @@ struct AutoHideDockContainerPrivate;
|
||||
|
||||
/**
|
||||
* Container that manages a number of dock areas with single dock widgets
|
||||
* or tabyfied dock widgets in each area.
|
||||
* or tabified dock widgets in each area.
|
||||
* Each window that support docking has a DockContainerWidget. That means
|
||||
* the main application window and all floating windows contain a
|
||||
* DockContainerWidget instance.
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
#include "FloatingDockContainer.h"
|
||||
#include "DockOverlay.h"
|
||||
#include "DockManager.h"
|
||||
#include "IconProvider.h"
|
||||
#include "DockFocusController.h"
|
||||
|
||||
|
||||
@@ -540,13 +539,14 @@ QMenu* CDockWidgetTab::buildContextMenu(QMenu *Menu)
|
||||
Menu = new QMenu(this);
|
||||
}
|
||||
|
||||
qDebug() << "CDockWidgetTab::buildContextMenu";
|
||||
const bool isFloatable = d->DockWidget->features().testFlag(CDockWidget::DockWidgetFloatable);
|
||||
const bool isNotOnlyTabInContainer = !d->DockArea->dockContainer()->hasTopLevelDockWidget();
|
||||
const bool isTopLevelArea = d->DockArea->isTopLevelArea();
|
||||
const bool isDetachable = isFloatable && isNotOnlyTabInContainer;
|
||||
const bool isFloating = d->DockWidget->isFloating();
|
||||
const bool isDetachable = isFloatable && !isFloating;
|
||||
QAction* Action;
|
||||
|
||||
if (!isTopLevelArea)
|
||||
if (!(isTopLevelArea && isFloating))
|
||||
{
|
||||
Action = Menu->addAction(tr("Detach"), this, SLOT(detachDockWidget()));
|
||||
Action->setEnabled(isDetachable);
|
||||
@@ -570,7 +570,7 @@ QMenu* CDockWidgetTab::buildContextMenu(QMenu *Menu)
|
||||
Action->setEnabled(isClosable());
|
||||
if (d->DockArea->openDockWidgetsCount() > 1)
|
||||
{
|
||||
Action = Menu->addAction(tr("Close Others"), this, SIGNAL(closeOtherTabsRequested()));
|
||||
Menu->addAction(tr("Close Others"), this, SIGNAL(closeOtherTabsRequested()));
|
||||
}
|
||||
|
||||
return Menu;
|
||||
|
||||
Reference in New Issue
Block a user