[fwbuilder-commits] r2066 - in branches/v3_1: . src/gui
Brought to you by:
mikehorn
From: <va...@in...> - 2009-12-09 03:09:17
|
Author: vadim Date: 2009-12-08 19:08:59 -0800 (Tue, 08 Dec 2009) New Revision: 2066 Modified: branches/v3_1/build_num branches/v3_1/src/gui/FWCmdMoveObject.cpp branches/v3_1/src/gui/ObjectManipulator.cpp branches/v3_1/src/gui/ObjectManipulator.h branches/v3_1/src/gui/ObjectManipulator_ops.cpp branches/v3_1/src/gui/ProjectPanel_events.cpp branches/v3_1/src/gui/events.h Log: fixes #817 Modified: branches/v3_1/build_num =================================================================== --- branches/v3_1/build_num 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/build_num 2009-12-09 03:08:59 UTC (rev 2066) @@ -1 +1 @@ -#define BUILD_NUM 2063 +#define BUILD_NUM 2065 Modified: branches/v3_1/src/gui/FWCmdMoveObject.cpp =================================================================== --- branches/v3_1/src/gui/FWCmdMoveObject.cpp 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/FWCmdMoveObject.cpp 2009-12-09 03:08:59 UTC (rev 2066) @@ -32,6 +32,7 @@ #include "fwbuilder/Firewall.h" #include "fwbuilder/RuleSet.h" +#include "fwbuilder/Library.h" #include <QObject> #include <QtDebug> @@ -139,23 +140,33 @@ // This matters if the tree needs to scroll to show the object when // showObjectInTreeEvent is posted because vertical size of the tree // changes when editor opens - if (obj->getLibrary()->getId()==FWObjectDatabase::DELETED_OBJECTS_ID) + FWObject *new_obj = NULL; + if (obj->getParent()->getId()==FWObjectDatabase::DELETED_OBJECTS_ID) { - if (mw->isEditorVisible()) - QCoreApplication::postEvent(mw, new openObjectInEditorEvent( - filename, old_parent->getId())); - QCoreApplication::postEvent(mw, new showObjectInTreeEvent( - filename, old_parent->getId())); + if (Library::isA(obj)) + { + // looks like the object that moved into Deleted Objects is + // another library. Show Deleted Objects library. + new_obj = obj->getParent(); + }else + new_obj = old_parent; } else { - if (mw->isEditorVisible()) - QCoreApplication::postEvent(mw, new openObjectInEditorEvent( - filename, obj->getId())); - QCoreApplication::postEvent(mw, new showObjectInTreeEvent( - filename, obj->getId())); + new_obj = obj; } - // always reload rule set because the object we just moved might - // be shown there. - //QCoreApplication::postEvent(mw, new reloadRulesetEvent(filename)); + + QCoreApplication::postEvent(mw, new openLibraryForObjectEvent( + filename, new_obj->getId())); + + if (mw->isEditorVisible()) + QCoreApplication::postEvent(mw, new openObjectInEditorEvent( + filename, new_obj->getId())); + + QCoreApplication::postEvent(mw, new showObjectInTreeEvent( + filename, new_obj->getId())); + + // // switch the tree to the library where object is now located + // QCoreApplication::postEvent(mw, new openLibraryForObjectEvent( + // filename, obj->getId())); } Modified: branches/v3_1/src/gui/ObjectManipulator.cpp =================================================================== --- branches/v3_1/src/gui/ObjectManipulator.cpp 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/ObjectManipulator.cpp 2009-12-09 03:08:59 UTC (rev 2066) @@ -174,8 +174,19 @@ int ObjectManipulator::getIdxForLib(FWObject* lib) { + if (fwbdebug) + qDebug() << "ObjectManipulator::getIdxForLib" + << "lib=" << lib->getName().c_str(); + for (int i=0; i<m_objectManipulator->libs->count(); i++) - if ( idxToLibs[i]->getId() == lib->getId() ) return i; + { + if ( idxToLibs[i]->getId() == lib->getId() ) + { + if (fwbdebug) qDebug() << "Index=" << i; + return i; + } + } + if (fwbdebug) qDebug() << "Library not found"; return -1; } @@ -1101,18 +1112,16 @@ if (obj==NULL) return; + openLibForObject(obj); + //raise(); FWObject *o=obj; if (FWReference::cast(o)!=NULL) o=FWReference::cast(o)->getPointer(); ObjectTreeViewItem *otvi = allItems[o]; - -// this changes selection and thus calls slot slectionChanged + // this changes selection and thus calls slot slectionChanged showObjectInTree(otvi); - m_objectManipulator->libs->setCurrentIndex( - getIdxForLib( obj->getLibrary())); - if (fwbdebug) qDebug() << "ObjectManipulator::openObjectInTree" << "libs->currentIndex=" @@ -1123,6 +1132,19 @@ if (fwbdebug) qDebug() << "ObjectManipulator::openObjectInTree: done"; } +void ObjectManipulator::openLibForObject(FWObject *obj) +{ + // if obj is Library, its getLibrary() method returns itself. If + // this library has been deleted and is now in the Deleted Objects + // library, getIdxForLib() is not going to find it. + if (FWObjectDatabase::isA(obj->getParent())) + m_objectManipulator->libs->setCurrentIndex( + getIdxForLib(obj->getLibrary())); + else + m_objectManipulator->libs->setCurrentIndex( + getIdxForLib(obj->getParent()->getLibrary())); +} + void ObjectManipulator::showObjectInTree(ObjectTreeViewItem *otvi) { if (fwbdebug) Modified: branches/v3_1/src/gui/ObjectManipulator.h =================================================================== --- branches/v3_1/src/gui/ObjectManipulator.h 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/ObjectManipulator.h 2009-12-09 03:08:59 UTC (rev 2066) @@ -302,7 +302,8 @@ void addLib(libfwbuilder::FWObject *lib); void removeLib(libfwbuilder::FWObject *lib); - + void openLibForObject(libfwbuilder::FWObject *obj); + void openObjectInTree(libfwbuilder::FWObject *obj, bool register_in_history); void openObjectInTree(ObjectTreeViewItem *otvi, bool register_in_history); @@ -316,6 +317,12 @@ void moveObject(const QString &targetLibName, libfwbuilder::FWObject *obj); + // This method is called toprocess event objectMovedEvent. this event is + // posted by FWCmdMoveObject after the object is moved from one + // part of the tree to another, including when an object moves to the + // Deleted Objects library + void objectMoved(libfwbuilder::FWObject *obj); + libfwbuilder::FWObject* pasteTo(libfwbuilder::FWObject *target, libfwbuilder::FWObject *obj); Modified: branches/v3_1/src/gui/ObjectManipulator_ops.cpp =================================================================== --- branches/v3_1/src/gui/ObjectManipulator_ops.cpp 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/ObjectManipulator_ops.cpp 2009-12-09 03:08:59 UTC (rev 2066) @@ -638,6 +638,11 @@ firstAction = false ; } +void ObjectManipulator::objectMoved(FWObject* obj) +{ + openLibForObject(obj); +} + void ObjectManipulator::groupObjects() { if (getCurrentObjectTree()->getNumSelected()==0) return; Modified: branches/v3_1/src/gui/ProjectPanel_events.cpp =================================================================== --- branches/v3_1/src/gui/ProjectPanel_events.cpp 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/ProjectPanel_events.cpp 2009-12-09 03:08:59 UTC (rev 2066) @@ -379,6 +379,11 @@ ev->accept(); return true; + case OPEN_LIBRARY_FOR_OBJECT_EVENT: + m_panel->om->openLibForObject(obj); + ev->accept(); + return true; + case CLOSE_OBJECT_EVENT: if (RuleSet::cast(obj)) { Modified: branches/v3_1/src/gui/events.h =================================================================== --- branches/v3_1/src/gui/events.h 2009-12-09 01:02:03 UTC (rev 2065) +++ branches/v3_1/src/gui/events.h 2009-12-09 03:08:59 UTC (rev 2066) @@ -63,9 +63,11 @@ OPEN_OBJECT_IN_EDITOR_EVENT , OPEN_OPT_OBJECT_IN_EDITOR_EVENT , CLOSE_OBJECT_EVENT , - OBJECT_NAME_CHANGED_EVENT + OBJECT_NAME_CHANGED_EVENT, + OPEN_LIBRARY_FOR_OBJECT_EVENT }; + class fwbUpdateEvent : public QEvent { QString data_file_name; int object_id; @@ -329,6 +331,19 @@ }; +class openLibraryForObjectEvent : public fwbUpdateEvent { +public: + QString old_name; + QString new_name; + openLibraryForObjectEvent(const QString &file_name, int obj_id) : + fwbUpdateEvent(file_name, obj_id, + QEvent::Type(QEvent::User + OPEN_LIBRARY_FOR_OBJECT_EVENT), + "openLibraryForObjectEvent") + {} +}; + + + #endif |