[Core] Add visibility toggling to ViewProvider

With this extension of the API, view providers can indicate whether
document objects should be able to be toggled for visibility.  There is
both a C++ and Python interface, idiomatic for FreeCAD code.
This commit is contained in:
Pieter Hijma
2025-04-05 13:47:00 +02:00
parent 62b0e6eb4f
commit 0d5481e448
6 changed files with 78 additions and 2 deletions

View File

@@ -706,3 +706,34 @@ Py::String ViewProviderPy::getDropPrefix() const
{
return {getViewProviderPtr()->getDropPrefix()};
}
void ViewProviderPy::setToggleVisibility(Py::Object arg)
{
std::string val;
if (PyObject_HasAttrString(arg.ptr(), "value")) {
// we are dealing with the enum
val = Py::String(arg.getAttr("value"));
}
else {
// we are dealing with a string
val = Py::String(arg);
}
if (val == "CanToggleVisibility") {
getViewProviderPtr()->setToggleVisibility(ViewProvider::ToggleVisibilityMode::CanToggleVisibility);
}
else if (val == "NoToggleVisibility") {
getViewProviderPtr()->setToggleVisibility(ViewProvider::ToggleVisibilityMode::NoToggleVisibility);
}
else {
throw Py::ValueError("Invalid ToggleVisibility mode. Use 'CanToggleVisibility' or 'NoToggleVisibility'.");
}
}
Py::Object ViewProviderPy::getToggleVisibility() const
{
bool canToggleVisibility = getViewProviderPtr()->canToggleVisibility();
return Py::String(canToggleVisibility ? "CanToggleVisibility" : "NoToggleVisibility");
}