* Major refactor of tree view to support external linking.
* Item update and selection change are now mostly handled by timer for
performance improvement.
* Major change to drag and drop for better support of switching between
copy, move and replace action, and auto adjustment of placement and
relative link.
* Add second column for user changable object description.
* Unified tree view options and action into command group
Std_TreeViewActions.
* Modified object search function to find external objects using
Expression syntax.
Context aware selection makes it possible to select the same Coin3D node
in different hierarchies (i.e. context) without ambiguity.
New/modified APIs in ViewProvider (the first two are the most crucial
APIs for context aware selection to work):
* getElementPicked(), supercedes getElement(). Given a Coin3D pick
point, this function returns a dot separated subname reference as a
path leads to the selected object.
* getDetailPath(), supercedes getDetail(). Given a subname reference,
this function returns an SoFullPath leads to the Coin3D node of the
selected object or sub-element (with SoDetail).
* (has)HiddenMarker(), check/return a special text marker for context
aware override of object visibility.
* partialRender(), render only part of the object based on given
subname references. It can render, e.g. some faces of a solid, or
some children of a container. It uses the 'secondary' extension of
SoSelectionElementAction to select which elements to render or hide.
The actually rendering functionality will be added in the following
patch.
* update()/onChanged(), modified to sync Visibility property from
DocumentObject.
* useNewSelectionModel(), modified to return the default true view
parameter. This is for test in the early stage of Link development,
probably not needed anymore.
* getBoundingBox(), a convenience function to obtain the bounding box
of a sub-object/element regardless of object's visibility. It uses
getDetailPath() and SoGetBoundingBoxAction to obtain bounding box
through Coin3D. It will be used in later sub-element box selection
functionality.
New/modified APIs in ViewProviderDocumentObject:
* getElementPicked()/getDetailPath() provides actual implementation to
support container like (sub)object selection without ambiguity. It
relies on DocumentObject::getSubObject() to walk the path.
* reattach(), called when undo deleteion
* forceUpdate()/isUpdateForced(), force update even if object is
invisible. These are used by Link to force update the visual of a
linked object regardless of its visibility.
* getLinkedViewProvider(), return the linked view provider with
hierarchy.
ViewProviderDocumentObjectPy:
* Object attribute is made writtable. Assigning it is equaivalant of
calling ViewProviderDocumentObject::attach() in Python.
Property:
* Extended property status bitset. Mirror most of PropertyType and
allow dynamic change property type.
* Cache property name and type to improve performance
* Centralize property status change signalling
* Change aboutToSetValue()/hasSetValue() to virtual
* Add new API getFullName() to obtain full quanlified name of the property
AtomicPropertyChangeInterface:
* Allow calling aboutToSetValue()/hasSetValue() when actually changed
PropertyLists:
* Refactor implementation by an abstract class PropertyListBase and a
template class PropertyListsT, to allow better code reuse.
PropertyListT is derived from AtomicPropertyChangeInterface to allow
more efficient change on individual elements.
* All list type property now accept setting python value as a dictionary
with index as key to set individual element of a list.
* Add touch list for more efficient handling of value changes. The list
contains the index of changed value. And empty touch list should be
treated as the entire list is changed. PropertyContainerPy expose this
functionality with getPropertyTouchList().
PropertyPersistentObject:
* New property to allow dynamic creation of any FreeCAD object derived
from Base::Persistence, and use it as a property.
DynamicProperty:
* Use boost multi_index_container for efficient property lookup while
keeping order.
* Modify to be allowed to use in PropertyContainer directly
PropertyContainer:
* Use boost multi_index_container for efficient property lookup while
keeping order.
* Allow adding/removing dynamic property on all property container
* Modify Save/Restore() to persist property status, and better handle
transient property which can now be dynamically enabled/disabled per
object.
* Add new API getFullName() to obtain full quanlified name of the property.
Implemented by Document, DocumentObject, and also
ViewProviderDocumentObject if future patch
DocumentObject and FeaturePython are modified to accommondate the
dynamic property changes.
Removed get/setCustomAttribute() implementation from DocumentObjectPy,
and rely on PropertyContainerPy for the implementation, because of the
additional dynamic property support in property container.
Gui::ViewProviderDocumentObject, which is derived from
PropertyContainer, is also modified accordingly
In the long time of parallel assembly development an own drag'n'drop interface has been added to master and assembly branch. After merge both have been available. This commit removes one and keeps the more extensive implementation
+ fix SoAutoZoomTranslation and SoZoomTranslation to get correct scaling factor
(do not rely on active view because this can be the wrong one and thus delivers wrong results)