Qt-Advanced-Docking-System/README.md

112 lines
5.3 KiB
Markdown
Raw Normal View History

2016-01-19 19:21:06 +08: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.
2016-01-19 19:21:06 +08:00
![Layout of widgets](preview.png)
![Dropping widgets](preview-dragndrop.png)
2016-02-17 17:57:28 +08:00
2016-02-19 19:41:15 +08:00
## 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.
2016-02-19 19:41:15 +08:00
You can run the demo project and test it yourself.
2016-01-19 19:21:06 +08:00
## Release & Development
2016-02-19 19:41:15 +08:00
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_
```cpp
#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;
};
```
2016-02-19 19:41:15 +08:00
## Developers
[Manuel Freiholz](https://mfreiholz.de), Project Maintainer
2016-01-19 19:21:06 +08:00
2016-02-19 19:41:15 +08:00
## License information
![WTFPL](license.png)
This projects uses the [WTFPL license](http://www.wtfpl.net/)
(Do **W**hat **T**he **F**uck You Want To **P**ublic **L**icense)
Using it? Let us know by creating a [new issue](https://github.com/mfreiholz/qt-docks/issues/new) (You don't have to, of course).
## Credits
- Drop indicator images from [Code Project Article](http://www.codeproject.com/Articles/140209/Building-a-Docking-Window-Management-Solution-in-W)
## ToDo List & Changelog
Items sorted by priority
### Beta 0.2
2016-03-02 18:39:16 +08:00
- [ ] Use scrolling for SectionWidget tabs?
2016-02-19 19:41:15 +08:00
- [ ] 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.
2016-02-19 19:41:15 +08:00
- [ ] `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.
2016-02-19 19:41:15 +08:00
- [ ] Empty splitters, if only 2 or 1 items are in container
- [ ] Restore: Handle out-of-screen geometry for floating widgets
2016-03-02 18:39:16 +08:00
- [ ] 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)
2016-03-16 20:29:05 +08:00
- [ ] Dropping floating-widgets on the edge should be possible even if there is no margin/padding.
2016-02-17 21:52:22 +08:00
### Beta 0.1
2016-02-17 17:57:28 +08:00
- [x] Improve FloatingWidget (Remove maximize button, only support close-button which hides the widget)
- [x] Serialize and Deserialize state/size/positions of dockings
- [x] Make compatible with Qt 4.5 (\*ROFL!\*)
- [x] Save and restore FloatingWidget states
- [x] Restore: Manage new or deleted SectionContent objects, which are not available
2016-02-17 21:52:22 +08:00
- [x] Working with outer-edge-drops sometimes leaves empty splitters #BUG
- [x] Clean up of unused e.g. count()<=1 QSplitters doesn't work well #BUG
- [x] Show close button on right corner of SectionWidget. How to safe last section position?
- [x] Serialize state of `_hiddenSectionContents`
- [x] Add "title" to SectionContent object, which will be used in visible areas to display contents name.
- [x] It should be possible to catch the "activeTabChanged" signal for EXTERN_API users
- [x] Add API function to set an SC as active-tab
2016-03-02 18:39:16 +08:00
- [x] 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!
2016-02-17 21:52:22 +08:00
### Some day...
2016-02-17 17:57:28 +08:00
- [ ] 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
2016-02-17 21:58:47 +08:00
- [ ] API: Make it possible to use custom drop images
- [ ] API: Add possibility to make a SectionContent element floatable (`ContainerWidget::setFloating(SectionContent*)`?)
2016-02-19 19:41:15 +08:00
## 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.
2016-03-09 19:02:31 +08:00
- 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" :-)