Files
KDDockWidgets/tests/fuzzer/9.json
Sergio Martins 97c1ca30fd Layouting engine rewrite
The layouting was becoming too complex to maintain and to introduce
new features. Was even buggy, the fuzzer was constantly finding
bugs, which took hours to workaround.

Problem with the old layout engine is that there was a catch 22, between
Items driving the separators, and separators driving the anchors.

The new layout is much simpler, both in implementation and conceptually.
There's simply a recursive hierarchy of Item elements. An Item can either
have a QWidget to show, or be a ItemContainer, which contains Item children,
and so forth. Each ItemContainer is either vertical or horizontal. That's enough
to represent the "nested multi-splitter" concept which KDDW uses.

After each item insertion/deletion/resize, the separators are regenerated. They
are essentially dumb now.

TODO:
- Separators are drawn, but are not interactive yet
- There's 5 tests failing
- LayoutSaver scalling functionality
2020-05-04 00:02:03 +01:00

1017 lines
30 KiB
JSON

{
"initialLayout": {
"dockWidgets": [
{
"geometry": {
"size": {
"height": 457,
"width": 898
},
"x": 131,
"y": 431
},
"isFloating": false,
"isVisible": true,
"minSize": {
"height": 225,
"width": 414
},
"name": "DockWidget-1"
},
{
"geometry": {
"size": {
"height": 955,
"width": 963
},
"x": 382,
"y": 290
},
"isFloating": true,
"isVisible": false,
"minSize": {
"height": 452,
"width": 505
},
"name": "DockWidget-2"
},
{
"geometry": {
"size": {
"height": 508,
"width": 882
},
"x": 402,
"y": 346
},
"isFloating": false,
"isVisible": true,
"minSize": {
"height": 288,
"width": 350
},
"name": "DockWidget-3"
}
],
"mainWindows": [
{
"geometry": {
"size": {
"height": 1004,
"width": 133
},
"x": 55,
"y": 484
},
"mainWindowOption": 0,
"name": "MainWindow-1"
}
]
},
"operations": [
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1 to left",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "AddDockWidgetAsTab DockWidget-3 onto DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1",
"dockWidgetToAddName": "DockWidget-3"
},
"type": 5
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to top, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to bottom, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to top, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to bottom, relative to DockWidget-2",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-2"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to left",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "Hidding DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 2
},
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "Showing DockWidget-2-[hidden]",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 3
},
{
"comment": "AddDockWidgetAsTab DockWidget-1-[hidden] onto DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2",
"dockWidgetToAddName": "DockWidget-1"
},
"type": 5
},
{
"comment": "AddDockWidget DockWidget-1 to left, relative to DockWidget-2-[hidden]",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-2"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to bottom, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-3 to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to right, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 3,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to left, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-2 to bottom",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 4,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-2 to bottom, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to right",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 3,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-2 to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidgetAsTab DockWidget-1-[hidden] onto DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2",
"dockWidgetToAddName": "DockWidget-1"
},
"type": 5
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to bottom, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to right",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 3,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "Hidding DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 2
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to left",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 1,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to left",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to bottom, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to left, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "Showing DockWidget-2-[hidden]",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 3
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "AddDockWidgetAsTab DockWidget-1-[hidden] onto DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3",
"dockWidgetToAddName": "DockWidget-1"
},
"type": 5
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3 to bottom",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 4,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to bottom",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 4,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Hidding DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-1 to left, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "AddDockWidgetAsTab DockWidget-2-[hidden] onto DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1",
"dockWidgetToAddName": "DockWidget-2"
},
"type": 5
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to right",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 3,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "AddDockWidget DockWidget-1 to left, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "AddDockWidgetAsTab DockWidget-2-[hidden] onto DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1",
"dockWidgetToAddName": "DockWidget-2"
},
"type": 5
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "Showing DockWidget-3-[hidden]",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 3
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to left, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to left, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to bottom",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 4,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3 to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1 to top, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to left, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to bottom",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 4,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to top, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-2 to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "AddDockWidget DockWidget-3 to left, relative to DockWidget-2",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 1,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-2"
},
"type": 4
},
{
"comment": "Closing DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 1
},
{
"comment": "AddDockWidgetAsTab DockWidget-3-[hidden] onto DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2",
"dockWidgetToAddName": "DockWidget-3"
},
"type": 5
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "AddDockWidget DockWidget-1 to right, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 3,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "AddDockWidget DockWidget-2-[hidden] to top, relative to DockWidget-1",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-2 to top, relative to DockWidget-3",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-2",
"location": 2,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-3"
},
"type": 4
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to bottom, relative to DockWidget-2",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 4,
"mainWindowName": "MainWindow-1",
"relativeToName": "DockWidget-2"
},
"type": 4
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "Showing DockWidget-2-[hidden]",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 3
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "Closing DockWidget-2",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 1
},
{
"comment": "AddDockWidget DockWidget-1-[hidden] to left",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-1",
"location": 1,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Closing DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 1
},
{
"comment": "Showing DockWidget-1-[hidden]",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 3
},
{
"comment": "Hidding DockWidget-1",
"params": {
"dockWidgetName": "DockWidget-1"
},
"type": 2
},
{
"comment": "AddDockWidget DockWidget-3-[hidden] to top",
"params": {
"addingOption": 0,
"dockWidgetName": "DockWidget-3",
"location": 2,
"mainWindowName": "MainWindow-1"
},
"type": 4
},
{
"comment": "Hidding DockWidget-3",
"params": {
"dockWidgetName": "DockWidget-3"
},
"type": 2
},
{
"comment": "Showing DockWidget-2-[hidden]",
"params": {
"dockWidgetName": "DockWidget-2"
},
"type": 3
}
]
}