Thread: [fwbuilder-commits] [SCM] Firewall Builder GUI and Policy Compilers Open Source Code branch, develo
Brought to you by:
mikehorn
From: <gi...@ir...> - 2011-06-23 23:42:15
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Firewall Builder GUI and Policy Compilers Open Source Code". The branch, development has been updated via 240d4b56429e2b1d4a0b5dc433de9165a3b392e7 (commit) via 8c19f9f87339be0b1e34c52d05f6cf1a898eb70f (commit) from 26b349482c3b8af022f47a5e41bb47b4e96014a1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 240d4b56429e2b1d4a0b5dc433de9165a3b392e7 Merge: 8c19f9f 26b3494 Author: Theron Tock <th...@ne...> Date: Thu Jun 23 16:41:50 2011 -0700 Merge branch 'development' of ssh://ncgit/var/git/fwbuilder into development commit 8c19f9f87339be0b1e34c52d05f6cf1a898eb70f Author: Theron Tock <th...@ne...> Date: Thu Jun 23 16:40:05 2011 -0700 Make user-defined folders deletable even when they have something inside of them. Also make all user-defined folder operations support undo/redo. diff --git a/src/libfwbuilder/src/fwbuilder/FWObject.cpp b/src/libfwbuilder/src/fwbuilder/FWObject.cpp index b2c2805..efeaf65 100644 --- a/src/libfwbuilder/src/fwbuilder/FWObject.cpp +++ b/src/libfwbuilder/src/fwbuilder/FWObject.cpp @@ -180,6 +180,7 @@ xmlNodePtr FWObject::toXML(xmlNodePtr parent, bool process_children) const string &value = (*i).second; if (name[0]=='.') continue; + if (name == "folder" && value.empty()) continue; xmlNewProp(me, STRTOXMLCAST(name), STRTOXMLCAST(value)); } diff --git a/src/libgui/FWCmdAddObject.cpp b/src/libgui/FWCmdAddObject.cpp index 7a300c0..0c6fecf 100644 --- a/src/libgui/FWCmdAddObject.cpp +++ b/src/libgui/FWCmdAddObject.cpp @@ -216,6 +216,46 @@ void FWCmdAddObject::notify() /******************************************************** + * FWCmdAddUserFolder + * + ********************************************************/ + +FWCmdAddUserFolder::FWCmdAddUserFolder(ProjectPanel *project, + FWObject *parentFolder, + const QString &userFolder, + QString text, + QUndoCommand *macro) + : FWCmdChange(project, parentFolder, text, false, macro), + m_userFolder(userFolder) +{ +} + + +void FWCmdAddUserFolder::redo() +{ + FWCmdChange::redo(); + + FWObject *obj = getObject(); + + QString fileName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + QCoreApplication::postEvent(mw, new addUserFolderEvent + (fileName, obj->getId(), m_userFolder)); +} + + +void FWCmdAddUserFolder::undo() +{ + FWCmdChange::undo(); + + FWObject *obj = getObject(); + QString fName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + QCoreApplication::postEvent(mw, + new removeUserFolderEvent(fName, obj->getId(), + m_userFolder)); +} + + +/******************************************************** * FWCmdAddLibrary * ********************************************************/ diff --git a/src/libgui/FWCmdAddObject.h b/src/libgui/FWCmdAddObject.h index 1d56c6c..e2bd060 100644 --- a/src/libgui/FWCmdAddObject.h +++ b/src/libgui/FWCmdAddObject.h @@ -53,6 +53,22 @@ public: virtual void undo(); }; + +class FWCmdAddUserFolder : public FWCmdChange +{ + QString m_userFolder; + +public: + FWCmdAddUserFolder(ProjectPanel *project, + libfwbuilder::FWObject *parentFolder, + const QString &userFolder, + QString text = QString(), + QUndoCommand *macro = 0); + + virtual void redo(); + virtual void undo(); +}; + /******************************************************** * FWCmdAddLibrary ********************************************************/ diff --git a/src/libgui/FWCmdDeleteObject.cpp b/src/libgui/FWCmdDeleteObject.cpp index 1a37fb0..f37f175 100644 --- a/src/libgui/FWCmdDeleteObject.cpp +++ b/src/libgui/FWCmdDeleteObject.cpp @@ -137,3 +137,40 @@ void FWCmdDeleteObject::redo() void FWCmdDeleteObject::notify() { } + + +/********************************************************************/ + +FWCmdRemoveUserFolder::FWCmdRemoveUserFolder(ProjectPanel *project, + FWObject *parentFolder, + const QString &userFolder, + QString text, + QUndoCommand *macro) + : FWCmdChange(project, parentFolder, text, false, macro), + m_userFolder(userFolder) +{ +} + + +void FWCmdRemoveUserFolder::redo() +{ + FWCmdChange::redo(); + + FWObject *obj = getObject(); + QString fName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + QCoreApplication::postEvent(mw, + new removeUserFolderEvent(fName, obj->getId(), + m_userFolder)); +} + + +void FWCmdRemoveUserFolder::undo() +{ + FWCmdChange::undo(); + + FWObject *obj = getObject(); + QString fName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + QCoreApplication::postEvent(mw, + new addUserFolderEvent(fName, obj->getId(), + m_userFolder)); +} diff --git a/src/libgui/FWCmdDeleteObject.h b/src/libgui/FWCmdDeleteObject.h index 8eddfa6..3d1f30e 100644 --- a/src/libgui/FWCmdDeleteObject.h +++ b/src/libgui/FWCmdDeleteObject.h @@ -51,4 +51,20 @@ public: }; +class FWCmdRemoveUserFolder : public FWCmdChange +{ + QString m_userFolder; + +public: + FWCmdRemoveUserFolder(ProjectPanel *project, + libfwbuilder::FWObject *parentFolder, + const QString &userFolder, + QString text = QString(), + QUndoCommand *macro = 0); + + virtual void redo(); + virtual void undo(); +}; + + #endif diff --git a/src/libgui/FWCmdMoveObject.cpp b/src/libgui/FWCmdMoveObject.cpp index 543089a..d15866f 100644 --- a/src/libgui/FWCmdMoveObject.cpp +++ b/src/libgui/FWCmdMoveObject.cpp @@ -67,7 +67,9 @@ FWCmdMoveObject::FWCmdMoveObject( FWObject *new_p, FWObject *o, map<int, set<FWObject*> > &reference_holder_objects, - QString text, QUndoCommand* macro) : FWCmdBasic(project, macro), + QString text, QUndoCommand* macro) + : FWCmdBasic(project, macro), + oldUserFolder(QString::fromUtf8(o->getStr("folder").c_str())), reference_holders(reference_holder_objects) { old_parent = old_p; @@ -90,6 +92,7 @@ FWCmdMoveObject::~FWCmdMoveObject() void FWCmdMoveObject::undo() { + obj->setStr("folder", oldUserFolder.toUtf8().constData()); if (new_parent->hasChild(obj) && !old_parent->hasChild(obj)) { new_parent->remove(obj, false); @@ -117,6 +120,7 @@ void FWCmdMoveObject::undo() void FWCmdMoveObject::redo() { + obj->setStr("folder", ""); if (!new_parent->hasChild(obj) && old_parent->hasChild(obj)) { old_parent->remove(obj, false); @@ -228,3 +232,44 @@ void FWCmdMoveObject::notify() filename, new_obj->getId())); } +/****************************************************************/ + +FWCmdMoveToFromUserFolder::FWCmdMoveToFromUserFolder(ProjectPanel *project, + FWObject *parent, + FWObject *obj, + const QString &oldFolder, + const QString &newFolder, + QString text, + QUndoCommand *macro) + : FWCmdChange(project, obj, text, false, macro), + m_parentId(parent->getId()), + m_oldFolder(oldFolder), + m_newFolder(newFolder) +{ +} + + +void FWCmdMoveToFromUserFolder::redo() +{ + FWCmdChange::redo(); + + FWObject *obj = getObject(); + QString fileName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + + QCoreApplication::postEvent(mw, new moveToFromUserFolderEvent + (fileName, m_parentId, obj->getId(), + m_oldFolder, m_newFolder)); +} + + +void FWCmdMoveToFromUserFolder::undo() +{ + FWCmdChange::undo(); + + FWObject *obj = getObject(); + QString fileName = QString::fromUtf8(obj->getRoot()->getFileName().c_str()); + + QCoreApplication::postEvent(mw, new moveToFromUserFolderEvent + (fileName, m_parentId, obj->getId(), + m_newFolder, m_oldFolder)); +} diff --git a/src/libgui/FWCmdMoveObject.h b/src/libgui/FWCmdMoveObject.h index 6e2f3b3..aa8eb21 100644 --- a/src/libgui/FWCmdMoveObject.h +++ b/src/libgui/FWCmdMoveObject.h @@ -26,7 +26,7 @@ #ifndef FWCMDMOVEOBJECT_H #define FWCMDMOVEOBJECT_H -#include "FWCmdBasic.h" +#include "FWCmdChange.h" #include <map> #include <set> @@ -40,6 +40,7 @@ class FWCmdMoveObject : public FWCmdBasic libfwbuilder::FWObject *new_parent; libfwbuilder::FWObject *current_parent; libfwbuilder::FWObject *obj; + QString oldUserFolder; std::map<int, std::set<libfwbuilder::FWObject*> > reference_holders; protected: @@ -58,4 +59,25 @@ public: virtual void undo(); }; +/*************************************************************/ + +class FWCmdMoveToFromUserFolder : public FWCmdChange +{ + int m_parentId; + QString m_oldFolder; + QString m_newFolder; + +public: + FWCmdMoveToFromUserFolder(ProjectPanel *project, + libfwbuilder::FWObject *parent, + libfwbuilder::FWObject *obj, + const QString &oldFolder, + const QString &newFolder, + QString text = QString(), + QUndoCommand *macro = 0); + + virtual void redo(); + virtual void undo(); +}; + #endif diff --git a/src/libgui/ObjectManipulator.cpp b/src/libgui/ObjectManipulator.cpp index ab9d1d8..ebdc9c9 100644 --- a/src/libgui/ObjectManipulator.cpp +++ b/src/libgui/ObjectManipulator.cpp @@ -414,7 +414,7 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) /* in extended selection mode there may be several selected items */ - QTreeWidget *objTreeView = getCurrentObjectTree(); + ObjectTreeView *objTreeView = getCurrentObjectTree(); QTreeWidgetItem *item = objTreeView->itemAt(pos);//clicked item if (fwbdebug) @@ -428,8 +428,9 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) if (obj == 0) { assert(otvi->getUserFolderParent() != 0); QAction *action = - popup_menu->addAction(tr("Remove"), this, SLOT(removeUserFolder())); - if (otvi->childCount() > 0) { + popup_menu->addAction(tr("Delete"), this, SLOT(removeUserFolder())); + /* The user-defined folder doesn't get counted as a selected obj */ + if (objTreeView->getNumSelected() > 0) { action->setEnabled(false); } popup_menu->exec(QCursor::pos()); diff --git a/src/libgui/ObjectManipulator.h b/src/libgui/ObjectManipulator.h index 42c4268..4fea286 100644 --- a/src/libgui/ObjectManipulator.h +++ b/src/libgui/ObjectManipulator.h @@ -313,6 +313,16 @@ public: void loadObjects(); void clearObjects(); + /* Add/remove user folder from tree */ + void addUserFolderToTree(libfwbuilder::FWObject *obj, + const QString &folder); + void removeUserFolderFromTree(libfwbuilder::FWObject *obj, + const QString &folder); + void moveToFromUserFolderInTree(libfwbuilder::FWObject *parent, + libfwbuilder::FWObject *objToMove, + const QString &oldFolder, + const QString &newFolder); + void reopenCurrentItemParent(); void insertSubtree(libfwbuilder::FWObject *parent, diff --git a/src/libgui/ObjectManipulator_ops.cpp b/src/libgui/ObjectManipulator_ops.cpp index 82f74c4..292350e 100644 --- a/src/libgui/ObjectManipulator_ops.cpp +++ b/src/libgui/ObjectManipulator_ops.cpp @@ -761,19 +761,17 @@ void ObjectManipulator::addSubfolderSlot() qDebug() << "ObjectManipulator::addSubfolder: " << folder; } - set<string> folders = stringToSet(obj->getStr("subfolders")); + FWCmdAddUserFolder *cmd = new FWCmdAddUserFolder(m_project, obj, folder, + tr("Add subfolder")); + FWObject *newObj = cmd->getNewState(); + + set<string> folders = stringToSet(newObj->getStr("subfolders")); folders.insert(folder.toUtf8().constData()); string encoded = setToString(folders); - obj->setStr("subfolders", encoded); + newObj->setStr("subfolders", encoded); - QTreeWidgetItem *item = getCurrentObjectTree()->currentItem(); - ObjectTreeViewItem *sub = new ObjectTreeViewItem(item); - sub->setUserFolderParent(obj); - sub->setUserFolderName(folder); - sub->setText(0, folder); - sub->setIcon(0, QIcon(LoadPixmap(":/Icons/SystemGroup/icon-tree"))); - refreshSubtree(item, sub); + m_project->undoStack->push(cmd); } @@ -786,23 +784,53 @@ void ObjectManipulator::removeUserFolder() (item->parent()); assert(parent != 0); - FWObject *parentObj = parent->getFWObject(); - set<string> folders = stringToSet(parentObj->getStr("subfolders")); - folders.erase(item->getUserFolderName().toUtf8().constData()); - parentObj->setStr("subfolders", setToString(folders)); + vector<FWObject *> objs; + for (int ii = 0; ii < item->childCount(); ii++) { + ObjectTreeViewItem *child = dynamic_cast<ObjectTreeViewItem *> + (item->child(ii)); + + FWObject *obj = child->getFWObject(); + if (obj->getRO()) { + QMessageBox::critical(this, "Firewall Builder", + tr("Folder with locked object " + "cannot be deleted")); + return; + } + + objs.push_back(obj); + } + + if (objs.size() > 0) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + ConfirmDeleteObjectDialog confirm(this); + confirm.load(objs); + QApplication::restoreOverrideCursor(); + if (confirm.exec() == QDialog::Rejected) return; + } + + FWCmdMacro *macro = new FWCmdMacro(tr("Delete user folder")); QList<QTreeWidgetItem *> children = item->takeChildren(); while (!children.isEmpty()) { ObjectTreeViewItem *child = dynamic_cast<ObjectTreeViewItem *> (children.takeFirst()); assert(child != 0); - child->getFWObject()->setStr("folder", ""); - parent->addChild(child); + + FWObject *obj = child->getFWObject(); + if (mw->isEditorVisible() && mw->getOpenedEditor() == obj) { + mw->hideEditor(); } - parent->removeChild(item); - delete item; + deleteObject(obj, macro); + } - refreshSubtree(parent, 0); + FWCmdRemoveUserFolder *cmd = + new FWCmdRemoveUserFolder(m_project, parent->getFWObject(), + item->getUserFolderName(), "", macro); + FWObject *newObj = cmd->getNewState(); + set<string> folders = stringToSet(newObj->getStr("subfolders")); + folders.erase(item->getUserFolderName().toUtf8().constData()); + newObj->setStr("subfolders", setToString(folders)); + m_project->undoStack->push(macro); } diff --git a/src/libgui/ObjectManipulator_tree_ops.cpp b/src/libgui/ObjectManipulator_tree_ops.cpp index ee0d165..e2e2734 100644 --- a/src/libgui/ObjectManipulator_tree_ops.cpp +++ b/src/libgui/ObjectManipulator_tree_ops.cpp @@ -52,6 +52,7 @@ #include "events.h" #include "FWCmdChange.h" #include "FWCmdAddObject.h" +#include "FWCmdMoveObject.h" #include "IconSetter.h" #include <QTextEdit> @@ -219,19 +220,42 @@ void ObjectManipulator::collapseCurrentTreeNode() } +static ObjectTreeViewItem *findUserFolder(ObjectTreeViewItem *parent, + const QString &folder) +{ + if (folder.isEmpty()) return parent; + + for (int ii = 0; ii < parent->childCount(); ii++) { + ObjectTreeViewItem *sub = + dynamic_cast<ObjectTreeViewItem *>(parent->child(ii)); + if (sub != 0 && + sub->getUserFolderParent() != 0 && + sub->getUserFolderName() == folder) { + return sub; + } + } + + return 0; +} + + ObjectTreeViewItem* ObjectManipulator::insertObject(ObjectTreeViewItem *itm, FWObject *obj) { if (FWReference::cast(obj)!=NULL) return NULL; if (Resources::global_res->getObjResourceBool(obj,"hidden") ) return NULL; - ObjectTreeViewItem *nitm = NULL; - if (Resources::global_res->getResourceBool( string("/FWBuilderResources/Type/") + obj->getTypeName() + "/hidden")) return NULL; - nitm = new ObjectTreeViewItem( itm ); + ObjectTreeViewItem *item = itm; + if (!obj->getStr("folder").empty()) { + item = findUserFolder(itm, obj->getStr("folder").c_str()); + if (item == 0) item = itm; + } + + ObjectTreeViewItem *nitm = new ObjectTreeViewItem(item); nitm->setLib(""); nitm->setText( 0, getTreeLabel(obj, 0) ); @@ -336,12 +360,7 @@ void ObjectManipulator::insertSubtree(ObjectTreeViewItem *itm, FWObject *obj) FWObject *o1=*m; if (FWReference::cast(o1)!=NULL) continue; - ObjectTreeViewItem *item = 0; - QString folder = QString::fromUtf8(o1->getStr("folder").c_str()); - item = folders.value(folder); - if (item == 0) item = nitm; - - insertSubtree( item, o1 ); + insertSubtree(nitm, o1); } } @@ -709,25 +728,101 @@ void ObjectManipulator::moveItems(ObjectTreeViewItem *dest, { string folder; QTreeWidgetItem *destItem; + FWObject *folderObj; if (dest->getUserFolderParent() != 0) { folder = dest->getUserFolderName().toUtf8().constData(); destItem = dest; + folderObj = dest->getUserFolderParent(); } else { folder = dest->getFWObject()->getStr("folder"); if (FWBTree().isSystem(dest->getFWObject())) { destItem = dest; + folderObj = dest->getFWObject(); } else { destItem = dest->parent(); + folderObj = dynamic_cast<ObjectTreeViewItem *>(dest->parent())->getFWObject(); } } + FWCmdMacro *macro = new FWCmdMacro(tr("Move objects")); + list<FWObject *>::const_iterator iter; for (iter = items.begin(); iter != items.end(); ++iter) { - (*iter)->setStr("folder", folder); - ObjectTreeViewItem *item = allItems[*iter]; - item->parent()->removeChild(item); - destItem->addChild(item); + FWObject *obj = *iter; + + FWCmdMoveToFromUserFolder *cmd = new FWCmdMoveToFromUserFolder + (m_project, folderObj, obj, + obj->getStr("folder").c_str(), folder.c_str(), "", macro); + + FWObject *newObj = cmd->getNewState(); + newObj->setStr("folder", folder); + } + + m_project->undoStack->push(macro); } - refreshSubtree(destItem, 0); + +void ObjectManipulator::addUserFolderToTree(FWObject *obj, + const QString &folder) +{ + ObjectTreeViewItem *item = allItems[obj]; + if (item == 0) return; + + ObjectTreeViewItem *sub = new ObjectTreeViewItem(item); + sub->setUserFolderParent(obj); + sub->setUserFolderName(folder); + sub->setText(0, folder); + sub->setIcon(0, QIcon(LoadPixmap(":/Icons/SystemGroup/icon-tree"))); + refreshSubtree(item, sub); } + + +void ObjectManipulator::removeUserFolderFromTree(FWObject *obj, + const QString &folder) +{ + ObjectTreeViewItem *item = allItems[obj]; + if (item == 0) return; + + ObjectTreeViewItem *sub = findUserFolder(item, folder); + if (sub == 0) return; + + QList<QTreeWidgetItem *> children = sub->takeChildren(); + while (!children.isEmpty()) { + ObjectTreeViewItem *child = dynamic_cast<ObjectTreeViewItem *> + (children.takeFirst()); + assert(child != 0); + + FWObject *obj = child->getFWObject(); + if (mw->isEditorVisible() && mw->getOpenedEditor() == obj) { + mw->hideEditor(); + } + + delete child; + } + + item->removeChild(sub); + delete sub; + + refreshSubtree(item, 0); +} + + +void ObjectManipulator::moveToFromUserFolderInTree(FWObject *obj, + FWObject *objToMove, + const QString &oldFolder, + const QString &newFolder) +{ + ObjectTreeViewItem *parent = allItems[obj]; + ObjectTreeViewItem *toMove = allItems[objToMove]; + if (parent == 0 || toMove == 0) return; + + ObjectTreeViewItem *oldItem = findUserFolder(parent, oldFolder); + ObjectTreeViewItem *newItem = findUserFolder(parent, newFolder); + + oldItem->removeChild(toMove); + newItem->addChild(toMove); + + refreshSubtree(newItem, 0); +} + + diff --git a/src/libgui/ProjectPanel_events.cpp b/src/libgui/ProjectPanel_events.cpp index 3bd6f6f..d33a0f9 100644 --- a/src/libgui/ProjectPanel_events.cpp +++ b/src/libgui/ProjectPanel_events.cpp @@ -435,6 +435,22 @@ bool ProjectPanel::event(QEvent *event) ev->accept(); return true; + case ADD_USER_FOLDER_EVENT: + m_panel->om->addUserFolderToTree(obj, dynamic_cast<addUserFolderEvent *>(event)->m_userFolder); + ev->accept(); + return true; + + case REMOVE_USER_FOLDER_EVENT: + m_panel->om->removeUserFolderFromTree(obj, dynamic_cast<removeUserFolderEvent *>(event)->m_userFolder); + ev->accept(); + return true; + + case MOVE_TOFROM_USER_FOLDER_EVENT: + moveToFromUserFolderEvent *moveEvent = + dynamic_cast<moveToFromUserFolderEvent *>(event); + m_panel->om->moveToFromUserFolderInTree(obj, db()->findInIndex(moveEvent->m_objIdToMove), moveEvent->m_oldFolder, moveEvent->m_newFolder); + ev->accept(); + return true; } } return false; diff --git a/src/libgui/events.h b/src/libgui/events.h index 0187efc..37e6135 100644 --- a/src/libgui/events.h +++ b/src/libgui/events.h @@ -71,6 +71,9 @@ enum EVENT_CODES { EXPAND_OBJECT_IN_TREE, CLOSE_EDITOR_PANEL_EVENT , CLEAR_EDITOR_PANEL_EVENT , + ADD_USER_FOLDER_EVENT, + REMOVE_USER_FOLDER_EVENT, + MOVE_TOFROM_USER_FOLDER_EVENT, }; @@ -414,4 +417,44 @@ public: {} }; + +class addUserFolderEvent : public fwbUpdateEvent { +public: + QString m_userFolder; + addUserFolderEvent(const QString &fileName, int objId, + const QString &userFolder) : + fwbUpdateEvent(fileName, objId, + QEvent::Type(QEvent::User + ADD_USER_FOLDER_EVENT), + "addUserFolderEvent") + { m_userFolder = userFolder; } +}; + +class removeUserFolderEvent : public fwbUpdateEvent { +public: + QString m_userFolder; + removeUserFolderEvent(const QString &fileName, int objId, + const QString &userFolder) : + fwbUpdateEvent(fileName, objId, + QEvent::Type(QEvent::User + REMOVE_USER_FOLDER_EVENT), + "removeUserFolderEvent") + { m_userFolder = userFolder; } +}; + +class moveToFromUserFolderEvent : public fwbUpdateEvent { +public: + int m_objIdToMove; + QString m_oldFolder; + QString m_newFolder; + moveToFromUserFolderEvent(const QString &fileName, int objId, + int objIdToMove, const QString &oldFolder, + const QString &newFolder) : + fwbUpdateEvent(fileName, objId, + QEvent::Type(QEvent::User+MOVE_TOFROM_USER_FOLDER_EVENT), + "removeUserFolderEvent"), + m_objIdToMove(objIdToMove), + m_oldFolder(oldFolder), + m_newFolder(newFolder) + {} +}; + #endif ----------------------------------------------------------------------- Summary of changes: src/libfwbuilder/src/fwbuilder/FWObject.cpp | 1 + src/libgui/FWCmdAddObject.cpp | 40 +++++++++ src/libgui/FWCmdAddObject.h | 16 ++++ src/libgui/FWCmdDeleteObject.cpp | 37 ++++++++ src/libgui/FWCmdDeleteObject.h | 16 ++++ src/libgui/FWCmdMoveObject.cpp | 49 ++++++++++- src/libgui/FWCmdMoveObject.h | 24 +++++- src/libgui/ObjectManipulator.cpp | 7 +- src/libgui/ObjectManipulator.h | 10 ++ src/libgui/ObjectManipulator_ops.cpp | 66 ++++++++++---- src/libgui/ObjectManipulator_tree_ops.cpp | 123 ++++++++++++++++++++++++--- src/libgui/ProjectPanel_events.cpp | 16 ++++ src/libgui/events.h | 43 +++++++++ 13 files changed, 409 insertions(+), 39 deletions(-) hooks/post-receive -- Firewall Builder GUI and Policy Compilers Open Source Code |