[TD]add extensions for drag and drop

This commit is contained in:
wandererfan
2022-11-27 22:23:12 -05:00
committed by WandererFan
parent c23e1d1bb3
commit ff1147fbae
16 changed files with 656 additions and 51 deletions

View File

@@ -61,7 +61,7 @@
#include "QGVPage.h"
#include "ViewProviderTemplate.h"
#include "ViewProviderPage.h"
#include "ViewProviderPageExtension.h"
using namespace TechDrawGui;
using namespace TechDraw;
@@ -82,12 +82,14 @@ ViewProviderPage::ViewProviderPage()
m_graphicsView(nullptr),
m_graphicsScene(nullptr)
{
initExtension(this);
sPixmap = "TechDraw_TreePage";
static const char *group = "Grid";
ADD_PROPERTY_TYPE(ShowFrames ,(true), group, App::Prop_None, "Show or hide View frames and Labels on this Page");
ADD_PROPERTY_TYPE(ShowGrid ,(PreferencesGui::showGrid()), group, App::Prop_None, "Show or hide a grid on this Page");
ADD_PROPERTY_TYPE(GridSpacing, (PreferencesGui::gridSpacing()), group, (App::PropertyType)(App::Prop_None),
ADD_PROPERTY_TYPE(GridSpacing, (PreferencesGui::gridSpacing()), group, (App::PropertyType::Prop_None),
"Grid line spacing in mm");
ShowFrames.setStatus(App::Property::Hidden, true);
@@ -462,57 +464,29 @@ bool ViewProviderPage::canDelete(App::DocumentObject *obj) const
bool ViewProviderPage::canDragObjects() const
{
// Base::Console().Message("VPP:canDragObjects()\n");
return ViewProviderDocumentObject::canDragObjects();
return getVPPExtension()->extensionCanDragObjects();
}
bool ViewProviderPage::canDragObject(App::DocumentObject* docObj) const
{
// Base::Console().Message("VPP:canDragObject()\n");
if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) {
//DPGI can not be dragged from the Page as it belongs to DPG, not Page
return false;
}
if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) {
return true;
}
return false;
return getVPPExtension()->extensionCanDragObject(docObj);
}
bool ViewProviderPage::canDropObjectEx(App::DocumentObject* obj, App::DocumentObject *owner,
const char *subname, const std::vector<std::string> &elements) const
{
return getVPPExtension()->extensionCanDropObjectEx(obj, owner, subname, elements);
}
bool ViewProviderPage::canDropObject(App::DocumentObject* docObj) const
{
// Base::Console().Message("VPP:canDropObject()\n");
if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) {
//DPGI can not be dropped onto the Page as it belongs to DPG, not Page
return false;
}
if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) {
return true;
}
return false;
return getVPPExtension()->extensionCanDropObject(docObj);
}
void ViewProviderPage::dropObject(App::DocumentObject* docObj)
{
// Base::Console().Message("VPP:dropObject()\n");
if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) {
//DPGI can not be dropped onto the Page as it belongs to DPG, not Page
ViewProviderDocumentObject::dropObject(docObj);
return;
}
if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) {
auto dv = static_cast<TechDraw::DrawView*>(docObj);
if (dv->findParentPage()) {
dv->findParentPage()->removeView(dv);
}
getDrawPage()->addView(dv);
//don't run ancestor's method as addView does everything we need
return;
}
ViewProviderDocumentObject::dropObject(docObj);
getVPPExtension()->extensionDropObject(docObj);
}
//! Redo the whole visual page
@@ -565,3 +539,15 @@ void ViewProviderPage::setGrid()
widget->updateViewport();
}
}
ViewProviderPageExtension* ViewProviderPage::getVPPExtension() const
{
auto vpe = getExtensionByType<ViewProviderPageExtension>();
auto vppe = static_cast<ViewProviderPageExtension*>(vpe);
return vppe;
}
const char* ViewProviderPage::whoAmI() const
{
return m_pageName.c_str();
}