+ fix possible crash in DocumentItem

This commit is contained in:
wmayer 2015-02-01 12:09:37 +01:00
parent f19fe1f8ed
commit c2d0857ddc
2 changed files with 29 additions and 9 deletions

View File

@ -826,21 +826,30 @@ DocumentItem::DocumentItem(const Gui::Document* doc, QTreeWidgetItem * parent)
: QTreeWidgetItem(parent, TreeWidget::DocumentType), pDocument(doc) : QTreeWidgetItem(parent, TreeWidget::DocumentType), pDocument(doc)
{ {
// Setup connections // Setup connections
doc->signalNewObject.connect(boost::bind(&DocumentItem::slotNewObject, this, _1)); connectNewObject = doc->signalNewObject.connect(boost::bind(&DocumentItem::slotNewObject, this, _1));
doc->signalDeletedObject.connect(boost::bind(&DocumentItem::slotDeleteObject, this, _1)); connectDelObject = doc->signalDeletedObject.connect(boost::bind(&DocumentItem::slotDeleteObject, this, _1));
doc->signalChangedObject.connect(boost::bind(&DocumentItem::slotChangeObject, this, _1)); connectChgObject = doc->signalChangedObject.connect(boost::bind(&DocumentItem::slotChangeObject, this, _1));
doc->signalRenamedObject.connect(boost::bind(&DocumentItem::slotRenameObject, this, _1)); connectRenObject = doc->signalRenamedObject.connect(boost::bind(&DocumentItem::slotRenameObject, this, _1));
doc->signalActivatedObject.connect(boost::bind(&DocumentItem::slotActiveObject, this, _1)); connectActObject = doc->signalActivatedObject.connect(boost::bind(&DocumentItem::slotActiveObject, this, _1));
doc->signalInEdit.connect(boost::bind(&DocumentItem::slotInEdit, this, _1)); connectEdtObject = doc->signalInEdit.connect(boost::bind(&DocumentItem::slotInEdit, this, _1));
doc->signalResetEdit.connect(boost::bind(&DocumentItem::slotResetEdit, this, _1)); connectResObject = doc->signalResetEdit.connect(boost::bind(&DocumentItem::slotResetEdit, this, _1));
doc->signalHighlightObject.connect(boost::bind(&DocumentItem::slotHighlightObject, this, _1,_2,_3)); connectHltObject = doc->signalHighlightObject.connect(boost::bind(&DocumentItem::slotHighlightObject, this, _1,_2,_3));
doc->signalExpandObject.connect(boost::bind(&DocumentItem::slotExpandObject, this, _1,_2)); connectExpObject = doc->signalExpandObject.connect(boost::bind(&DocumentItem::slotExpandObject, this, _1,_2));
setFlags(Qt::ItemIsEnabled/*|Qt::ItemIsEditable*/); setFlags(Qt::ItemIsEnabled/*|Qt::ItemIsEditable*/);
} }
DocumentItem::~DocumentItem() DocumentItem::~DocumentItem()
{ {
connectNewObject.disconnect();
connectDelObject.disconnect();
connectChgObject.disconnect();
connectRenObject.disconnect();
connectActObject.disconnect();
connectEdtObject.disconnect();
connectResObject.disconnect();
connectHltObject.disconnect();
connectExpObject.disconnect();
} }
void DocumentItem::slotInEdit(const Gui::ViewProviderDocumentObject& v) void DocumentItem::slotInEdit(const Gui::ViewProviderDocumentObject& v)

View File

@ -171,6 +171,17 @@ protected:
private: private:
const Gui::Document* pDocument; const Gui::Document* pDocument;
std::map<std::string,DocumentObjectItem*> ObjectMap; std::map<std::string,DocumentObjectItem*> ObjectMap;
typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection;
Connection connectNewObject;
Connection connectDelObject;
Connection connectChgObject;
Connection connectRenObject;
Connection connectActObject;
Connection connectEdtObject;
Connection connectResObject;
Connection connectHltObject;
Connection connectExpObject;
}; };
/** The link between the tree and a document object. /** The link between the tree and a document object.