1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-21 18:57:14 +01:00

bugfix 2602,2601

This commit is contained in:
2008-05-31 14:05:52 +00:00
parent 97f8d72861
commit 07975b55b5
7 changed files with 312 additions and 136 deletions

View File

@ -33,6 +33,7 @@
#include "ActionsDialog.h"
#include "FWWindow.h"
#include "FWObjectDropArea.h"
#include "fwbuilder/Library.h"
#include "fwbuilder/Interface.h"
@ -60,10 +61,57 @@
using namespace std;
using namespace libfwbuilder;
ActionsDialog::ActionsDialog(QWidget *parent) : QWidget(parent)
{
m_dialog = new Ui::ActionsDialog_q;
m_dialog->setupUi(this);
BranchChainArea = new FWObjectDropArea(m_dialog->branchChainNameFrame);
BranchChainArea->addAcceptedTypes("Policy");
BranchChainArea->addAcceptedTypes("NAT");
BranchChainArea->addAcceptedTypes("Routing");
m_dialog->gridLayout17->addWidget(BranchChainArea);
connect (BranchChainArea,SIGNAL(objectDeleted()),this,SLOT(changed()));
connect (BranchChainArea,SIGNAL(objectInserted()),this,SLOT(changed()));
BranchAnchorArea = new FWObjectDropArea(m_dialog->BranchAnchorPageFrame);
BranchAnchorArea->addAcceptedTypes("Policy");
BranchAnchorArea->addAcceptedTypes("NAT");
BranchAnchorArea->addAcceptedTypes("Routing");
m_dialog->gridLayout20->addWidget(BranchAnchorArea);
connect (BranchAnchorArea,SIGNAL(objectDeleted()),this,SLOT(changed()));
connect (BranchAnchorArea,SIGNAL(objectInserted()),this,SLOT(changed()));
TagStrArea = new FWObjectDropArea(m_dialog->TagStrFrame);
TagStrArea->addAcceptedTypes("TagService");
m_dialog->gridLayout4->addWidget(TagStrArea);
connect (TagStrArea,SIGNAL(objectDeleted()),this,SLOT(changed()));
connect (TagStrArea,SIGNAL(objectInserted()),this,SLOT(changed()));
TagIntArea = new FWObjectDropArea(m_dialog->TagIntFrame);
TagIntArea->addAcceptedTypes("TagService");
m_dialog->gridLayout9->addWidget(TagIntArea);
connect (TagIntArea,SIGNAL(objectDeleted()),this,SLOT(changed()));
connect (TagIntArea,SIGNAL(objectInserted()),this,SLOT(changed()));
// FWObjectDropArea * fwoda = new FWObjectDropArea(m_dialog->TagIntFrame);
};
ActionsDialog::~ActionsDialog()
{
delete m_dialog;
delete TagIntArea;
delete TagStrArea;
delete BranchChainArea;
delete BranchAnchorArea;
}
void ActionsDialog::loadFWObject(FWObject *o)
{
setRule(PolicyRule::cast(o));
}
void ActionsDialog::changed()
@ -133,11 +181,45 @@ void ActionsDialog::applyChanges()
FWOptions *ropt = rule->getOptionsObject();
if (editor=="BranchChain" || editor=="BranchAnchor")
if (editor=="TagInt")
{
mw->setPolicyBranchTabName(rule->getBranch());
if (TagIntArea!=NULL)
{
QString id = TagIntArea->getObject()->getId().c_str();
ropt->setStr("tagobject_id",id.toAscii().data());
}
}
if (editor=="TagStr")
{
if (TagStrArea!=NULL)
{
QString id = TagStrArea->getObject()->getId().c_str();
ropt->setStr("tagobject_id",id.toAscii().data());
}
}
if (editor=="BranchChain")
{
if (BranchChainArea!=NULL)
{
QString id = BranchChainArea->getObject()->getId().c_str();
ropt->setStr("branch_id",id.toAscii().data());
mw->setPolicyBranchTabName(rule->getBranch());
}
}
if (editor=="BranchAnchor")
{
if (BranchAnchorArea!=NULL)
{
QString id = BranchAnchorArea->getObject()->getId().c_str();
ropt->setStr("branch_id",id.toAscii().data());
mw->setPolicyBranchTabName(rule->getBranch());
}
}
if (m_dialog->useDummyNetPipe->isChecked())
ropt->setInt("ipfw_classify_method",DUMMYNETPIPE);
else
@ -155,8 +237,8 @@ void ActionsDialog::discardChanges()
void ActionsDialog::tagvalueChanged(int)
{
QString buf;
buf.setNum(m_dialog->tagvalue_int->value());
m_dialog->tagvalue_str->setText(buf);
//!!! buf.setNum(m_dialog->tagvalue_int->value());
//!!! m_dialog->tagvalue_str->setText(buf);
}
void ActionsDialog::iptRouteContinueToggled()
@ -284,12 +366,28 @@ void ActionsDialog::setRule(PolicyRule *r )
else if (editor=="TagInt")
{
w=m_dialog->TagIntPage;
data.registerOption(m_dialog->tagvalue_int , ropt , "tagvalue");
std::string id = ropt->getStr("tagobject_id");
FWObject * o = rule->getRoot()->getById(id,true);
if (o!=NULL)
{
TagIntArea->setObject(o);
}
// FWObjectDropArea * fwoda = new FWObjectDropArea(m_dialog->TagIntFrame);
// m_dialog->TagIntFrame->addWidget(fwoda);
//! data.registerOption(m_dialog->tagvalue_int , ropt , "tagvalue");
}
else if (editor=="TagStr")
{
w=m_dialog->TagStrPage;
data.registerOption(m_dialog->tagvalue_str , ropt , "tagvalue");
std::string id = ropt->getStr("tagobject_id");
FWObject * o = rule->getRoot()->getById(id,true);
if (o!=NULL)
{
TagStrArea->setObject(o);
}
// FWObjectDropArea * fwoda = new FWObjectDropArea(m_dialog->TagStrFrame);
// m_dialog->TagStrFrame->addWidget(fwoda);
//! data.registerOption(m_dialog->tagvalue_str , ropt , "tagvalue");
}
else if (editor=="AccountingStr")
{
@ -314,13 +412,27 @@ void ActionsDialog::setRule(PolicyRule *r )
else if (editor=="BranchChain")
{
w=m_dialog->BranchChainPage;
data.registerOption ( m_dialog->branchChainName , ropt , "branch_name" );
std::string id = ropt->getStr("branch_id");
FWObject * o = rule->getRoot()->getById(id,true);
if (o!=NULL)
{
BranchChainArea->setObject(o);
}
//data.registerOption ( m_dialog->branchChainName , ropt , "branch_name" );
data.registerOption ( m_dialog->ipt_branch_in_mangle, ropt , "ipt_branch_in_mangle" );
}
else if (editor=="BranchAnchor")
{
w=m_dialog->BranchAnchorPage;
data.registerOption ( m_dialog->branchAnchorName , ropt , "branch_name" );
std::string id = ropt->getStr("branch_id");
FWObject * o = rule->getRoot()->getById(id,true);
if (o!=NULL)
{
BranchAnchorArea->setObject(o);
}
//int idx = ropt->getInt("branch_id");
//data.registerOption ( m_dialog->branchAnchorName , ropt , "branch_name" );
}
else if (editor=="RouteIPT")
{

View File

@ -44,7 +44,7 @@ namespace libfwbuilder
class QLineEdit;
class QComboBox;
class FWObjectDropArea;
class ActionsDialog : public QWidget
{
Q_OBJECT
@ -56,16 +56,17 @@ class ActionsDialog : public QWidget
QLineEdit *branchNameInput;
DialogData data;
FWObjectDropArea * BranchChainArea ;
FWObjectDropArea * BranchAnchorArea;
FWObjectDropArea * TagIntArea ;
FWObjectDropArea * TagStrArea ;
public:
Ui::ActionsDialog_q *m_dialog;
ActionsDialog(QWidget *parent) : QWidget(parent)
{
m_dialog = new Ui::ActionsDialog_q;
m_dialog->setupUi(this);
};
ActionsDialog(QWidget *parent);
~ActionsDialog() { delete m_dialog; };
~ActionsDialog();
virtual void closeEvent(QCloseEvent *e);
void fillInterfaces(QComboBox *);

View File

@ -116,6 +116,27 @@ bool FWObjectDrag::decode( QDropEvent *ev, list<FWObject*> &ol)
return true;
}
bool FWObjectDrag::decode( QDragEnterEvent *ev, list<FWObject*> &ol)
{
QByteArray rawdata = ev->encodedData( static_cast<const char*>(FWB_MIME_TYPE.toLatin1()) );
ol.clear();
QDataStream stream(&rawdata, QIODevice::ReadOnly);
int n = 0;
stream >> n;
for (int i=0; i<n; i++)
{
FWObject *o;
stream.readRawData( (char*)(&o) , sizeof(FWObject*) );
ol.push_back(o);
}
ev->accept();
return true;
}
Qt::DropAction FWObjectDrag::start(Qt::DropActions action)
{
if (fwbdebug) qDebug("FWObjectDrag::start"/*, action*/);

View File

@ -62,6 +62,8 @@ public:
QByteArray encodedData() const;
static bool decode( QDropEvent *ev, std::list<libfwbuilder::FWObject*> &ol);
static bool decode( QDragEnterEvent *ev, std::list<libfwbuilder::FWObject*> &ol);
};
#endif

View File

@ -185,6 +185,30 @@ void FWObjectDropArea::dropEvent( QDropEvent *ev)
void FWObjectDropArea::dragEnterEvent( QDragEnterEvent *ev)
{
list<FWObject*> dragol;
if (FWObjectDrag::decode(ev, dragol))
{
if (dragol.size()>0)
{
FWObject * o = dragol.front();
bool ok = false ;
for (int p = 0 ; p < acceptedTypes.size(); p++)
{
QString type =o->getTypeName().c_str();
if (type==acceptedTypes[p])
{
ok = true ;
break ;
}
}
if (!ok)
{
ev->setAccepted(false);
return ;
}
}
}
ev->setAccepted( ev->mimeData()->hasFormat(FWObjectDrag::FWB_MIME_TYPE) );
}

View File

@ -50,6 +50,7 @@ class FWObjectDropArea : public QWidget//Ui::FWObjectDropArea_q
Q_OBJECT
private:
libfwbuilder::FWObject *object;
QVector <QString> acceptedTypes ;
protected:
void paintEvent(QPaintEvent *ev);
void contextMenuEvent (QContextMenuEvent * e);
@ -61,7 +62,8 @@ class FWObjectDropArea : public QWidget//Ui::FWObjectDropArea_q
FWObjectDropArea(QWidget*p, const char * n = 0, Qt::WFlags f = 0);
~FWObjectDropArea();
libfwbuilder::FWObject * getObject(){return object;};
void setObject(libfwbuilder::FWObject * o){ object = o ;};
void addAcceptedTypes (QString type){acceptedTypes.push_back(type);};
bool isEmpty() {return object==NULL;};
public slots:

View File

@ -139,7 +139,7 @@
<enum>QFrame::Plain</enum>
</property>
<property name="currentIndex" >
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="TagStrPage" >
<layout class="QGridLayout" >
@ -161,9 +161,6 @@
<property name="verticalSpacing" >
<number>2</number>
</property>
<item row="2" column="0" >
<widget class="QLineEdit" name="tagvalue_str" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="textLabel4" >
<property name="text" >
@ -190,7 +187,7 @@
</property>
</spacer>
</item>
<item row="3" column="0" >
<item row="5" column="0" >
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
@ -206,6 +203,39 @@
</property>
</spacer>
</item>
<item row="2" column="0" >
<widget class="QFrame" name="TagStrFrame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>2</number>
</property>
<property name="topMargin" >
<number>2</number>
</property>
<property name="rightMargin" >
<number>2</number>
</property>
<property name="bottomMargin" >
<number>2</number>
</property>
<property name="horizontalSpacing" >
<number>2</number>
</property>
<property name="verticalSpacing" >
<number>2</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" />
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="RejectPage" >
@ -379,22 +409,42 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="tagvalue_int" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<widget class="QFrame" name="TagIntFrame" >
<property name="minimumSize" >
<size>
<width>80</width>
<height>0</height>
<width>100</width>
<height>50</height>
</size>
</property>
<property name="maximum" >
<number>65535</number>
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>2</number>
</property>
<property name="topMargin" >
<number>2</number>
</property>
<property name="rightMargin" >
<number>2</number>
</property>
<property name="bottomMargin" >
<number>2</number>
</property>
<property name="horizontalSpacing" >
<number>2</number>
</property>
<property name="verticalSpacing" >
<number>2</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" />
</item>
</layout>
</widget>
</item>
<item>
@ -932,9 +982,6 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="2" >
<widget class="QLineEdit" name="branchChainName" />
</item>
<item row="4" column="0" >
<spacer>
<property name="orientation" >
@ -958,6 +1005,39 @@
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QFrame" name="branchChainNameFrame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>2</number>
</property>
<property name="topMargin" >
<number>2</number>
</property>
<property name="rightMargin" >
<number>2</number>
</property>
<property name="bottomMargin" >
<number>2</number>
</property>
<property name="horizontalSpacing" >
<number>2</number>
</property>
<property name="verticalSpacing" >
<number>2</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" />
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="BranchAnchorPage" >
@ -990,10 +1070,7 @@
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QLineEdit" name="branchAnchorName" />
</item>
<item row="3" column="0" >
<item row="4" column="0" >
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
@ -1025,6 +1102,39 @@
</property>
</spacer>
</item>
<item row="2" column="0" >
<widget class="QFrame" name="BranchAnchorPageFrame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>2</number>
</property>
<property name="topMargin" >
<number>2</number>
</property>
<property name="rightMargin" >
<number>2</number>
</property>
<property name="bottomMargin" >
<number>2</number>
</property>
<property name="horizontalSpacing" >
<number>2</number>
</property>
<property name="verticalSpacing" >
<number>2</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" />
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="RouteIPFPage" >
@ -1438,70 +1548,6 @@
</hint>
</hints>
</connection>
<connection>
<sender>tagvalue_str</sender>
<signal>textChanged(QString)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>changed()</slot>
<hints>
<hint type="sourcelabel" >
<x>45</x>
<y>214</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>tagvalue_int</sender>
<signal>valueChanged(int)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>changed()</slot>
<hints>
<hint type="sourcelabel" >
<x>119</x>
<y>106</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>tagvalue_int</sender>
<signal>valueChanged(int)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>tagvalueChanged(int)</slot>
<hints>
<hint type="sourcelabel" >
<x>119</x>
<y>106</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>tagvalue_int</sender>
<signal>valueChanged(QString)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>changed()</slot>
<hints>
<hint type="sourcelabel" >
<x>119</x>
<y>106</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>rejectvalue</sender>
<signal>activated(QString)</signal>
@ -1806,38 +1852,6 @@
</hint>
</hints>
</connection>
<connection>
<sender>branchChainName</sender>
<signal>textChanged(QString)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>changed()</slot>
<hints>
<hint type="sourcelabel" >
<x>47</x>
<y>221</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>branchAnchorName</sender>
<signal>textChanged(QString)</signal>
<receiver>ActionsDialog_q</receiver>
<slot>changed()</slot>
<hints>
<hint type="sourcelabel" >
<x>46</x>
<y>233</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>accountingvalue_str</sender>
<signal>textChanged(QString)</signal>