diff --git a/src/libgui/FWWindow.cpp b/src/libgui/FWWindow.cpp index fc9a3d9b0..c14a35546 100644 --- a/src/libgui/FWWindow.cpp +++ b/src/libgui/FWWindow.cpp @@ -1807,6 +1807,5 @@ void FWWindow::addNewObjectMenu(QMenu *m) void FWWindow::showNewObjectMenu() { m_mainWindow->newObjectAction->menu()->popup(QCursor::pos()); -// m_mainWindow->newObjectAction->parentWidget()->mapToGlobal(QPoint(0,0))); } diff --git a/src/libgui/ObjectManipulator.cpp b/src/libgui/ObjectManipulator.cpp index 30067aab2..b34d340be 100644 --- a/src/libgui/ObjectManipulator.cpp +++ b/src/libgui/ObjectManipulator.cpp @@ -131,6 +131,8 @@ ObjectManipulator::ObjectManipulator(QWidget *parent): // used in duplicateWithDependencies() dedup_marker_global_counter = time(NULL); + popup_menu = NULL; + // buildNewObjectMenu(); } @@ -362,7 +364,12 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) //if (currentObj==NULL) currentObj=otvi->getFWObject(); FWObject *currentObj = getSelectedObject(); - popup_menu->clear(); + if (popup_menu == NULL) + { + popup_menu = new QMenu(this); + popup_menu->setObjectName("objectTreeContextMenu"); + } else + popup_menu->clear(); if (item->childCount() > 0) { diff --git a/src/libgui/ObjectManipulator.h b/src/libgui/ObjectManipulator.h index 1ec236025..cc039511c 100644 --- a/src/libgui/ObjectManipulator.h +++ b/src/libgui/ObjectManipulator.h @@ -237,7 +237,8 @@ public slots: void newObject(); void createNewObject(); - + void newFirewallSlot(); + void copyObj(); void cutObj(); void pasteObj(); diff --git a/src/libgui/ObjectManipulator_create_new.cpp b/src/libgui/ObjectManipulator_create_new.cpp index 8e6f1801d..4460d3463 100644 --- a/src/libgui/ObjectManipulator_create_new.cpp +++ b/src/libgui/ObjectManipulator_create_new.cpp @@ -91,9 +91,6 @@ using namespace libfwbuilder; void ObjectManipulator::buildNewObjectMenu() { - popup_menu = new QMenu(this); - popup_menu->setObjectName("objectTreeContextMenu"); - QMenu* newObjectPopup = new QMenu( mw ); newObjectPopup->setObjectName("newObjectPopup"); @@ -266,6 +263,35 @@ void ObjectManipulator::createNewObject() m_project->undoStack->push(macro); } +void ObjectManipulator::newFirewallSlot() +{ + QString descr = FWBTree().getTranslatableObjectTypeName(Firewall::TYPENAME); + // FWCmdMacro should be used for commands grouping + FWCmdMacro* macro = 0; + macro = new FWCmdMacro( + FWBTree().getTranslatableNewObjectMenuText(Firewall::TYPENAME)); + + FWObject *new_obj = newFirewall(macro); + + if (new_obj == NULL) + { + delete macro; + return; + } + + QCoreApplication::postEvent( + m_project, new expandObjectInTreeEvent( + m_project->getFileName(), new_obj->getId())); + + FWObject *ruleset = new_obj->getFirstByType(Policy::TYPENAME); + if (ruleset) + QCoreApplication::postEvent( + m_project, new openRulesetEvent( + m_project->getFileName(), ruleset->getId())); + + m_project->undoStack->push(macro); +} + FWObject* ObjectManipulator::createObject(const QString &objType, const QString &objName, FWObject *copyFrom, diff --git a/src/libgui/WorkflowIcons.cpp b/src/libgui/WorkflowIcons.cpp index 0c82fa0ce..34a609e7c 100644 --- a/src/libgui/WorkflowIcons.cpp +++ b/src/libgui/WorkflowIcons.cpp @@ -49,8 +49,7 @@ WorkflowIcons::WorkflowIcons(QWidget *parent) : void WorkflowIcons::setUpSignals(QWidget *panel) { ObjectManipulator *om = panel->findChild(); - QAction *newFirewall = om->findChild(QString("newObject_") + libfwbuilder::Firewall::TYPENAME); - connect(ui->newFirewall, SIGNAL(clicked()), newFirewall, SLOT(trigger())); + connect(ui->newFirewall, SIGNAL(clicked()), om, SLOT(newFirewallSlot())); // global variable mw is null when this is running QObject *mainWindow = dynamic_cast(panel)->getWindow();