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
+121 -9
View File
@@ -33,6 +33,7 @@
#include "ActionsDialog.h" #include "ActionsDialog.h"
#include "FWWindow.h" #include "FWWindow.h"
#include "FWObjectDropArea.h"
#include "fwbuilder/Library.h" #include "fwbuilder/Library.h"
#include "fwbuilder/Interface.h" #include "fwbuilder/Interface.h"
@@ -60,10 +61,57 @@
using namespace std; using namespace std;
using namespace libfwbuilder; 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) void ActionsDialog::loadFWObject(FWObject *o)
{ {
setRule(PolicyRule::cast(o)); setRule(PolicyRule::cast(o));
} }
void ActionsDialog::changed() void ActionsDialog::changed()
@@ -133,11 +181,45 @@ void ActionsDialog::applyChanges()
FWOptions *ropt = rule->getOptionsObject(); 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()) if (m_dialog->useDummyNetPipe->isChecked())
ropt->setInt("ipfw_classify_method",DUMMYNETPIPE); ropt->setInt("ipfw_classify_method",DUMMYNETPIPE);
else else
@@ -155,8 +237,8 @@ void ActionsDialog::discardChanges()
void ActionsDialog::tagvalueChanged(int) void ActionsDialog::tagvalueChanged(int)
{ {
QString buf; QString buf;
buf.setNum(m_dialog->tagvalue_int->value()); //!!! buf.setNum(m_dialog->tagvalue_int->value());
m_dialog->tagvalue_str->setText(buf); //!!! m_dialog->tagvalue_str->setText(buf);
} }
void ActionsDialog::iptRouteContinueToggled() void ActionsDialog::iptRouteContinueToggled()
@@ -284,12 +366,28 @@ void ActionsDialog::setRule(PolicyRule *r )
else if (editor=="TagInt") else if (editor=="TagInt")
{ {
w=m_dialog->TagIntPage; 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") else if (editor=="TagStr")
{ {
w=m_dialog->TagStrPage; 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") else if (editor=="AccountingStr")
{ {
@@ -314,13 +412,27 @@ void ActionsDialog::setRule(PolicyRule *r )
else if (editor=="BranchChain") else if (editor=="BranchChain")
{ {
w=m_dialog->BranchChainPage; 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" ); data.registerOption ( m_dialog->ipt_branch_in_mangle, ropt , "ipt_branch_in_mangle" );
} }
else if (editor=="BranchAnchor") else if (editor=="BranchAnchor")
{ {
w=m_dialog->BranchAnchorPage; 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") else if (editor=="RouteIPT")
{ {
+8 -7
View File
@@ -44,7 +44,7 @@ namespace libfwbuilder
class QLineEdit; class QLineEdit;
class QComboBox; class QComboBox;
class FWObjectDropArea;
class ActionsDialog : public QWidget class ActionsDialog : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -56,16 +56,17 @@ class ActionsDialog : public QWidget
QLineEdit *branchNameInput; QLineEdit *branchNameInput;
DialogData data; DialogData data;
FWObjectDropArea * BranchChainArea ;
FWObjectDropArea * BranchAnchorArea;
FWObjectDropArea * TagIntArea ;
FWObjectDropArea * TagStrArea ;
public: public:
Ui::ActionsDialog_q *m_dialog; Ui::ActionsDialog_q *m_dialog;
ActionsDialog(QWidget *parent) : QWidget(parent) ActionsDialog(QWidget *parent);
{
m_dialog = new Ui::ActionsDialog_q;
m_dialog->setupUi(this);
};
~ActionsDialog() { delete m_dialog; }; ~ActionsDialog();
virtual void closeEvent(QCloseEvent *e); virtual void closeEvent(QCloseEvent *e);
void fillInterfaces(QComboBox *); void fillInterfaces(QComboBox *);
+21
View File
@@ -116,6 +116,27 @@ bool FWObjectDrag::decode( QDropEvent *ev, list<FWObject*> &ol)
return true; 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) Qt::DropAction FWObjectDrag::start(Qt::DropActions action)
{ {
if (fwbdebug) qDebug("FWObjectDrag::start"/*, action*/); if (fwbdebug) qDebug("FWObjectDrag::start"/*, action*/);
+2
View File
@@ -62,6 +62,8 @@ public:
QByteArray encodedData() const; QByteArray encodedData() const;
static bool decode( QDropEvent *ev, std::list<libfwbuilder::FWObject*> &ol); static bool decode( QDropEvent *ev, std::list<libfwbuilder::FWObject*> &ol);
static bool decode( QDragEnterEvent *ev, std::list<libfwbuilder::FWObject*> &ol);
}; };
#endif #endif
+24
View File
@@ -185,6 +185,30 @@ void FWObjectDropArea::dropEvent( QDropEvent *ev)
void FWObjectDropArea::dragEnterEvent( QDragEnterEvent *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) ); ev->setAccepted( ev->mimeData()->hasFormat(FWObjectDrag::FWB_MIME_TYPE) );
} }
+3 -1
View File
@@ -50,6 +50,7 @@ class FWObjectDropArea : public QWidget//Ui::FWObjectDropArea_q
Q_OBJECT Q_OBJECT
private: private:
libfwbuilder::FWObject *object; libfwbuilder::FWObject *object;
QVector <QString> acceptedTypes ;
protected: protected:
void paintEvent(QPaintEvent *ev); void paintEvent(QPaintEvent *ev);
void contextMenuEvent (QContextMenuEvent * e); 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(QWidget*p, const char * n = 0, Qt::WFlags f = 0);
~FWObjectDropArea(); ~FWObjectDropArea();
libfwbuilder::FWObject * getObject(){return object;}; 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;}; bool isEmpty() {return object==NULL;};
public slots: public slots:
+133 -119
View File
@@ -139,7 +139,7 @@
<enum>QFrame::Plain</enum> <enum>QFrame::Plain</enum>
</property> </property>
<property name="currentIndex" > <property name="currentIndex" >
<number>0</number> <number>3</number>
</property> </property>
<widget class="QWidget" name="TagStrPage" > <widget class="QWidget" name="TagStrPage" >
<layout class="QGridLayout" > <layout class="QGridLayout" >
@@ -161,9 +161,6 @@
<property name="verticalSpacing" > <property name="verticalSpacing" >
<number>2</number> <number>2</number>
</property> </property>
<item row="2" column="0" >
<widget class="QLineEdit" name="tagvalue_str" />
</item>
<item row="1" column="0" > <item row="1" column="0" >
<widget class="QLabel" name="textLabel4" > <widget class="QLabel" name="textLabel4" >
<property name="text" > <property name="text" >
@@ -190,7 +187,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="3" column="0" > <item row="5" column="0" >
<spacer> <spacer>
<property name="orientation" > <property name="orientation" >
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@@ -206,6 +203,39 @@
</property> </property>
</spacer> </spacer>
</item> </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> </layout>
</widget> </widget>
<widget class="QWidget" name="RejectPage" > <widget class="QWidget" name="RejectPage" >
@@ -379,22 +409,42 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="tagvalue_int" > <widget class="QFrame" name="TagIntFrame" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize" > <property name="minimumSize" >
<size> <size>
<width>80</width> <width>100</width>
<height>0</height> <height>50</height>
</size> </size>
</property> </property>
<property name="maximum" > <property name="frameShape" >
<number>65535</number> <enum>QFrame::StyledPanel</enum>
</property> </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> </widget>
</item> </item>
<item> <item>
@@ -932,9 +982,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="2" >
<widget class="QLineEdit" name="branchChainName" />
</item>
<item row="4" column="0" > <item row="4" column="0" >
<spacer> <spacer>
<property name="orientation" > <property name="orientation" >
@@ -958,6 +1005,39 @@
</property> </property>
</widget> </widget>
</item> </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> </layout>
</widget> </widget>
<widget class="QWidget" name="BranchAnchorPage" > <widget class="QWidget" name="BranchAnchorPage" >
@@ -990,10 +1070,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" > <item row="4" column="0" >
<widget class="QLineEdit" name="branchAnchorName" />
</item>
<item row="3" column="0" >
<spacer> <spacer>
<property name="orientation" > <property name="orientation" >
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@@ -1025,6 +1102,39 @@
</property> </property>
</spacer> </spacer>
</item> </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> </layout>
</widget> </widget>
<widget class="QWidget" name="RouteIPFPage" > <widget class="QWidget" name="RouteIPFPage" >
@@ -1438,70 +1548,6 @@
</hint> </hint>
</hints> </hints>
</connection> </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> <connection>
<sender>rejectvalue</sender> <sender>rejectvalue</sender>
<signal>activated(QString)</signal> <signal>activated(QString)</signal>
@@ -1806,38 +1852,6 @@
</hint> </hint>
</hints> </hints>
</connection> </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> <connection>
<sender>accountingvalue_str</sender> <sender>accountingvalue_str</sender>
<signal>textChanged(QString)</signal> <signal>textChanged(QString)</signal>