mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-24 12:17:26 +01:00
393 lines
12 KiB
C++
393 lines
12 KiB
C++
/*
|
|
|
|
Firewall Builder
|
|
|
|
Copyright (C) 2003 NetCitadel, LLC
|
|
|
|
Author: Vadim Kurland vadim@fwbuilder.org
|
|
|
|
$Id$
|
|
|
|
This program is free software which we release under the GNU General Public
|
|
License. You may redistribute and/or modify this program under the terms
|
|
of that license as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
To get a copy of the GNU General Public License, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
|
|
#ifndef __OBJECTMANIPULATOR_H_
|
|
#define __OBJECTMANIPULATOR_H_
|
|
|
|
|
|
#include "../../config.h"
|
|
#include "global.h"
|
|
|
|
#include <qdialog.h>
|
|
#include <qtreewidget.h>
|
|
#include <qtooltip.h>
|
|
#include <QMenu>
|
|
|
|
#include <ui_objectmanipulator_q.h>
|
|
|
|
#include "fwbuilder/FWObject.h"
|
|
#include "fwbuilder/FWObjectDatabase.h"
|
|
#include "fwbuilder/ObjectGroup.h"
|
|
|
|
#include <stack>
|
|
#include <set>
|
|
|
|
class ObjectTreeView;
|
|
class ObjectTreeViewItem;
|
|
class QComboBox;
|
|
class QMenu;
|
|
class ProjectPanel;
|
|
|
|
namespace libfwbuilder
|
|
{
|
|
class Firewall;
|
|
class Library;
|
|
}
|
|
|
|
class HistoryItem {
|
|
ObjectTreeViewItem *itm;
|
|
int objId;
|
|
|
|
public:
|
|
HistoryItem(ObjectTreeViewItem *oi, int id) { itm=oi; objId=id; }
|
|
~HistoryItem();
|
|
ObjectTreeViewItem* item() { return itm; }
|
|
int id() { return objId; }
|
|
};
|
|
|
|
/*class ObjToolTip : public QToolTip {
|
|
|
|
ObjectTreeView *otv;
|
|
public:
|
|
ObjToolTip(ObjectTreeView *widget);
|
|
virtual ~ObjToolTip() {}
|
|
virtual void maybeTip(const QPoint &p);
|
|
};*/
|
|
|
|
class ObjectManipulator : public QWidget/*ObjectManipulator_q*/ {
|
|
|
|
Q_OBJECT
|
|
|
|
std::vector<libfwbuilder::FWObject*> idxToLibs;
|
|
std::vector<QTreeWidget*> idxToTrees;
|
|
QSet<int> ids ;
|
|
std::stack<HistoryItem> history;
|
|
int cacheHits;
|
|
|
|
libfwbuilder::FWObject *currentObj;
|
|
ObjectTreeView *current_tree_view;
|
|
|
|
int treeWidth;
|
|
int treeHeight;
|
|
|
|
bool active;
|
|
|
|
/* this is a reverse idex of all objects in all trees. We use it to
|
|
* quickly locate given object in the tree and open it
|
|
*/
|
|
std::map<libfwbuilder::FWObject*, ObjectTreeViewItem*> allItems;
|
|
QVector <ObjectManipulator*> getAllMdiObjectManipulators ();
|
|
|
|
ObjectTreeViewItem* insertObject( ObjectTreeViewItem *itm,
|
|
libfwbuilder::FWObject *obj );
|
|
void insertSubtree( ObjectTreeViewItem *itm,libfwbuilder::FWObject *obj );
|
|
|
|
void removeObjectFromTreeView(libfwbuilder::FWObject *obj );
|
|
|
|
QString getTreeLabel( libfwbuilder::FWObject *obj );
|
|
|
|
void addTreePage(libfwbuilder::FWObject *lib);
|
|
void showObjectInTree(ObjectTreeViewItem *otvi);
|
|
|
|
int getIdxForLib(libfwbuilder::FWObject*);
|
|
void addLib( libfwbuilder::FWObject *lib, QTreeWidget* otv=NULL);
|
|
void removeLib(libfwbuilder::FWObject*);
|
|
void removeLib(int idx);
|
|
void updateCreateObjectMenu(libfwbuilder::FWObject* lib);
|
|
void makeNameUnique(libfwbuilder::FWObject* p,libfwbuilder::FWObject* obj);
|
|
|
|
libfwbuilder::FWObject* actuallyCreateObject(libfwbuilder::FWObject *parent,
|
|
const QString &objType,
|
|
const QString &objName,
|
|
libfwbuilder::FWObject *copyFrom=NULL);
|
|
|
|
void autorename(libfwbuilder::FWObject *obj,bool ask=true);
|
|
void extractFirewallsFromGroup(
|
|
libfwbuilder::ObjectGroup *gr,
|
|
std::set<libfwbuilder::Firewall*> &fo);
|
|
|
|
ProjectPanel *m_project;
|
|
|
|
|
|
public slots:
|
|
virtual void libChanged(int l);
|
|
virtual void switchingTrees(QWidget* w);
|
|
virtual void currentTreePageChanged(int i);
|
|
|
|
void selectionChanged(QTreeWidgetItem *cur);
|
|
|
|
void info();
|
|
|
|
/**
|
|
* open object obj in the editor. Does not open editor panel
|
|
* if it is closed. Asks FWWindow permission to own editor.
|
|
*/
|
|
bool switchObjectInEditor(libfwbuilder::FWObject *obj);
|
|
|
|
/**
|
|
* same as above but opens editor panel if it is closed. This is
|
|
* an entry point for menu items 'edit', all 'new object' as well
|
|
* as doubleclick
|
|
*/
|
|
bool editObject(libfwbuilder::FWObject *obj);
|
|
|
|
/*
|
|
* forget about currently opened object; close editor panel if it is open
|
|
*/
|
|
void closeObject();
|
|
|
|
void editSelectedObject();
|
|
|
|
void contextMenuRequested(const QPoint &pos);
|
|
|
|
|
|
libfwbuilder::FWObject* createObject(const QString &objType,
|
|
const QString &objName,
|
|
libfwbuilder::FWObject *copyFrom=NULL);
|
|
|
|
libfwbuilder::FWObject* createObject(libfwbuilder::FWObject *parent,
|
|
const QString &objType,
|
|
const QString &objName,
|
|
libfwbuilder::FWObject *copyFrom=NULL);
|
|
libfwbuilder::FWObject * copyObj2Tree(const QString &objType,
|
|
const QString &objName,
|
|
libfwbuilder::FWObject *copyFrom,
|
|
libfwbuilder::FWObject *parent=NULL,
|
|
bool ask4Lib=true);
|
|
|
|
libfwbuilder::FWObject * copyObjWithDeep(libfwbuilder::FWObject *copyFrom);
|
|
|
|
|
|
void newLibrary();
|
|
void newObject();
|
|
void newFirewall();
|
|
void newHost();
|
|
void newInterface();
|
|
void newNetwork();
|
|
void newNetworkIPv6();
|
|
void newAddress();
|
|
void newAddressIPv6();
|
|
void newInterfaceAddress();
|
|
void newInterfaceAddressIPv6();
|
|
void newPhysicalAddress();
|
|
void newAddressRange();
|
|
void newObjectGroup();
|
|
void newDNSName();
|
|
void newAddressTable();
|
|
|
|
void newCustom();
|
|
void newIP();
|
|
void newICMP();
|
|
void newICMP6();
|
|
void newTCP();
|
|
void newUDP();
|
|
void newTagService();
|
|
void newUserService();
|
|
void newServiceGroup();
|
|
|
|
void newInterval();
|
|
void newPolicyRuleSet ();
|
|
void newNATRuleSet ();
|
|
void copyObj();
|
|
void cutObj();
|
|
void pasteObj();
|
|
void deleteObj();
|
|
void dumpObj();
|
|
void compile();
|
|
void install();
|
|
|
|
void duplicateObj(QAction*);
|
|
void moveObj(QAction*);
|
|
|
|
void groupObjects();
|
|
|
|
void openObject(QTreeWidgetItem *otvi);
|
|
void openObject(libfwbuilder::FWObject *obj);
|
|
void restoreSelection(bool same_widget);
|
|
|
|
void find();
|
|
void findObject();
|
|
|
|
virtual void back();
|
|
virtual void lockObject();
|
|
virtual void unlockObject();
|
|
virtual void simulateInstall();
|
|
virtual void findWhereUsedSlot();
|
|
|
|
|
|
public:
|
|
|
|
void libChangedById(int id);
|
|
void changeFirstNotSystemLib();
|
|
std::vector<QTreeWidget*> getTreeWidgets() { return idxToTrees;};
|
|
Ui::ObjectManipulator_q *m_objectManipulator;
|
|
void filterFirewallsFromSelection(
|
|
std::vector<libfwbuilder::FWObject*> &so,
|
|
std::set<libfwbuilder::Firewall*> &fo);
|
|
void autorename(libfwbuilder::FWObject *obj,
|
|
const std::string &objtype,
|
|
const std::string &namesuffix);
|
|
|
|
ObjectManipulator( QWidget *parent);
|
|
~ObjectManipulator();
|
|
|
|
void loadObjects();
|
|
void clearObjects();
|
|
|
|
bool validateDialog();
|
|
void invalidateDialog();
|
|
|
|
void reopenCurrentItemParent();
|
|
|
|
void openObject(libfwbuilder::FWObject *obj, bool register_in_history);
|
|
void openObject(ObjectTreeViewItem *otvi, bool register_in_history);
|
|
|
|
libfwbuilder::FWObject* duplicateObject(libfwbuilder::FWObject *target,
|
|
libfwbuilder::FWObject *obj,
|
|
const QString &name = QString::null,
|
|
bool askForAutorename=true);
|
|
void moveObject(libfwbuilder::FWObject *target,
|
|
libfwbuilder::FWObject *obj);
|
|
|
|
void moveObject(const QString &targetLibName, libfwbuilder::FWObject *obj);
|
|
|
|
libfwbuilder::FWObject* getOpened() { return currentObj; }
|
|
|
|
void updateLibColor(libfwbuilder::FWObject *lib);
|
|
void updateLibName(libfwbuilder::FWObject *lib);
|
|
|
|
void updateObjName(libfwbuilder::FWObject *obj,
|
|
const QString &oldName,
|
|
bool askForAutorename=true);
|
|
void updateObjName(libfwbuilder::FWObject *obj,
|
|
const QString &oldName,
|
|
const QString &oldLabel,
|
|
bool askForAutorename=true);
|
|
|
|
ObjectTreeView* getCurrentObjectTree();
|
|
libfwbuilder::FWObject* getSelectedObject();
|
|
|
|
/**
|
|
* this method opens given library in the tree
|
|
*/
|
|
void openLib(libfwbuilder::FWObject *lib);
|
|
|
|
/**
|
|
* returns pointer at a library that is currently opened in the tree
|
|
*/
|
|
libfwbuilder::FWObject* getCurrentLib();
|
|
|
|
/**
|
|
* this method makes sure the system library is NOT opened in the
|
|
* tree. If it is, it switches to the 'User' library. If one of
|
|
* the user's libraries is already opened, it does nothing.
|
|
*/
|
|
void closeSystemLib();
|
|
|
|
libfwbuilder::FWObject* pasteTo(libfwbuilder::FWObject *target,
|
|
libfwbuilder::FWObject *obj,
|
|
bool openobj=true,
|
|
bool validateOnly=false,
|
|
bool renew_id=true);
|
|
|
|
|
|
void delObj(libfwbuilder::FWObject *obj,bool openobj=true);
|
|
|
|
/**
|
|
* select whatever object is current in the tree (used to restore
|
|
* selected state of the tree item after it was unselected)
|
|
*/
|
|
void select();
|
|
|
|
/**
|
|
* unselect whatever object is currently selected
|
|
*/
|
|
void unselect();
|
|
|
|
/**
|
|
* returns true if anything is selected in the tree
|
|
*/
|
|
bool isSelected();
|
|
|
|
/**
|
|
* controls whether "Deleted Objects" library is shown
|
|
*/
|
|
void showDeletedObjects(bool f);
|
|
|
|
|
|
/**
|
|
* get boolean flags that describe state of the menu items.
|
|
* Can be used for both pop-up context menu and the main menu.
|
|
*/
|
|
void getMenuState(bool haveMoveTargets,
|
|
bool &dupMenuItem,
|
|
bool &moveMenuItem,
|
|
bool ©MenuItem,
|
|
bool &pasteMenuItem,
|
|
bool &delMenuItem,
|
|
bool &newMenuItem,
|
|
bool &inDeletedObjects);
|
|
|
|
void updateLastModifiedTimestampForOneFirewall(libfwbuilder::FWObject *o);
|
|
void updateLastModifiedTimestampForAllFirewalls(libfwbuilder::FWObject *o);
|
|
void updateLastInstalledTimestamp(libfwbuilder::FWObject *o);
|
|
void updateLastCompiledTimestamp(libfwbuilder::FWObject *o);
|
|
|
|
std::list<libfwbuilder::Firewall*> findFirewallsForObject(
|
|
libfwbuilder::FWObject *o);
|
|
void findAllFirewalls (std::list<libfwbuilder::Firewall *> &fws);
|
|
|
|
|
|
signals:
|
|
/**
|
|
* the dialog class should have a slot that can load object's data
|
|
* into dialog elements when ObjectManipulator emits this signal
|
|
*/
|
|
void loadObject_sign(libfwbuilder::FWObject *);
|
|
|
|
/**
|
|
* the dialog class should have a slot that can verify data entered by
|
|
* user in the dialog elements when ObjectManipulator emits this
|
|
* signal. The validation result is returned in variable "bool *res"
|
|
*/
|
|
void validate_sign(bool *res);
|
|
|
|
/**
|
|
* the dialog class should have a slot that can verify if the data in
|
|
* dialog has been edited.
|
|
*/
|
|
void isChanged_sign(bool *res);
|
|
|
|
/**
|
|
* the dialog class should have a slot that applies changes made by
|
|
* the user and saves data in the object.
|
|
*/
|
|
void applyChanges_sign();
|
|
|
|
};
|
|
|
|
#endif
|