Improves the MaterialTreeWidget beyond minimum viable product.
- Filters can now be filter lists to allow a variety of filtering
options.
- User preferences allow the inclusion/exclusion of favorites and
recents.
- Widget state such as expansion, tree expansions, etc are saved and
restored.
- show current appearancee material when editing.
- implements a python interface
#fixes 13421: always opens full tree
* The MouseDelay pref does not belong in the "Grid and snapping" pref group.
* Max. value was missing. Without it the spinbox only goes to 100.
* The 3600 suggestion was removed from the tooltip as it is an unworkable value. But entering it is possible now.
onChanged() triggers for the first time before all of the properties are
loaded, so it can fail to compute properly at that stage, depending on
the load order.
However, it's not necessary to compute geometry in onChanged() at all,
because that's usually supposed to happen in execute() anyway. The
solution here is to just not do onChanged() at all.
Fixes#13558
There were several issues here, not just one. The following are fixed:
Incorrect display of Quantity items (NaN)
Editing and updating quantity items
Editing and updating items on the first row.
There are still issues with editing lists, but these were known issues at the time of initial merge. This has been split out into issue #13435fixes#13020
When restarting the application (e.g. after installing an addon) the application will be closed and a new instance will be launched. Now it can happen that the old instance is still busy writing the config files to disk while the new instance wants to read them in. At this time it's possible that a config file is in an invalid state so that the new instance will ignore it but then starts with a default configuration.
Later when closing the new instance the config files will be overwritten and destroy the user's original settings.
By using a lock file this race condition will be avoided. It uses a timeout of 1 second that should be enough for the old instance to write the files to disk.
The ShapeAppearance is a list of materials and thus assigning a color with 'obj.ViewObject.ShapeAppearance.DiffuseColor = color'
is incorrect.
But doing it with 'obj.ViewObject.ShapeAppearance[0].DiffuseColor = color' doesn't work as expected because the
internal notification doesn't work with a list.
So, the only viable way is to revert the changes and do it by assigning the color to the 'ShapeColor' attribute.