[TD]implement view stacking

This commit is contained in:
wandererfan
2022-09-07 11:03:14 -04:00
committed by WandererFan
parent d6330b7103
commit fcef1cb174
15 changed files with 3339 additions and 0 deletions

View File

@@ -57,6 +57,7 @@ ViewProviderDrawingView::ViewProviderDrawingView()
static const char *group = "Base";
ADD_PROPERTY_TYPE(KeepLabel ,(false), group, App::Prop_None, "Keep Label on Page even if toggled off");
ADD_PROPERTY_TYPE(StackOrder,(0),group,App::Prop_None,"Over or under lap relative to other views");
// Do not show in property editor why? wf WF: because DisplayMode applies only to coin and we
// don't use coin.
@@ -104,6 +105,13 @@ void ViewProviderDrawingView::onChanged(const App::Property *prop)
}
}
if (prop == &StackOrder) {
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->setStack(StackOrder.getValue());
}
}
Gui::ViewProviderDocumentObject::onChanged(prop);
}
@@ -315,6 +323,66 @@ void ViewProviderDrawingView::showProgressMessage(const std::string featureName,
}
}
void ViewProviderDrawingView::stackUp()
{
QGIView* v = getQView();
if (v) {
int z = StackOrder.getValue();
z++;
StackOrder.setValue(z);
v->setStack(z);
}
}
void ViewProviderDrawingView::stackDown()
{
QGIView* v = getQView();
if (v) {
int z = StackOrder.getValue();
z--;
StackOrder.setValue(z);
v->setStack(z);
}
}
void ViewProviderDrawingView::stackTop()
{
Gui::Document* gDoc = getDocument();
std::vector<ViewProvider*> vps = gDoc->getViewProvidersOfType(TechDrawGui::ViewProviderDrawingView::getClassTypeId());
int maxZ = 0;
for (auto& vp: vps) {
ViewProviderDrawingView* vpdv = static_cast<ViewProviderDrawingView*>(vp);
int z = vpdv->StackOrder.getValue();
if (z > maxZ) {
maxZ = z;
}
}
StackOrder.setValue(maxZ + 1);
QGIView* v = getQView();
if (v) {
v->setStack(maxZ + 1);
}
}
void ViewProviderDrawingView::stackBottom()
{
Gui::Document* gDoc = getDocument();
std::vector<ViewProvider*> vps = gDoc->getViewProvidersOfType(TechDrawGui::ViewProviderDrawingView::getClassTypeId());
int minZ = 0;
for (auto& vp: vps) {
ViewProviderDrawingView* vpdv = static_cast<ViewProviderDrawingView*>(vp);
int z = vpdv->StackOrder.getValue();
if (z < minZ) {
minZ = z;
}
}
StackOrder.setValue(minZ - 1);
QGIView* v = getQView();
if (v) {
v->setStack(minZ - 1);
}
}
TechDraw::DrawView* ViewProviderDrawingView::getViewObject() const
{
return dynamic_cast<TechDraw::DrawView*>(pcObject);