mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-05 18:54:14 +02:00
Click again on a member of a selected group to pick it on its own
Clicking an item of a group selects the whole group (#1070). Clicking again on one of its items is meant to select just that item, to edit it on its own -- what discussion #1070 proposed -- but the second click selected the whole group again: Qt left only the clicked item selected on release, and the group completion pulled the others back in. A press on a member of a group that is selected whole now notes that member (ItemGroups::memberToPick(), which also finds the member when the click lands on a symbol's own text). If the click ends without a drag and Qt has left only that member selected, the selection stays so. A drag still moves the whole group; Ctrl+click keeps its meaning; a group of one is not picked from. In the GUI, on two grouped texts: one click then Delete removes both (master and this); click, click again, Delete removes only the clicked text here, both on master; dragging after one click moves both texts by the same amount on both. tst_itemgroups: 5 new checks; removing the whole-group or the group-of-one condition fails one each. ctest 24/24. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -121,6 +121,48 @@ private slots:
|
||||
b = nullptr;
|
||||
}
|
||||
|
||||
// A second click on a member of a group selected whole picks that member
|
||||
// out; a click on a member of a group not selected whole does not.
|
||||
void aMemberOfAWholeGroupCanBePicked()
|
||||
{
|
||||
select({a, b});
|
||||
QCOMPARE(ItemGroups::memberToPick(a), a);
|
||||
QCOMPARE(ItemGroups::memberToPick(b), b);
|
||||
}
|
||||
|
||||
void aMemberOfAPartlySelectedGroupIsNotPicked()
|
||||
{
|
||||
select({a}); // after one member was picked
|
||||
QCOMPARE(ItemGroups::memberToPick(a), nullptr);
|
||||
select({});
|
||||
QCOMPARE(ItemGroups::memberToPick(a), nullptr);
|
||||
}
|
||||
|
||||
void anUngroupedItemIsNotPicked()
|
||||
{
|
||||
select({c});
|
||||
QCOMPARE(ItemGroups::memberToPick(c), nullptr);
|
||||
QCOMPARE(ItemGroups::memberToPick(nullptr), nullptr);
|
||||
}
|
||||
|
||||
void aGroupOfOneIsNotPicked()
|
||||
{
|
||||
ItemGroups::setGroup(e, QUuid()); // g2 is now d alone
|
||||
select({d});
|
||||
QCOMPARE(ItemGroups::memberToPick(d), nullptr);
|
||||
}
|
||||
|
||||
// A click lands on a symbol's own text, not on the symbol: the member is
|
||||
// the nearest grouped ancestor.
|
||||
void aClickOnAMembersChildPicksTheMember()
|
||||
{
|
||||
auto child = new QGraphicsRectItem(0, 0, 2, 2, a);
|
||||
QCOMPARE(ItemGroups::groupedItem(child), a);
|
||||
select({a, b});
|
||||
QCOMPARE(ItemGroups::memberToPick(child), a);
|
||||
QCOMPARE(ItemGroups::groupedItem(c), nullptr);
|
||||
}
|
||||
|
||||
void xmlRoundTrip()
|
||||
{
|
||||
QDomDocument doc;
|
||||
|
||||
Reference in New Issue
Block a user