[fwbuilder-commits] r2026 - in branches/v3_1: . src/gui
Brought to you by:
mikehorn
From: <va...@in...> - 2009-12-04 21:08:28
|
Author: vadim Date: 2009-12-04 13:08:14 -0800 (Fri, 04 Dec 2009) New Revision: 2026 Modified: branches/v3_1/build_num branches/v3_1/src/gui/DiscoveryDruid.cpp branches/v3_1/src/gui/FWCmdChange.cpp branches/v3_1/src/gui/FWWindow.h branches/v3_1/src/gui/FWWindow_wrappers.cpp branches/v3_1/src/gui/ObjectManipulator.cpp branches/v3_1/src/gui/ObjectManipulator.h branches/v3_1/src/gui/ObjectManipulator_create_new.cpp branches/v3_1/src/gui/ObjectManipulator_ops.cpp branches/v3_1/src/gui/ProjectPanel.cpp branches/v3_1/src/gui/ProjectPanel.h branches/v3_1/src/gui/ProjectPanel_events.cpp Log: fixes #789 removed werdly named function loadDataFromFw; using events to open objects in DiscoveryDruid Modified: branches/v3_1/build_num =================================================================== --- branches/v3_1/build_num 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/build_num 2009-12-04 21:08:14 UTC (rev 2026) @@ -1 +1 @@ -#define BUILD_NUM 2024 +#define BUILD_NUM 2025 Modified: branches/v3_1/src/gui/DiscoveryDruid.cpp =================================================================== --- branches/v3_1/src/gui/DiscoveryDruid.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/DiscoveryDruid.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -27,6 +27,7 @@ #include "../../config.h" #include "global.h" #include "utils.h" +#include "events.h" #include <qradiobutton.h> #include <qlineedit.h> @@ -73,6 +74,7 @@ #include "fwbuilder/InetAddrMask.h" #include "fwbuilder/Inet6AddrMask.h" #include "fwbuilder/Firewall.h" +#include "fwbuilder/Policy.h" #include "fwbuilder/dns.h" #include "fwbuilder/snmp.h" @@ -1312,8 +1314,22 @@ if (imp!=NULL) { Firewall *fw = imp->finalize(); + ProjectPanel *pp = mw->activeProject(); + QString filename = pp->getFileName(); + pp->m_panel->om->reload(); + pp->m_panel->om->autoRenameChildren(fw, "", false); + QCoreApplication::postEvent(mw, new reloadObjectTreeEvent(filename)); + if (mw->isEditorVisible()) + QCoreApplication::postEvent( + mw, new openObjectInEditorEvent(filename, fw->getId())); + QCoreApplication::postEvent( + mw, new showObjectInTreeEvent(filename, fw->getId())); + // Open first created Policy ruleset object + FWObject *first_policy = fw->getFirstByType(Policy::TYPENAME); + if (first_policy) + QCoreApplication::postEvent( + mw, new openRulesetEvent(filename, first_policy->getId())); - mw->loadDataFromFw(fw); } } Modified: branches/v3_1/src/gui/FWCmdChange.cpp =================================================================== --- branches/v3_1/src/gui/FWCmdChange.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/FWCmdChange.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -91,27 +91,31 @@ { FWObject* obj = getObject(); QString filename = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); - QCoreApplication::postEvent( - mw, new updateObjectEverywhereEvent(filename, obj->getId())); if (oldState->getName() != newState->getName()) { + // objectNameChangedEvent event triggers actions, such as + // automatic renaming of child objects. This should only be + // done once, even if we have the same data file opened in + // several project panels. QCoreApplication::postEvent( - mw, new objectNameChangedEvent( + mw->activeProject(), new objectNameChangedEvent( filename, obj->getId(), QString::fromUtf8(oldState->getName().c_str()), QString::fromUtf8(newState->getName().c_str()))); } + QCoreApplication::postEvent( + mw, new updateObjectEverywhereEvent(filename, obj->getId())); + if (mw->isEditorVisible()) { QCoreApplication::postEvent( mw, new openObjectInEditorEvent(filename, obj->getId())); - } else - { - QCoreApplication::postEvent( - mw, new showObjectInTreeEvent(filename, obj->getId())); } + + QCoreApplication::postEvent( + mw, new showObjectInTreeEvent(filename, obj->getId())); } /******************************************************** @@ -137,8 +141,14 @@ { FWObject* obj = getObject(); QString filename = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); - QCoreApplication::postEvent( - mw, new updateObjectEverywhereEvent(filename, obj->getId())); + + // when object's name changes, its position in the tree changes + // too to keep the tree sorted. Need to update the object + // everywhere, as well as its parent's subtree. + + QCoreApplication::postEvent(mw, new updateObjectInTreeEvent(filename, + obj->getId())); + QCoreApplication::postEvent(mw, new reloadRulesetEvent(filename)); } Modified: branches/v3_1/src/gui/FWWindow.h =================================================================== --- branches/v3_1/src/gui/FWWindow.h 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/FWWindow.h 2009-12-04 21:08:14 UTC (rev 2026) @@ -318,8 +318,6 @@ void moveObject(const QString &targetLibName, libfwbuilder::FWObject *obj); - void loadDataFromFw(libfwbuilder::Firewall *fw); - void deleteObject(libfwbuilder::FWObject *obj,bool openobj=true); ObjectTreeView* getCurrentObjectTree(); Modified: branches/v3_1/src/gui/FWWindow_wrappers.cpp =================================================================== --- branches/v3_1/src/gui/FWWindow_wrappers.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/FWWindow_wrappers.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -405,12 +405,6 @@ return 0; } -void FWWindow::loadDataFromFw(Firewall *fw) -{ - if (activeProject()) - activeProject()->loadDataFromFw(fw); -} - void FWWindow::insertObjectInTree(FWObject *parent, FWObject *obj) { if (activeProject()) Modified: branches/v3_1/src/gui/ObjectManipulator.cpp =================================================================== --- branches/v3_1/src/gui/ObjectManipulator.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ObjectManipulator.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -122,59 +122,37 @@ void ObjectManipulator::refreshSubtree(QTreeWidgetItem *itm) { if (fwbdebug) - qDebug("ObjectManipulator::refreshSubtree %s", itm->text(0).toLatin1().constData()); + qDebug() << "ObjectManipulator::refreshSubtree itm:" << itm->text(0); QTreeWidgetItem *parent = itm->parent(); if (parent) { + if (fwbdebug) + qDebug() << "ObjectManipulator::refreshSubtree parent:" + << parent->text(0); /* * re-sorting parent tree item causes havoc. If I do not - * collapse/expand it, I get strange glitches in display. If I - * collapse/expand it, it scrolls the tree up. If I use - * scrollToItem() to force scrolling position, I get problems - * when this method is called from ProjectPanel::updateLastModifiedTimestampForAllFirewalls - * (via event) since the user modified one object, but this method - * repositions the tree to show the firewall that uses it. - * - * To work around this I sort the parent and see if the item - * next to the itm has changed. If it has, then sorting order - * has changed and we need to collapse then expand and - * scroll. If sorting order has not changed, this means the - * update was only to the attributes of the object or the name - * sorted in the same order and we do not need to - * expand/collapse the subtree. + * collapse/expand it, I get strange glitches in display. */ - - QTreeWidgetItemIterator old_neighbor_iter(itm); - old_neighbor_iter--; - QTreeWidgetItem *old_neighbor = *old_neighbor_iter; - parent->sortChildren(0, Qt::AscendingOrder);//(); - QTreeWidgetItemIterator new_neighbor_iter(itm); - new_neighbor_iter--; - QTreeWidgetItem *new_neighbor = *new_neighbor_iter; - - if (old_neighbor != new_neighbor) - { - if (fwbdebug) - qDebug("ObjectManipulator::refreshSubtree expand/collapse parent"); - /* - * workaround for QT4 bug - * http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=233975 - * Affects QT 4.4.1 - * - * This has a side effect in that the tree loses its scrollong - * position and scrolls all the way to the top. If the object - * being edited was in the middle or close to the bottom, it disappears - * from view. Call to scrollToItem() fixes this. - */ - parent->setExpanded(false); - parent->setExpanded(true); - //getCurrentObjectTree()->header()->resizeSections(QHeaderView::ResizeToContents); - getCurrentObjectTree()->scrollToItem(itm, QAbstractItemView::EnsureVisible); - getCurrentObjectTree()->update(); - } + if (fwbdebug) + qDebug("ObjectManipulator::refreshSubtree expand/collapse parent"); + /* + * workaround for QT4 bug + * http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=233975 + * Affects QT 4.4.1 + * + * This has a side effect in that the tree loses its scrollong + * position and scrolls all the way to the top. If the object + * being edited was in the middle or close to the bottom, it disappears + * from view. Call to scrollToItem() fixes this. + */ + parent->setExpanded(false); + parent->setExpanded(true); + //getCurrentObjectTree()->header()->resizeSections(QHeaderView::ResizeToContents); + getCurrentObjectTree()->scrollToItem(itm, QAbstractItemView::EnsureVisible); + getCurrentObjectTree()->update(); } } Modified: branches/v3_1/src/gui/ObjectManipulator.h =================================================================== --- branches/v3_1/src/gui/ObjectManipulator.h 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ObjectManipulator.h 2009-12-04 21:08:14 UTC (rev 2026) @@ -317,9 +317,9 @@ void updateLibColor(libfwbuilder::FWObject *lib); void updateLibName(libfwbuilder::FWObject *lib); - void updateObjName(libfwbuilder::FWObject *obj, - const QString &oldName, - bool askForAutorename=true); + void autoRenameChildren(libfwbuilder::FWObject *obj, + const QString &oldName, + bool askForAutorename=true); void updateObjectInTree(libfwbuilder::FWObject *obj, bool subtree=false); ObjectTreeView* getCurrentObjectTree(); Modified: branches/v3_1/src/gui/ObjectManipulator_create_new.cpp =================================================================== --- branches/v3_1/src/gui/ObjectManipulator_create_new.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ObjectManipulator_create_new.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -363,16 +363,6 @@ parent->remove(nfw, false); new_state->add(nfw); m_project->undoStack->push(cmd); - - // insertSubtree(parent_item, nfw); - // updateObjName(nfw, "", false); - // // Reload object tree because when we create fw object from a template, - // // we copy objects it uses in rules recursively. - // loadObjects(); - // openObject(nfw); - // editObject(nfw); - // QCoreApplication::postEvent( - // mw, new dataModifiedEvent(m_project->getFileName(), nfw->getId())); } } @@ -406,16 +396,6 @@ parent->remove(ncl, false); new_state->add(ncl); m_project->undoStack->push(cmd); - - // insertSubtree(parent_item, ncl); - // updateObjName(ncl, "", false); - // // Reload object tree because when we create fw object from a template, - // // we copy objects it uses in rules recursively. - // loadObjects(); - // openObject(ncl); - // editObject(ncl); - // QCoreApplication::postEvent( - // mw, new dataModifiedEvent(m_project->getFileName(), ncl->getId())); } } Modified: branches/v3_1/src/gui/ObjectManipulator_ops.cpp =================================================================== --- branches/v3_1/src/gui/ObjectManipulator_ops.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ObjectManipulator_ops.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -70,25 +70,22 @@ using namespace std; using namespace libfwbuilder; + /* - * TODO: make this signal/slot. Dialogs just emit signal - * 'updateObject_sign', which objectManipulator should have connected - * to its slot which would do what updateObjName does now, and more. + * this method initiates automatic renaming of children objects if necessary */ -void ObjectManipulator::updateObjName(FWObject *obj, - const QString &oldName, - bool askForAutorename) +void ObjectManipulator::autoRenameChildren(FWObject *obj, + const QString &oldName, + bool askForAutorename) { if (fwbdebug) - qDebug() << "ObjectManipulator::updateObjName changing name " + qDebug() << "ObjectManipulator::autoRenameChildren changing name " << oldName.toLatin1() << "->" << QString::fromUtf8(obj->getName().c_str()); if (oldName == QString::fromUtf8(obj->getName().c_str())) return; - //if (obj!=getSelectedObject()) openObject(obj); - QTreeWidgetItem *itm = allItems[obj]; assert(itm!=NULL); @@ -98,8 +95,8 @@ autorename(obj, askForAutorename); } - QCoreApplication::postEvent( - mw, new updateObjectEverywhereEvent(m_project->getFileName(), obj->getId())); + // QCoreApplication::postEvent( + // mw, new updateObjectEverywhereEvent(m_project->getFileName(), obj->getId())); } void ObjectManipulator::autorename(FWObject *obj, bool ask) Modified: branches/v3_1/src/gui/ProjectPanel.cpp =================================================================== --- branches/v3_1/src/gui/ProjectPanel.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ProjectPanel.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -478,17 +478,6 @@ m_panel->om->updateObjectInTree(obj, subtree); } -void ProjectPanel::loadDataFromFw(Firewall *fw) -{ - m_panel->om->loadObjects(); - - if (fw) - { - m_panel->om->updateObjName(fw,"", false); - m_panel->om->editObject(fw); - } -} - void ProjectPanel::insertObjectInTree(FWObject *parent, FWObject *obj) { m_panel->om->insertObjectInTree(parent, obj); Modified: branches/v3_1/src/gui/ProjectPanel.h =================================================================== --- branches/v3_1/src/gui/ProjectPanel.h 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ProjectPanel.h 2009-12-04 21:08:14 UTC (rev 2026) @@ -170,8 +170,6 @@ void registerTreeReloadRequest(); void registerRuleSetRedrawRequest(); - void loadDataFromFw(libfwbuilder::Firewall *fw); - libfwbuilder::FWObject* pasteTo(libfwbuilder::FWObject *target, libfwbuilder::FWObject *obj); void deleteObject(libfwbuilder::FWObject *obj,bool openobj=true); Modified: branches/v3_1/src/gui/ProjectPanel_events.cpp =================================================================== --- branches/v3_1/src/gui/ProjectPanel_events.cpp 2009-12-04 19:06:25 UTC (rev 2025) +++ branches/v3_1/src/gui/ProjectPanel_events.cpp 2009-12-04 21:08:14 UTC (rev 2026) @@ -182,8 +182,9 @@ { objectNameChangedEvent *name_change_event = dynamic_cast<objectNameChangedEvent*>(event); + m_panel->om->updateObjectInTree(obj); // This performs automatic renaming of child objects if necessary - m_panel->om->updateObjName(obj, name_change_event->old_name, true); + m_panel->om->autoRenameChildren(obj, name_change_event->old_name, true); ev->accept(); return true; } |