Merge pull request #4626 from pavltom/GUI_TreeView_Item_Ordering

[Gui] Issue #3923 - Add arbitrary Tree View item ordering
This commit is contained in:
Chris Hennes
2021-11-10 23:35:05 -06:00
committed by GitHub
16 changed files with 826 additions and 22 deletions

View File

@@ -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;
}