Advanced Docking System for Qt
Go to file
2016-04-01 09:58:26 +02:00
AdvancedDockingSystem Build: Moves source file list into separate *.pri file. 2016-04-01 09:58:26 +02:00
AdvancedDockingSystemDemo fixes qt4 compatibility 2016-04-01 09:53:30 +02:00
.astylerc Adds possibility to remove section contents. 2016-03-14 15:12:34 +01:00
.gitignore Init commit for GitHub. 2015-12-09 12:21:38 +01:00
.travis.yml Updates travis script. 2016-02-21 17:00:40 +01:00
build.pro Refactoring: Renames saveGeometry to saveState.. same for restore. 2016-02-12 11:43:34 +01:00
license.png Updates README, adds license. 2016-02-19 12:41:15 +01:00
preview-dragndrop.png Updates default stylesheet and demo app 2016-03-08 14:24:33 +01:00
preview.png Updates default stylesheet and demo app 2016-03-08 14:24:33 +01:00
README.md Adds prototype classes for better serialization. 2016-03-31 14:47:19 +02:00

Advanced Docking System

Manages content widgets more like Visual Studio or similar programs. I also try to get everything done with basic Qt functionality. Basic usage of QWidgets an QLayouts and using basic styles as much as possible.

Layout of widgets Dropping widgets

Tested Compatible Environments

  • Windows 10 / Qt 5.5.1 / VC12
  • Windows 10 / Qt 5.5.1 / MinGW
  • Windows 10 / Qt 4.5.3 / VC9
  • Ubuntu 15.10

Build

Open the build.pro with QtCreator and start the build, that's it. You can run the demo project and test it yourself.

Release & Development

The master branch is not guaranteed to be stable or does not even build, since it is the main working branch. If you want a version that builds, you should always use a release/beta tag.

Getting started / Example

MyWindow.h

#include <QMainWindow>
#include "ads/API.h"
#include "ads/ContainerWidget.h"
#include "ads/SectionContent.h"
class MyWindow : public QMainWindow
{
	Q_OBJECT
public:
	QMainWindow(QWidget* parent);
	
private:
	ADS_NS::ContainerWidget _container;
};

Developers

Manuel Freiholz, Project Maintainer

License information

WTFPL

This projects uses the WTFPL license (Do What The Fuck You Want To Public License)

Using it? Let us know by creating a new issue (You don't have to, of course).

Credits

ToDo List & Changelog

Items sorted by priority

Beta 0.2

  • Use scrolling for SectionWidget tabs?
  • It would be easier when the SectionTitleWidget and SectionContentWidget are created inside the "SectionContent::newSectionContent(..)" method. This would make sure, that those two objects always exists.
  • ContainerWidget::showSectionContent needs to insert the SC at the correct preferred position of SW
  • It should be possible to drop a floating widget directly into the SW's tab-bar.
  • Empty splitters, if only 2 or 1 items are in container
  • Restore: Handle out-of-screen geometry for floating widgets
  • Better handling of sizes when dropping contents. Currently it's unpredictable. It might be good to use the same width/height as the parent content, if dropped on existing content. In case of outer-drop we might use the preferred size of the content.
  • Floating widget should be a real window with all of its functionality (maximize and split by moving it to the edge of the screen)
  • Dropping floating-widgets on the edge should be possible even if there is no margin/padding.

Beta 0.1

  • Improve FloatingWidget (Remove maximize button, only support close-button which hides the widget)
  • Serialize and Deserialize state/size/positions of dockings
  • Make compatible with Qt 4.5 (*ROFL!*)
  • Save and restore FloatingWidget states
  • Restore: Manage new or deleted SectionContent objects, which are not available
  • Working with outer-edge-drops sometimes leaves empty splitters #BUG
  • Clean up of unused e.g. count()<=1 QSplitters doesn't work well #BUG
  • Show close button on right corner of SectionWidget. How to safe last section position?
  • Serialize state of _hiddenSectionContents
  • Add "title" to SectionContent object, which will be used in visible areas to display contents name.
  • It should be possible to catch the "activeTabChanged" signal for EXTERN_API users
  • Add API function to set an SC as active-tab
  • Move all lookup maps into ContainterWidget as non-static members, otherwise we can not have the same SC name inside another ContainerWidget instance. The uniqueness of a SectionContainer needs to be restricted to its parent ContainerWidget, not global!

Some day...

  • Drop indicator images should be fully visible over the DropOverlay rectangle
  • Pin contents: Pins a content and its title widget to the edge and opens on click/hover as long as it has focus
  • API: Make it possible to use custom drop images
  • API: Add possibility to make a SectionContent element floatable (ContainerWidget::setFloating(SectionContent*)?)

Notes

  • SectionContent class may safe a "size-type" property, which defines how the size of the widget should be handled.
    • PerCent: Resize in proportion to other widgets.
    • Fixed: Width or height are fixed (based on orientation).

Handle content drops (Sizing)

  • Case: Dropping A to the bottom or top of B (vertical split):

    • A will use the width of B
    • A will use it's own height, if it is not greater than the half height of B. Otherwise it will use the half height of B.
  • Case: Dropping A to the left or right of B (horizontal split)

    • ... Same as before, but swap the words "height" with "width" :-)
  • Case: Dropping A to the outer top or bottom edge (full vertical split):

    • A will use the full width of the container
    • A will use it's own height, if it is not greater than the half height of the entire container. Otherwise it will use the half height of the container.
  • Case: Dropping A to the outer left or right edge (full horizontal split):

    • ... Same as before, but swap the words "height" with "width" :-)