From 8a7ef98a4a214e4b93107e261561f5174686270a Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Fri, 1 Apr 2011 11:28:30 -0700 Subject: [PATCH] fixes #2307 "GUI switches to another file after editor panel is closed" --- VERSION | 2 +- VERSION.h | 2 +- doc/ChangeLog | 5 ++ packaging/fwbuilder-static-qt.spec | 2 +- packaging/fwbuilder.control | 2 +- packaging/fwbuilder.spec | 2 +- src/libgui/CommentEditorPanel.cpp | 4 +- src/libgui/FWCmdRule.cpp | 103 ++++++++++++++++++++--------- src/libgui/FWCmdRule.h | 4 +- src/libgui/FWWindow_editor.cpp | 3 + src/libgui/RuleSetView.cpp | 4 +- 11 files changed, 92 insertions(+), 41 deletions(-) diff --git a/VERSION b/VERSION index e249789e6..d063f3169 100644 --- a/VERSION +++ b/VERSION @@ -7,7 +7,7 @@ FWB_MICRO_VERSION=0 # build number is like "nano" version number. I am incrementing build # number during development cycle # -BUILD_NUM="3515" +BUILD_NUM="3516" VERSION="$FWB_MAJOR_VERSION.$FWB_MINOR_VERSION.$FWB_MICRO_VERSION.$BUILD_NUM" diff --git a/VERSION.h b/VERSION.h index 2d0aca889..b5a1823a8 100644 --- a/VERSION.h +++ b/VERSION.h @@ -1,2 +1,2 @@ -#define VERSION "4.2.0.3515" +#define VERSION "4.2.0.3516" #define GENERATION "4.2" diff --git a/doc/ChangeLog b/doc/ChangeLog index a75b31c70..a02cceda2 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2011-04-01 vadim + + * FWWindow_editor.cpp (openOptEditor): fixes #2307 "GUI switches + to another file after editor panel is closed" + 2011-03-31 vadim * parsers/pix.g (http_command): see #2164 fixed import of "ssh" diff --git a/packaging/fwbuilder-static-qt.spec b/packaging/fwbuilder-static-qt.spec index 8900c6d54..1b31432d4 100644 --- a/packaging/fwbuilder-static-qt.spec +++ b/packaging/fwbuilder-static-qt.spec @@ -3,7 +3,7 @@ %define name fwbuilder -%define version 4.2.0.3515 +%define version 4.2.0.3516 %define release 1 %if "%_vendor" == "MandrakeSoft" diff --git a/packaging/fwbuilder.control b/packaging/fwbuilder.control index 26c69ff12..094a0f39d 100644 --- a/packaging/fwbuilder.control +++ b/packaging/fwbuilder.control @@ -4,6 +4,6 @@ Replaces: fwbuilder (<=4.1.1-1), fwbuilder-common, fwbuilder-bsd, fwbuilder-linu Priority: extra Section: checkinstall Maintainer: vadim@fwbuilder.org -Version: 4.2.0.3515-1 +Version: 4.2.0.3516-1 Depends: libqt4-gui (>= 4.3.0), libxml2, libxslt1.1, libsnmp | libsnmp15 Description: Firewall Builder GUI and policy compilers diff --git a/packaging/fwbuilder.spec b/packaging/fwbuilder.spec index 9f27b1376..66cfa463e 100644 --- a/packaging/fwbuilder.spec +++ b/packaging/fwbuilder.spec @@ -1,6 +1,6 @@ %define name fwbuilder -%define version 4.2.0.3515 +%define version 4.2.0.3516 %define release 1 %if "%_vendor" == "MandrakeSoft" diff --git a/src/libgui/CommentEditorPanel.cpp b/src/libgui/CommentEditorPanel.cpp index b0e4cede9..b2c1079d2 100644 --- a/src/libgui/CommentEditorPanel.cpp +++ b/src/libgui/CommentEditorPanel.cpp @@ -113,7 +113,9 @@ void CommentEditorPanel::changed() void CommentEditorPanel::applyChanges() { - std::auto_ptr cmd( new FWCmdRuleChangeComment(m_project, rule)); + std::auto_ptr cmd( + new FWCmdRuleChangeComment(m_project, rule)); + // new_state is a copy of the rule object FWObject* new_state = cmd->getNewState(); diff --git a/src/libgui/FWCmdRule.cpp b/src/libgui/FWCmdRule.cpp index 24eb28120..5d825dcb4 100644 --- a/src/libgui/FWCmdRule.cpp +++ b/src/libgui/FWCmdRule.cpp @@ -48,7 +48,8 @@ using namespace libfwbuilder; * FWCmdRule ********************************************************/ -FWCmdRule::FWCmdRule(ProjectPanel *project, libfwbuilder::RuleSet* ruleset, QUndoCommand* macro) : FWCmdBasic(project, macro) +FWCmdRule::FWCmdRule(ProjectPanel *project, RuleSet* ruleset, + QUndoCommand* macro) : FWCmdBasic(project, macro) { this->ruleset = ruleset; } @@ -152,7 +153,8 @@ void FWCmdRuleInsert::undoOnModel(RuleSetModel *md) * FWCmdRuleDelete ********************************************************/ -FWCmdRuleDelete::FWCmdRuleDelete(ProjectPanel *project, RuleSet* ruleset, QList &rulesToDelete, QUndoCommand* macro): +FWCmdRuleDelete::FWCmdRuleDelete(ProjectPanel *project, RuleSet* ruleset, + QList &rulesToDelete, QUndoCommand* macro) : FWCmdRule(project, ruleset, macro) { copyRules(rulesToDelete); @@ -238,9 +240,10 @@ void FWCmdRuleDelete::undoOnModel(RuleSetModel *md) * FWCmdRuleDeleteFromGroup ********************************************************/ -FWCmdRuleDeleteFromGroup::FWCmdRuleDeleteFromGroup(ProjectPanel *project, RuleSet* ruleset, QList rulesToDelete, - QUndoCommand* macro): - FWCmdRuleDelete(project, ruleset, rulesToDelete, macro) +FWCmdRuleDeleteFromGroup::FWCmdRuleDeleteFromGroup( + ProjectPanel *project, + RuleSet* ruleset, QList rulesToDelete, + QUndoCommand* macro) : FWCmdRuleDelete(project, ruleset, rulesToDelete, macro) { setText(QObject::tr("delete rules from group")); } @@ -254,8 +257,10 @@ void FWCmdRuleDeleteFromGroup::undoOnModel(RuleSetModel *md) * FWCmdRuleColor ********************************************************/ -FWCmdRuleColor::FWCmdRuleColor(ProjectPanel *project, RuleSet* ruleset, QList &rules,const QString &newColor): - FWCmdRule(project, ruleset),newColor(newColor) +FWCmdRuleColor::FWCmdRuleColor( + ProjectPanel *project, + RuleSet* ruleset, QList &rules, + const QString &newColor) : FWCmdRule(project, ruleset), newColor(newColor) { foreach(Rule* rule, rules) { @@ -307,8 +312,10 @@ void FWCmdRuleColor::undoOnModel(RuleSetModel *md) * FWCmdRuleMove ********************************************************/ -FWCmdRuleMove::FWCmdRuleMove(ProjectPanel *project, libfwbuilder::RuleSet* ruleset, int firstId, int lastId, bool direction): - FWCmdRule(project, ruleset), firstId(firstId), lastId(lastId), direction(direction) +FWCmdRuleMove::FWCmdRuleMove(ProjectPanel *project, RuleSet* ruleset, + int firstId, int lastId, bool direction) : + FWCmdRule(project, ruleset), + firstId(firstId), lastId(lastId), direction(direction) { setText((direction)?QObject::tr("move rule up"):QObject::tr("move rule down")); } @@ -355,8 +362,9 @@ void FWCmdRuleMove::move(RuleSetModel *md, bool direction) * FWCmdRuleRenameGroup ********************************************************/ -FWCmdRuleRenameGroup::FWCmdRuleRenameGroup(ProjectPanel *project, RuleSet* ruleset, QString oldName, QString newName): - FWCmdRule(project, ruleset), oldName(oldName), newName(newName) +FWCmdRuleRenameGroup::FWCmdRuleRenameGroup( + ProjectPanel *project, RuleSet* ruleset, QString oldName, QString newName) : + FWCmdRule(project, ruleset), oldName(oldName), newName(newName) { setText(QObject::tr("negate rule element")); } @@ -378,8 +386,11 @@ void FWCmdRuleRenameGroup::undoOnModel(RuleSetModel *md) * FWCmdRuleRemoveFromGroup ********************************************************/ -FWCmdRuleRemoveFromGroup::FWCmdRuleRemoveFromGroup(ProjectPanel* project, RuleSet* ruleset, Rule* firstRule, Rule* lastRule, const QString groupName, QUndoCommand* macro): - FWCmdRule(project, ruleset, macro), firstRule(firstRule), lastRule(lastRule), groupName(groupName) +FWCmdRuleRemoveFromGroup::FWCmdRuleRemoveFromGroup( + ProjectPanel* project, RuleSet* ruleset, + Rule* firstRule, Rule* lastRule, const QString groupName, QUndoCommand* macro) : + FWCmdRule(project, ruleset, macro), + firstRule(firstRule), lastRule(lastRule), groupName(groupName) { setText(QObject::tr("remove object(s) from group ")+groupName); } @@ -420,8 +431,10 @@ void FWCmdRuleRemoveFromGroup::undoOnModel(RuleSetModel *md) * FWCmdRuleNewGroup ********************************************************/ -FWCmdRuleNewGroup::FWCmdRuleNewGroup(ProjectPanel* project, RuleSet* ruleset, Rule* firstRule, Rule* lastRule, const QString groupName): - FWCmdRule(project, ruleset), firstRule(firstRule), lastRule(lastRule) +FWCmdRuleNewGroup::FWCmdRuleNewGroup( + ProjectPanel* project, RuleSet* ruleset, + Rule* firstRule, Rule* lastRule, const QString groupName) : + FWCmdRule(project, ruleset), firstRule(firstRule), lastRule(lastRule) { this->groupName = getRuleSetModel()->findUniqueNameForGroup(groupName); @@ -451,8 +464,11 @@ void FWCmdRuleNewGroup::undoOnModel(RuleSetModel *md) * FWCmdRuleAddToGroup ********************************************************/ -FWCmdRuleAddToGroup::FWCmdRuleAddToGroup(ProjectPanel* project, RuleSet* ruleset, Rule* firstRule, Rule* lastRule, bool isAbove): - FWCmdRule(project, ruleset), firstRule(firstRule), lastRule(lastRule), isAbove(isAbove) +FWCmdRuleAddToGroup::FWCmdRuleAddToGroup( + ProjectPanel* project, RuleSet* ruleset, + Rule* firstRule, Rule* lastRule, bool isAbove) : + FWCmdRule(project, ruleset), + firstRule(firstRule), lastRule(lastRule), isAbove(isAbove) { setText((isAbove)?QObject::tr("add to group above"):QObject::tr("add to group below")); } @@ -481,6 +497,13 @@ void FWCmdRuleAddToGroup::undoOnModel(RuleSetModel *md) * FWCmdRuleChange ********************************************************/ +FWCmdRuleChange::FWCmdRuleChange( + ProjectPanel *project, RuleSet* ruleset, + FWObject *obj, QString text, QUndoCommand* macro) : + FWCmdChange(project, obj, text, false, macro), ruleset(ruleset) +{ +} + void FWCmdRuleChange::selectAffectedRule() { RuleSetView* rsv = project->getCurrentRuleSetView(); @@ -541,8 +564,11 @@ libfwbuilder::Rule* FWCmdRuleChange::getRule() * ********************************************************/ -FWCmdRuleChangeAction::FWCmdRuleChangeAction(ProjectPanel *project, libfwbuilder::FWObject *obj): - FWCmdRuleChange(project, RuleSet::cast(obj->getParent()), obj, QObject::tr("Edit Rule Action")) {}; +FWCmdRuleChangeAction::FWCmdRuleChangeAction( + ProjectPanel *project, FWObject *obj) : + FWCmdRuleChange(project, RuleSet::cast(obj->getParent()), + obj, QObject::tr("Edit Rule Action")) +{}; void FWCmdRuleChangeAction::notify() { @@ -561,8 +587,12 @@ void FWCmdRuleChangeAction::notify() * FWCmdRuleChangeComment ********************************************************/ -FWCmdRuleChangeComment::FWCmdRuleChangeComment(ProjectPanel *project, libfwbuilder::FWObject *obj): - FWCmdRuleChange(project, RuleSet::cast(obj->getParent()), obj, QObject::tr("Edit Rule Comment")) {}; +FWCmdRuleChangeComment::FWCmdRuleChangeComment( + ProjectPanel *project, FWObject *obj) : + FWCmdRuleChange(project, RuleSet::cast(obj->getParent()), + obj, QObject::tr("Edit Rule Comment")) +{ +} void FWCmdRuleChangeComment::notify() { @@ -570,8 +600,10 @@ void FWCmdRuleChangeComment::notify() if (mw->isEditorVisible()) { - QCoreApplication::postEvent(mw, new openOptObjectInEditorEvent(project->getFileName(), - getRule()->getId(), ObjectEditor::optComment)); + QCoreApplication::postEvent( + mw, new openOptObjectInEditorEvent( + project->getFileName(), + getRule()->getId(), ObjectEditor::optComment)); } } @@ -579,8 +611,12 @@ void FWCmdRuleChangeComment::notify() * FWCmdRuleChangeOptions ********************************************************/ -FWCmdRuleChangeOptions::FWCmdRuleChangeOptions(ProjectPanel *project, libfwbuilder::FWObject *obj): - FWCmdRuleChange(project, RuleSet::cast(obj->getParent()), obj, QObject::tr("Edit Rule Options")) {}; +FWCmdRuleChangeOptions::FWCmdRuleChangeOptions( + ProjectPanel *project, FWObject *obj) : + FWCmdRuleChange(project, + RuleSet::cast(obj->getParent()), + obj, QObject::tr("Edit Rule Options")) +{}; void FWCmdRuleChangeOptions::notify() { @@ -588,7 +624,9 @@ void FWCmdRuleChangeOptions::notify() if (mw->isEditorVisible()) { - QCoreApplication::postEvent(mw, new openObjectInEditorEvent(project->getFileName(), getRule()->getId())); + QCoreApplication::postEvent( + mw, new openObjectInEditorEvent( + project->getFileName(), getRule()->getId())); } } @@ -597,9 +635,11 @@ void FWCmdRuleChangeOptions::notify() * FWCmdRuleChangeRe ********************************************************/ -FWCmdRuleChangeRe::FWCmdRuleChangeRe(ProjectPanel *project, libfwbuilder::RuleSet* ruleset, - libfwbuilder::FWObject *obj, int position, int column, int number, QString text, QUndoCommand* macro): - FWCmdRuleChange(project, ruleset, obj, text, macro) +FWCmdRuleChangeRe::FWCmdRuleChangeRe( + ProjectPanel *project, RuleSet* ruleset, + FWObject *obj, int position, + int column, int number, QString text, QUndoCommand* macro) : + FWCmdRuleChange(project, ruleset, obj, text, macro) { this->column = column; this->number = number; @@ -622,8 +662,9 @@ void FWCmdRuleChangeRe::notify() * FWCmdRuleNegateRE ********************************************************/ -FWCmdRuleNegateRE::FWCmdRuleNegateRE(ProjectPanel *project, - RuleSet* ruleset, RuleElement* ruleElement): +FWCmdRuleNegateRE::FWCmdRuleNegateRE( + ProjectPanel *project, + RuleSet* ruleset, RuleElement* ruleElement) : FWCmdRuleChangeRe(project, ruleset, ruleElement, 0, 0, 0, QObject::tr("Negate")) { } diff --git a/src/libgui/FWCmdRule.h b/src/libgui/FWCmdRule.h index 6349e57e1..cbc43ec47 100644 --- a/src/libgui/FWCmdRule.h +++ b/src/libgui/FWCmdRule.h @@ -250,8 +250,8 @@ protected: public: FWCmdRuleChange(ProjectPanel *project, libfwbuilder::RuleSet* ruleset, - libfwbuilder::FWObject *obj, QString text=QString(), QUndoCommand* macro = 0): - FWCmdChange(project, obj, text, false, macro), ruleset(ruleset) {} + libfwbuilder::FWObject *obj, + QString text=QString(), QUndoCommand* macro = 0); virtual void redo(); virtual void undo(); diff --git a/src/libgui/FWWindow_editor.cpp b/src/libgui/FWWindow_editor.cpp index 3d50eb983..b191ec787 100644 --- a/src/libgui/FWWindow_editor.cpp +++ b/src/libgui/FWWindow_editor.cpp @@ -186,6 +186,9 @@ void FWWindow::openEditor(FWObject *obj) void FWWindow::openOptEditor(FWObject *obj, ObjectEditor::OptType t) { + attachEditorToProjectPanel(activeProject()); + + if (fwbdebug) qDebug() << "FWWindow::openOptEditor " << " obj: " diff --git a/src/libgui/RuleSetView.cpp b/src/libgui/RuleSetView.cpp index 526e34706..cb7657277 100644 --- a/src/libgui/RuleSetView.cpp +++ b/src/libgui/RuleSetView.cpp @@ -901,9 +901,8 @@ void RuleSetView::editSelected() bool RuleSetView::switchObjectInEditor(const QModelIndex& index, bool validate) { -// qDebug() << "RuleSetView::switchObjectInEditor"; RuleSetModel* md = ((RuleSetModel*)model()); - if(!isTreeReadWrite(this,md->getRuleSet())) return false; + if (!isTreeReadWrite(this,md->getRuleSet())) return false; if ( index.column()<=0 || index.row()==-1 ) return false; @@ -986,6 +985,7 @@ bool RuleSetView::switchObjectInEditor(const QModelIndex& index, bool validate) return true; } + if (object == NULL) { mw->blankEditor();