From bbf03ad49c1a86cd64cb36621b7e89ce37ee7d54 Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Sat, 9 Jul 2011 16:42:37 -0700 Subject: [PATCH] see #2561 operation of making an interface a subinterface should be performed using undo/redo command. Also, this should take care of inconvenient scrolling of the object tree after this operation. --- doc/ChangeLog | 5 +++++ src/libgui/FWCmdMoveObject.cpp | 5 ++++- src/libgui/ObjectManipulator_slots.cpp | 19 ++++++++++++++----- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 73a6a3cf0..b4dcc5699 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,10 @@ 2011-07-09 vadim + * ObjectManipulator_slots.cpp (makeSubinterface): see #2561 + operation of making an interface a subinterface should be + performed using undo/redo command. Also, this should take care of + inconvenient scrolling of the object tree after this operation. + * ObjectManipulator.cpp (addSubinterfaceSubmenu): see #2562 "Crash when making an interface that has subinterfaces a subinterface of another interfrace". If an interface has subinterfaces, it should diff --git a/src/libgui/FWCmdMoveObject.cpp b/src/libgui/FWCmdMoveObject.cpp index d15866f62..c083a9c9e 100644 --- a/src/libgui/FWCmdMoveObject.cpp +++ b/src/libgui/FWCmdMoveObject.cpp @@ -127,7 +127,10 @@ void FWCmdMoveObject::redo() new_parent->add(obj); current_parent = new_parent; } - if (fwbdebug) qDebug() << "FWCmdMoveObject::redo() obj->ref_counter=" + if (fwbdebug) qDebug() << "FWCmdMoveObject::redo()" + << "obj: " << obj->getName().c_str() + << "(" << obj->getTypeName().c_str() << ")" + << "obj->ref_counter=" << obj->getRefCounter(); if (reference_holders.size()) { diff --git a/src/libgui/ObjectManipulator_slots.cpp b/src/libgui/ObjectManipulator_slots.cpp index 3d8209176..9924ca1f6 100644 --- a/src/libgui/ObjectManipulator_slots.cpp +++ b/src/libgui/ObjectManipulator_slots.cpp @@ -510,18 +510,27 @@ void ObjectManipulator::makeSubinterface(QAction *act) { obj = *i; + if (obj->getParent() == new_parent_interface) continue; + if (fwbdebug) qDebug() << "ObjectManipulator::makeSubinterface" << "obj=" << obj << obj->getName().c_str() << "new parent:" << new_parent_interface->getName().c_str(); - new_parent_interface->reparent(obj); - } + // new_parent_interface->reparent(obj); - FWObject *h = Host::getParentHost(new_parent_interface); - QCoreApplication::postEvent( - mw, new reloadObjectTreeEvent(m_project->getFileName())); + map > reference_holders; + FWCmdMoveObject *cmd = new FWCmdMoveObject( + m_project, + obj->getParent(), + new_parent_interface, + obj, + reference_holders, + QString("Make an interface a subinterface"), + 0); + m_project->undoStack->push(cmd); + } ot->freezeSelection(false); }