Commit Graph

266 Commits

Author SHA1 Message Date
Sergio Martins
16e99dac8b Fix rectForDrop() when one of the sides didn't have more space
The layout guarantees that there's enough space for the widget
and for the new anchor, but doesn't say in which side the new
anchor should steal space from, so bound the rect when we finish
calculating it

Finally we can uncomment the warning in Anchor::setPosition() to
detect out of bounds cases, tests pass now with no warning
2019-07-17 17:59:20 +01:00
Sergio Martins
e3f49653c3 Fix typo in rectForDrop(), found by unit-test 2019-07-17 15:47:47 +01:00
Sergio Martins
6d5116f7cf tests++ 2019-07-17 14:55:21 +01:00
Sergio Martins
f65fdef13e tests: More tests for rectForDrop() 2019-07-17 12:03:45 +01:00
Sergio Martins
9fe0a191eb Remove unneeded test, in the hope of removing MultiSplitterLayout::resizeItem()
which is not the correct way to resize items
2019-07-17 11:46:51 +01:00
Sergio Martins
fc380eab72 More tests for rectForDrop() 2019-07-17 11:46:42 +01:00
Sergio Martins
2b45aab88d Propagate closing events
FloatingWindow now asks Frame if it should close
Frame asks its DockWidgets
DockWidget asks its widget
2019-07-16 22:36:08 +01:00
Sergio Martins
0abc315584 Share some tests code in utils.cpp 2019-07-16 22:13:22 +01:00
Sergio Martins
3c4dba77bf Add tests/utils.h
tst_docks.cpp is becoming too big
2019-07-16 21:38:45 +01:00
Sergio Martins
007f483069 Support re-docking a frame with multiple dock widgets 2019-07-16 14:42:43 +01:00
Sergio Martins
b6c0353f7b Fix anchor following not being updated when an item is removed 2019-07-16 11:54:20 +01:00
Sergio Martins
4a0bd209b8 Fix ASSERT in Anchor::setFollower() 2019-07-15 23:44:35 +01:00
Sergio Martins
a848810239 Add a failing test 2019-07-15 23:19:03 +01:00
Sergio Martins
8a6758c93d Fix buggy Anchor::findNearestAnchorWithItems()
It was returning inside the loop, instead of honouring the candidate
2019-07-15 22:46:27 +01:00
Sergio Martins
0eb746ad22 Uncomment test that passes 2019-07-15 20:12:27 +01:00
Sergio Martins
1cdf9e1c9a Add unit-test for checking that widgets preserve position after restored 2019-07-15 16:57:40 +01:00
Sergio Martins
8d31bb85fa Fix clazy warnings 2019-07-15 13:10:17 +01:00
Sergio Martins
c96eb88023 Fix choosing which anchors to move when restoring placeholders 2019-07-15 00:16:58 +01:00
Sergio Martins
0aac8edb0c Fix off by ones in rectForDrop()
It was accounting for the anchor thickness
2019-07-14 21:39:11 +01:00
Sergio Martins
d05c1adcd7 tests: Allow EventFilter wait for any event 2019-07-14 20:14:42 +01:00
Sergio Martins
c1563b6f86 Fix bug where widget didn't have the correct size after restored
Because the anchor already had the correct position it wouldn't
update the widget size
2019-07-14 18:32:19 +01:00
Sergio Martins
5fe3d72732 Clean windows at end of test 2019-07-14 17:07:57 +01:00
Sergio Martins
320556c775 Add a failing unit-test
The widget isn't being resized
2019-07-14 16:56:13 +01:00
Sergio Martins
c7f0eb704a Abstract widgets min sizes behind Item
The layout now only consults Item for the min size, never
the widgets directly. The reason is Item in the future will have
to detect the widget's min size changing, so it's better encapsulated
this way. Also decouples the layout from QWidget a bit, so in the future
we can support QML

The direct consequence is fixing the warnings about size constraints
not being honoured, due to widget getting different min size and we not
resizing
2019-07-14 14:20:11 +01:00
Sergio Martins
353dc4474c Fix restoring a floating window in some cases
MultiSplitterLayout::unrefOldPlaceholders() was clear all placeholder
references for that dock widget, but when using addMultiSplitter()
we don't create a new Item, we just steal the Items from the source
multi splitter, so we need to preserve those refs

Added unit-test
2019-07-14 13:08:24 +01:00
Sergio Martins
8fdb6fb5de Improve failing test 2019-07-13 13:39:43 +01:00
Sergio Martins
8d2206c137 Add a comment 2019-07-13 12:59:59 +01:00
Sergio Martins
f55f90e575 Remove wrong assert, the Item can be still being refed by other widgets
Like dock widgets that where set floating and remember their previous
positions. The item will only be deleted if refcount is 0
2019-07-13 12:57:06 +01:00
Sergio Martins
bb59b3bedb Add a failing test 2019-07-13 12:45:53 +01:00
Sergio Martins
105bb6770b Add a failing test for a feature we don't support yet
When adding a dock widget to a tab we don't check its minimum size
and we don't resize the layout, yet.
2019-07-13 03:01:53 +01:00
Sergio Martins
7709803e57 Make the setFollowee() stuff much simpler
It was getting quite crazy to figure out which anchors to follow
when restoring dock widgets in complex layouts full of hidden items.

Now, the approach is much simpler, we just call setFollowee(nullptr)
on all anchors, then swipe left and right, top and bottom and
set the anchors that really need to follow
2019-07-12 12:58:11 +01:00
Sergio Martins
f0e9a4f1bc Add another failing test 2019-07-11 14:10:25 +01:00
Sergio Martins
b4864d156f Don't assert that the group is squashed
It can happen
2019-07-11 14:02:11 +01:00
Sergio Martins
e5fbbdae6c Improve finding the right anchors for restoring placeholders 2019-07-11 12:58:35 +01:00
Sergio Martins
dab0694dbc Introduce Anchor::findNearestAnchorWithItems()
As a cleaner alternative than abusing AnchorGroup::turnIntoPlaceholder()
as the item was already a placeholder
2019-07-10 19:11:10 +01:00
Sergio Martins
90502ae5c7 When adding widgets relative to placeholders don't forget to set following 2019-07-10 18:24:33 +01:00
Sergio Martins
91704fd486 Uncomment a few tests that are passing 2019-07-10 16:39:30 +01:00
Sergio Martins
3f73a99a71 Update followers whenever the followee anchor is deleted 2019-07-10 16:10:30 +01:00
Sergio Martins
fa23d954b1 Add a failing unit-test 2019-07-10 15:34:13 +01:00
Sergio Martins
b8d5fefbf1 Allow to add a dock widget directly as a placeholder
So it's not visible at startup if not needed
2019-07-10 12:24:36 +01:00
Sergio Martins
9052d93794 Fix adding a widget to a layout that already contains it
It should work, since we can be moving a widget to another
location
2019-07-10 11:20:20 +01:00
Sergio Martins
2c989ad5e8 Validate the parameters before creating the Frame
otherwise we're left with a dummy frame
2019-07-09 22:43:55 +01:00
Sergio Martins
c682a6966e Add tests for several stealing scenarios 2019-07-09 21:33:49 +01:00
Sergio Martins
66995c1ff9 Warn when there's dock widgets with duplicate name 2019-07-09 11:01:55 +01:00
Sergio Martins
30feb6c221 Fix unit-tests when the debug window is visible
the unit-tests make sure that no window survives after each test
2019-07-09 10:54:43 +01:00
Sergio Martins
4818b22575 Fix typo 2019-07-09 09:56:18 +01:00
Sergio Martins
11f6fc53f9 Fix resize propagation when dragging separators
Never call setPosition() directly in an Anchor that's following
another, instead do it in its folowee
2019-07-08 18:09:57 +01:00
Sergio Martins
feed814d7c Fix crash 2019-07-08 15:49:00 +01:00
Sergio Martins
efea35a948 Add a failing test 2019-07-08 15:41:04 +01:00
Sergio Martins
1ac2a52ba6 Fix redistributing space after a window resize when there's placeholders
It was using the anchor->minPosition() of anchors that only had placeholders
on Side1, which is bogus. Instead, we should use the last valid minPosition
2019-07-08 15:03:14 +01:00