Merge pull request #4626 from pavltom/GUI_TreeView_Item_Ordering
[Gui] Issue #3923 - Add arbitrary Tree View item ordering
This commit is contained in:
@@ -66,6 +66,8 @@ FC_LOG_LEVEL_INIT("Gui",true,true)
|
||||
using namespace Gui;
|
||||
|
||||
|
||||
int ViewProviderDocumentObject::lastTreeRank = 0;
|
||||
|
||||
PROPERTY_SOURCE(Gui::ViewProviderDocumentObject, Gui::ViewProvider)
|
||||
|
||||
ViewProviderDocumentObject::ViewProviderDocumentObject()
|
||||
@@ -90,6 +92,8 @@ ViewProviderDocumentObject::ViewProviderDocumentObject()
|
||||
"Element: On top only if some sub-element of the object is selected");
|
||||
OnTopWhenSelected.setEnums(OnTopEnum);
|
||||
|
||||
ADD_PROPERTY_TYPE(TreeRank, (0), dogroup, App::PropertyType(App::Prop_Hidden|App::Prop_NoPersist), "Tree view item ordering key");
|
||||
|
||||
sPixmap = "Feature";
|
||||
}
|
||||
|
||||
@@ -221,6 +225,14 @@ void ViewProviderDocumentObject::onChanged(const App::Property* prop)
|
||||
? SoFCSelectionRoot::Box : SoFCSelectionRoot::Full;
|
||||
}
|
||||
}
|
||||
else if (prop == &TreeRank) {
|
||||
if (this->TreeRank.getValue() <= 0) {
|
||||
this->TreeRank.setValue(++ViewProviderDocumentObject::lastTreeRank);
|
||||
}
|
||||
else if (this->TreeRank.getValue() > ViewProviderDocumentObject::lastTreeRank) {
|
||||
ViewProviderDocumentObject::lastTreeRank = this->TreeRank.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (prop && !prop->testStatus(App::Property::NoModify)
|
||||
&& pcDocument
|
||||
@@ -677,3 +689,15 @@ std::string ViewProviderDocumentObject::getFullName() const {
|
||||
return pcObject->getFullName() + ".ViewObject";
|
||||
return std::string();
|
||||
}
|
||||
|
||||
bool ViewProviderDocumentObject::allowTreeOrderSwap(const App::DocumentObject *child1, const App::DocumentObject *child2) const
|
||||
{
|
||||
std::vector<ViewProviderExtension *> extensions = getExtensionsDerivedFromType<ViewProviderExtension>();
|
||||
for (ViewProviderExtension *ext : extensions) {
|
||||
if (!ext->extensionAllowTreeOrderSwap(child1, child2)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user