From 3304512740bdccce3a1e04006e57d441f1a68dd6 Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Mon, 18 Aug 2008 01:28:00 +0000 Subject: [PATCH] 2055984 ] Negate Objects not work --- doc/ChangeLog | 9 + src/gui/FWObjectClipboard.cpp | 23 +- src/gui/FWObjectClipboard.h | 2 +- src/gui/RuleSetView.cpp | 2 +- test/pf/objects-for-regression-tests.fwb | 468 +++++------------------ 5 files changed, 122 insertions(+), 382 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 568e4fb4f..02b475d88 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,12 @@ +2008-08-17 Vadim Kurland + + * RuleSetView.cpp (RuleSetView::copySelectedObject): fixed bug + #2055984: "Negate Objects not work". the problem really was not + related to negated objects, instead, user could not copy an object + from rule element into clipboard more than once. Copying whole + rule into clipboard worked fine, but individual object inside the + rule could be placed in clipboard only one time. + 2008-08-15 Vadim Kurland * Preprocessor.cpp (Preprocessor::isUsedByThisFirewall): fixed bug diff --git a/src/gui/FWObjectClipboard.cpp b/src/gui/FWObjectClipboard.cpp index 7073e19ca..201036fd6 100644 --- a/src/gui/FWObjectClipboard.cpp +++ b/src/gui/FWObjectClipboard.cpp @@ -54,10 +54,17 @@ FWObjectClipboard::~FWObjectClipboard() void FWObjectClipboard::clear() { + if (fwbdebug) qDebug("FWObjectClipboard::clear size()=%d", + int(size())); + for (vector >::iterator i=ids.begin(); i!=ids.end(); ++i) { - FWObject *obj = i->second->db()->findInIndex(i->first); + int obj_id = i->first; + ProjectPanel *proj_p = i->second; + assert(proj_p); + + FWObject *obj = proj_p->db()->findInIndex(obj_id); if (obj) { if (fwbdebug) @@ -70,19 +77,21 @@ void FWObjectClipboard::clear() ids.clear(); } -void FWObjectClipboard::add(FWObject *_obj, ProjectPanel * fww) +void FWObjectClipboard::add(FWObject *obj, ProjectPanel * proj_p) { if (fwbdebug) { - qDebug("FWObjectClipboard::add adding _obj=%p (id=%s)", - _obj, - FWObjectDatabase::getStringId(_obj->getId()).c_str() + qDebug("FWObjectClipboard::add obj=%p (id=%d %s) proj_p=%p", + obj, + obj->getId(), + FWObjectDatabase::getStringId(obj->getId()).c_str(), + proj_p ); } - _obj->ref(); + obj->ref(); - ids.push_back( pair(_obj->getId(), fww) ); + ids.push_back( pair(obj->getId(), proj_p) ); } FWObject* FWObjectClipboard::getObject() diff --git a/src/gui/FWObjectClipboard.h b/src/gui/FWObjectClipboard.h index 52d954e4f..39997b0e6 100644 --- a/src/gui/FWObjectClipboard.h +++ b/src/gui/FWObjectClipboard.h @@ -47,7 +47,7 @@ public: /** * adds an object to the clipboard */ - void add(libfwbuilder::FWObject*, ProjectPanel * fww=NULL); + void add(libfwbuilder::FWObject*, ProjectPanel *proj_p); /** * returns the last added object diff --git a/src/gui/RuleSetView.cpp b/src/gui/RuleSetView.cpp index 75e8e7629..c5c79ef03 100644 --- a/src/gui/RuleSetView.cpp +++ b/src/gui/RuleSetView.cpp @@ -3437,7 +3437,7 @@ void RuleSetView::copySelectedObject() if ( selectedObject!=NULL) { FWObjectClipboard::obj_clipboard->clear(); - FWObjectClipboard::obj_clipboard->add( selectedObject ); + FWObjectClipboard::obj_clipboard->add( selectedObject, m_project ); } } diff --git a/test/pf/objects-for-regression-tests.fwb b/test/pf/objects-for-regression-tests.fwb index 12859fcdd..6bead494f 100644 --- a/test/pf/objects-for-regression-tests.fwb +++ b/test/pf/objects-for-regression-tests.fwb @@ -1,378 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - established - -m state --state ESTABLISHED,RELATED - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -m record_rpc - - - - - - - - - - -m irc - - - - - - - - - - -m psd --psd-weight-threshold 5 --psd-delay-threshold 10000 - - - - - - - - - - -m string --string test_pattern - - - - - - - - - - -m talk - - - - - - - - - - - - - - - - + @@ -13606,4 +13234,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +