* Tools: Add ExpressionLineEdit to QtDesigner plugin
* Spreadsheet: Only use validator when when prefix is not '='
---------
Co-authored-by: wmayer <wmayer@freecad.org>
* fix#21330: prevent hover tooltip from covering menu items
Instead of showing the tooltip at the mouse cursor,
it is now displayed to the right of the corresponding
menu option, avoiding overlap with the menu itself.
* Update src/Gui/Action.cpp
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Removes displayText from the searchboxes result, as it's being handled
differently and there are two other fields that store this previously
concatenated information separately.
This PR introduces search box in preferences.
Features:
*supports left click on the result, taking user to the result
*clicking anywhere cancels searching and closes popup box, same with ESC
key
*double click on the result closes the popup too (same behavior as
enter)
*supports enter (although if you are on the position you are already
on it so enter just closes the popup basically)
*escape closes it
*you can navigate through the list with mouse
*support fuzzy search so stuff like "OVP" is being matched to "On-View-Parameters"
*there is hierarchical display (tab/page/setting)
*some of the results are prioritized but fuzzy search prioritizing is the most important
*highlights found item
*goes to tab/page of found item
*if the pop-up box won't fit next to the right side of the screen,
it is added underneath the search box
As the title says, if right now there is Arch type active (like Level,
Building, etc. etc.), then it's not possible to assign Group to it
automatically (it's being created on root level of the document).
So this patch basically takes an active object and tries to insert it.
This patch adds/changes a couple of things:
* if you press enter on a label now, it moves you to another label and
adds the label and lock on the previous label, instead of previous behavior
where it was accepting whole dimension
* if you press enter and have lock state on both labels then you move to
next stage
* if you press ctrl+enter it's as is if you'd press enter on both labels
(the object becomes constrained with whatever dimensions that were in
both labels)
* tab still works the same way
* you can remove "Lock" state from the label by typing something
additional or removing the dimension at all
Small regression of mine, basically this signal to remove set/locked
state of EditableDatumLabel should be only sent out if current text in
the label is empty or it doesn't contain digits.
Previously it was emitted every intermediate wrong state, so stuff like
"71." was also being matched, and it resulted in resetting the locked
state of the label, which in turn resulted in keeping user from entering
float values.
This patch fixes crashes that we've noticed during migration from Qt5 to
Qt6 in recent months.
If you select items in a tree in a specific direction or range (all, or
from bottom to top) and delete them, there is a high change user will
experience a crash in `testStatus` function. This problem arises because
we're getting into use-after-free situation.
Looking at the callstack there are a lot of calls to
`itemSelectionChanged` during deletion, which takes over item creation
after deletion in `TreeWidget::_slotDeleteObject`. This in turn causes
`DocumentObjectItem::testStatus` to be called prematurely when we have
dangling pointers in object map still. `itemSelectionChanged` signal is
being transmitted because the selection range is changing as we're
constantly deleting and readding certain items.
Previously there was `blockSelection` call during deletion, but it turns
out the signals can still be emitted even AFTER we delete the item. This
had to somehow change between Qt5 and Qt6. So, to be safe, move the
signal block for selection before the obj deletion loop to be sure we
won't retransmit this signal during an uncertain state.
paddlestroke:
> Here we actually need to keep App::Origin. Because we do not allow deletion ONLY of origin objects. Not of normal LCS.
While the original code:
```cpp
auto origin = dynamic_cast<App::Origin*>(lcs);
if (origin && !origin->getInList().empty()) {
```
...handles this perfectly fine, intent isn't obvious when reading it.
Using `is<T>()` shows intent better and should avoid similar situations in the future.
* use early exit to highlight main execution path
* use `auto*` for pointer
* use getObject<T>() instead of casting result from getObject()
* remove empty updateData()
* rename origin to lcs in setTemporaryVisibility for clarity
This is a left-over of the regressions introduced with PR 18126.
Thanks to some moderinization of the code base and replacing static with dynamic casts undefined behaviour
has changed to well-defined behaviour but now unchecked null pointers.
This change does some extra null pointer checks and uses the now correct types for down casting.
Hint: Upstream still uses many static casts here that already cause undefined behaviour when creating a LCS.
This could be the reason for the possible crashes when deleting a LCS as described in 20261
# Conflicts:
# src/Gui/ViewProviderCoordinateSystem.cpp
Until 8de6382 ("Gui: Fix stackoverflow when loading corrupted file")
a static_cast was used to obtain App::Origin object, however with
introducing App::LocalCoordinateSystem this was no longer correct,
although not causing any troubles as OriginFeatures moved into
LocalCoordinateSystem as well.
Recent use of getObject template triggered this problem, so use now
correct cast to App::LocalCoordinateSystem.
Fixes: 19702dc ("Core: Add App::LocalCoordinateSystem")