Correct handling of deleted Features in QGraphicsScene
This commit is contained in:
parent
c0c4569546
commit
1738107590
|
@ -318,6 +318,11 @@ bool MDIViewPage::attachView(App::DocumentObject *obj)
|
|||
return (qview != nullptr);
|
||||
}
|
||||
|
||||
void MDIViewPage::removeView(QGIView *view)
|
||||
{
|
||||
(void) m_view->removeView(view);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MDIViewPage::updateTemplate(bool forceUpdate)
|
||||
|
|
|
@ -65,7 +65,8 @@ public:
|
|||
void attachTemplate(TechDraw::DrawTemplate *obj);
|
||||
void updateTemplate(bool force = false);
|
||||
void updateDrawing(bool force = false);
|
||||
|
||||
void removeView(QGIView *view);
|
||||
|
||||
bool onMsg(const char* pMsg,const char** ppReturn);
|
||||
bool onHasMsg(const char* pMsg) const;
|
||||
void onRelabel(Gui::Document *pDoc);
|
||||
|
|
|
@ -198,6 +198,46 @@ int QGVPage::addView(QGIView *view)
|
|||
return views.size();
|
||||
}
|
||||
|
||||
int QGVPage::removeView(QGIView *view)
|
||||
{
|
||||
std::vector<QGIView *> qviews = views;
|
||||
std::vector<QGIView *> newViews;
|
||||
|
||||
std::vector<QGIView *>::iterator qvit = qviews.begin();
|
||||
std::vector<QGIView *>::iterator qvDel = qviews.end();
|
||||
|
||||
for (; qvit != qviews.end(); qvit++) {
|
||||
if ((*qvit) == view) {
|
||||
qvDel = qvit;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (qvDel == qviews.end()) { //didn't find view in views
|
||||
return views.size();
|
||||
}
|
||||
|
||||
QGraphicsItemGroup* grp = view->group();
|
||||
if (grp) {
|
||||
grp->removeFromGroup(view);
|
||||
}
|
||||
|
||||
if (view->parentItem()) { //not top level
|
||||
view->setParentItem(0);
|
||||
}
|
||||
|
||||
if (view->scene()) {
|
||||
view->scene()->removeItem(view);
|
||||
}
|
||||
|
||||
qviews.erase(qvDel);
|
||||
views = qviews;
|
||||
delete view;
|
||||
|
||||
return views.size();
|
||||
}
|
||||
|
||||
|
||||
QGIView * QGVPage::addViewPart(TechDraw::DrawViewPart *part)
|
||||
{
|
||||
auto viewPart( new QGIViewPart );
|
||||
|
|
|
@ -79,6 +79,7 @@ public:
|
|||
void addDimToParent(QGIViewDimension* dim, QGIView* parent);
|
||||
const std::vector<QGIView *> & getViews() const { return views; }
|
||||
int addView(QGIView * view);
|
||||
int removeView(QGIView *view);
|
||||
void setViews(const std::vector<QGIView *> &view) {views = view; }
|
||||
void setPageTemplate(TechDraw::DrawTemplate *pageTemplate);
|
||||
|
||||
|
|
|
@ -202,6 +202,17 @@ void ViewProviderDrawingView::unsetEdit(int ModNum)
|
|||
}
|
||||
}
|
||||
|
||||
bool ViewProviderDrawingView::onDelete(const std::vector<std::string> &items)
|
||||
{
|
||||
QGIView* qv = getQView();
|
||||
if (qv != nullptr) {
|
||||
MDIViewPage* mdi = getMDIViewPage();
|
||||
mdi->removeView(qv);
|
||||
}
|
||||
|
||||
return ViewProviderDocumentObject::onDelete(items);
|
||||
}
|
||||
|
||||
|
||||
MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const
|
||||
{
|
||||
|
|
|
@ -60,6 +60,7 @@ public:
|
|||
virtual void onChanged(const App::Property *prop);
|
||||
virtual void updateData(const App::Property*);
|
||||
virtual void unsetEdit(int ModNum);
|
||||
virtual bool onDelete(const std::vector<std::string> &items);
|
||||
|
||||
QGIView* getQView(void);
|
||||
MDIViewPage* getMDIViewPage() const;
|
||||
|
|
Loading…
Reference in New Issue
Block a user