Commit Graph

6100 Commits

Author SHA1 Message Date
sliptonic
01dbe102f2 Merge pull request #19725 from chennes/cmakeUpdates2025
CMake: Clean up policies
2025-02-24 17:33:10 +01:00
Kevin Martin
41f09db9e1 Address performance of existing unique-name generation (Part 2) (#18676)
As described in Issue 16849, the existing Tools::getUniqueName method
requires calling code to form a vector of existing names to be avoided.

This leads to poor performance both in the O(n) cost of building such a
vector and also getUniqueName's O(n) algorithm for actually generating
the unique name (where 'n' is the number of pre-existing names).

This has  particularly noticeable cost in documents with large numbers
of DocumentObjects because generating both Names and Labels for each new
object incurs this cost. During an operation such as importing this
results in an O(n^2) time spent generating names.

The other major cost is in the saving of the temporary backup file,
which uses name generation for the "files" embedded in the Zip file.
Documents can easily need several such "files" for each object in the
document.

This update includes the following changes to use the newly-added
UniqueNameManager as a replacement for the old Tools::getUniqueName
method and deletes the latter to remove any temptation to use it as
its usage model breeds inefficiency:

Eliminate Tools::getUniqueName, its local functions, and its unit tests.

Make DocumentObject naming use the new UniqueNameManager class.

Make DocumentObject Label naming use the new UniqueNameManager class.
This needs to monitor DocumentObject Labels for changes since this
property is not read-only. The special handling for the Label
property, which includes optionally forcing uniqueness and updating
links in referencing objects, has been mostly moved from
PropertyString to DocumentObject.

Add Document::containsObject(DocumentObject*) for a definitive
test of an object being in a Document. This is needed because
DocumentObjects can be in a sort of limbo (e.g. when they are in the
Undo/Redo lists) where they have a parent linkage to the Document but
should not participate in Label collision checks.

Rename Document.getStandardObjectName to getStandardObjectLabel
to better represent what it does.

Use new UniqueNameManager for Writer internal filenames within the zip
file.

Eliminate unneeded Reader::FileNames collection. The file names
already exist in the FileList collection elements. The only existing
use for the FileNames collection was to determine if there were any
files at all, and with FileList and FileNames being parallel
vectors, they both had the same length so FileList could be used
for this test..

Use UniqueNameManager for document names and labels. This uses ad hoc
UniqueNameManager objects created on the spot on the assumption that
document creation is relatively rare and there are few documents, so
although the cost is O(n), n itself is small.

Use an ad hoc UniqueNameManager to name new DymanicProperty entries.
This is only done if a property of the proposed name already exists,
since such a check is more-or-less O(log(n)), almost never finds a
collision, and avoids the O(n) building of the UniqueNameManager.
If there is a collision an ad-hoc UniqueNameManager is built
and discarded after use.
The property management classes have a bit of a mess of methods
including several to populate various collection types with all
existing properties. Rather than introducing yet another such
collection-specific method to fill a UniqueNameManager, a
visitProperties method was added which calls a passed function for
each property. The existing code (e.g. getPropertyMap) would be
simpler if they all used this but the cost of calling a lambda
for each property must be considered. It would clarify the semantics
of these methods, which have a bit of variance in which properties
populate the passed collection, e.g. when there are duplicate names..
Ideally the PropertyContainer class would keep a central directory of
all properties ("static", Dynamic, and exposed by ExtensionContainer and
other derivations) and a permanent UniqueNameManager. However the
Property management is a bit of a mess making such a change a project
unto itself.
2025-02-24 10:23:53 -06:00
Chris Hennes
2780c9b13e Merge pull request #19397 from kadet1090/three-point-lighting
Add three-point lighting
2025-02-24 16:22:34 +00:00
mosfet80
ab8f178e0e Clean StartupProcess.cpp (#19642)
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
2025-02-24 10:21:26 -06:00
Kaung Zin Hein
df2c6637e6 Gui: "Open File Location/Reveal in Finder" in Tree view (#19805)
* Add: barebone openFileLocation on linux
* Feat: Add handling for different types of os
* Fix: Use preprocessors
* Fix: directive typo

---------

Signed-off-by: Kaung Zin Hein <83657429+Zen-cronic@users.noreply.github.com>
2025-02-24 10:15:28 -06:00
Chris Hennes
2c485cf998 Merge pull request #19253 from Jonezzzzz/SketcherGroupCommandsFix
Sketcher: Fixed Inconsistency between button tooltips and labeling for shortcuts.
2025-02-23 22:20:07 +00:00
Kacper Donat
2f35f1c561 Base: Add fromPercent and toPercent helpers 2025-02-23 22:51:13 +01:00
Kacper Donat
7f984811e8 Gui: Add 3 point lighting 2025-02-23 22:51:13 +01:00
Syres916
236de12a5f [Gui] Expression dialog OK, capitalised and Alt+O shortcut applied 2025-02-23 16:51:04 +01:00
Chris Hennes
699e1bd463 Gui: Change variable name import->importCommand
import is a reserved word in c++latest
2025-02-22 20:48:43 -06:00
GHDE
f494c2059b fixed openExternalLinks in DlbAbout (FreeCAD#16423) 2025-02-22 12:00:39 -06:00
Chris Hennes
574579196b Merge pull request #19660 from adrianinsaval/fix-spnav-regression
Fix spnav not enabled by default on linux after #19226 and #19407
2025-02-21 14:20:55 -06:00
Kacper Donat
12a69fe296 Base: Add isNullOrEmpty string helper
This adds isNullOrEmpty string helper that cheks if string is... well
null or empty. It is done to improve readability of the code and better
express intent.
2025-02-21 15:04:43 +01:00
Alfredo Monclus
c4a4ce3ae0 style: simplify fx icon to be more legible at small sizes 2025-02-20 19:59:56 +01:00
Benjamin Bræstrup Sayoc
dda05369c4 Base: remove unneeded includes 2025-02-18 11:07:57 -06:00
Adrian Insaurralde
a7ba57c708 Gui: hide legacy spacemouse support PrefCheckBox if navlib isn't enabled 2025-02-18 00:11:16 -03:00
Adrian Insaurralde
a862071e3e Fix spnav not enabled by default on linux after #19226 and #19407 2025-02-17 23:58:13 -03:00
Benjamin Bræstrup Sayoc
ed4a630a43 Gui: use QStringLiteral 2 2025-02-16 19:52:30 +01:00
Joao Matos
27ebc68a11 CMake: Modernize build files using outdated Python variables. 2025-02-16 10:21:26 -06:00
Andrea
de9bd5e1ce change MIN_boost_version
ubuntu version 20.04 is no longer supported.
The minimum boost version used for freecad is now 1.74 (ubuntu 22.04) https://launchpad.net/ubuntu/jammy/+package/libboost-system-dev
2025-02-15 13:33:32 -06:00
tritao
9636068460 Base: Move zipios library to 3rdParty folder. 2025-02-14 13:08:28 -06:00
tritao
05bdb40c12 Gui: Clean up XML bindings. 2025-02-14 13:05:29 -06:00
Ulices
e16c462916 Core: Remove link from tooltip (#19120)
It's impossible to click on the link because the tooltip fades away

---------

Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
2025-02-14 10:56:52 -06:00
Alfredo Monclus
5c97fc094b fix(Gui): transparencies issues when using overlays
refactor: use replace to avoid numbering

refactor: fix the lint warnings

refactor: fix clazy complaints

refactor: apply review recommendation
2025-02-14 10:50:26 -06:00
Chris Hennes
c962dbbeb6 Merge pull request #19167 from alfrix/hole_new_taskpanel
feat(PD): hole taskpanel: new image based cut panel
2025-02-11 17:22:16 -06:00
Syres916
62c5267e64 [Gui] fix the FPS text visibilty issues raised in #19371 (#19385)
* [Gui] fix the FPS text visibilty issues
* [Gui] code efficiency based on suggestions
* [Gui] update color parameter
* [Gui] Fix Lint feedback
* [Gui] check if string is empty
2025-02-11 13:16:29 -06:00
Alfredo Monclus
da4f584a50 PD(hole taskpanel): apply review suggestions
* refactor: change to ternary op
* refactor: apply recommendations to widgets
* refactor: use QSignalBlocker
* refactor: address some compiler complaints
* refactor: add namespace Gui to new widgets
2025-02-11 12:23:13 -06:00
Alfredo Monclus
3202dde7ca PD(hole taskpanel): Add custom widget for font-scaled SVGs
* feat: add custom widget for font scaled svgs
* refactor(PD): hole taskpanel svg tweaks
* fix(PD): build link on windows
2025-02-11 11:31:38 -06:00
Alfredo Monclus
be3ce13a7c PD(hole taskpanel): Add image-based hole cut panel
* feat(PD): hole taskpanel: new image based cut panel
* fix(PD): hole taskpanel fix dynamic cut types
* refactor(PD): hole taskpanel: renames and vlayouts to keep labels closer
* fix(PD): hole diagram tweaks
2025-02-11 11:31:17 -06:00
Chris Hennes
a4901e2ccb Merge pull request #19142 from hyarion/refactor/add-template-addobject
Add new addObject<T>() function
2025-02-11 09:42:47 -06:00
Karliss
cb8c193408 Workaround for transparency problems on wayland.
Reset alpha channel value to 1 at the end of 3d  rendering. The way Qt handles OpenGL widgets with transparent pixels in their final output is inconsistent.
2025-02-11 07:59:28 -06:00
Benjamin Nauck
a1c5767643 Mod: Use new addObject<T>(...) using regex 2025-02-10 18:35:38 +01:00
Benjamin Bræstrup Sayoc
f647d4a1eb Gui: Use QStringLiteral 2025-02-10 18:34:57 +01:00
Chris Hennes
aa76a63abf Merge pull request #19420 from tritao/gui-selection-refactor
Gui: Selection code cleanups
2025-02-10 10:56:23 -06:00
tritao
e94d1cf872 Base: Remove Boost-based filesystem and switch to standard <filesystem> 2025-02-10 10:48:54 -06:00
tritao
ad584fa351 Gui: Check if document exists in View3DInventorViewer::setOverrideMode. 2025-02-10 10:33:22 -06:00
Chris Hennes
6b59e4b2ec Merge pull request #19479 from tritao/base-cleanup-xml-generation
Base: Minor cleanups to base XML bindings generation
2025-02-10 09:34:50 -06:00
tritao
10513144d9 Base: Standardize on Py::Long type for Python bindings. 2025-02-08 13:14:22 +00:00
xtemp09
5317d25254 Assembly: Fix the crash described in #18475 2025-02-07 17:39:03 -06:00
Chris Hennes
9986dfe4f2 Gui: Disable spacemouse init if not legacy 2025-02-06 16:49:18 -05:00
Chris Hennes
b051185ae0 Merge pull request #19433 from tritao/gui-general-code-cleanups
Gui: General code cleanups
2025-02-06 11:33:44 -06:00
tritao
4de3a1a99e Gui: Use SO_SWITCH_NONE instead of -1. 2025-02-06 10:06:04 +00:00
tritao
1e6bdc9fd3 Gui: Update MSVC legacy code comments from ViewProviderLink. 2025-02-06 10:06:04 +00:00
tritao
48f0f07176 Gui: Reorganize the navigation files into a top Navigation folder. 2025-02-05 20:21:00 -06:00
tritao
3b47599e43 Gui: Minor cleanups. 2025-02-05 22:13:07 +00:00
tritao
9e6c6682d8 Gui: Cleanup legacy code. 2025-02-05 19:19:40 +00:00
tritao
9e1fa947e5 Gui: Fix single usage of SelectionSingleton::instance(). 2025-02-05 13:14:00 +00:00
tritao
8d6775e837 Gui: Rename SoFCHighlightAction to preselect terminology. 2025-02-05 13:14:00 +00:00
tritao
0f675bb635 Gui: Rename SoFCEnableHighlightAction to preselection terminology. 2025-02-05 13:14:00 +00:00
tritao
18299a6d83 Gui: Change SoFCSelection from highlight to preselection terminology. 2025-02-05 13:14:00 +00:00