1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-06-09 15:39:27 +02:00
This commit is contained in:
Roman Bovsunivskiy
2009-11-17 16:45:18 +00:00
parent 9457011582
commit 2fb1710da4
5 changed files with 63 additions and 33 deletions

View File

@@ -2,7 +2,7 @@
#include "ui_InterfaceEditorWidget.h"
#include "fwbuilder/IPv4.h"
InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, libfwbuilder::Interface *interface) :
InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, Interface *interface) :
QWidget(parent),
m_ui(new Ui::InterfaceEditorWidget)
{
@@ -18,10 +18,10 @@ InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, libfwbuilder::Inte
this->m_ui->type->setCurrentIndex(1);
if ( this->interface->isUnnumbered() )
this->m_ui->type->setCurrentIndex(2);
libfwbuilder::FWObjectTypedChildIterator adriter = interface->findByType(libfwbuilder::IPv4::TYPENAME);
FWObjectTypedChildIterator adriter = interface->findByType(IPv4::TYPENAME);
for ( ; adriter != adriter.end(); ++adriter )
{
libfwbuilder::Address *addr = libfwbuilder::Address::cast(*adriter);
Address *addr = Address::cast(*adriter);
int row = addNewAddress();
fwaddrs[row] = addr;
rows[row].first->setText(addr->getAddressPtr()->toString().c_str());
@@ -29,7 +29,7 @@ InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, libfwbuilder::Inte
}
}
InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, libfwbuilder::InterfaceData* data)
InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, InterfaceData* data)
{
tabw = dynamic_cast<QTabWidget*>(parent);
this->interface = NULL;
@@ -46,7 +46,7 @@ InterfaceEditorWidget::InterfaceEditorWidget(QWidget *parent, libfwbuilder::Inte
this->m_ui->type->setCurrentIndex(0);
if ( !data->isDyn && !data->isUnnumbered )
{
foreach( libfwbuilder::InetAddrMask* addr, data->addr_mask )
foreach( InetAddrMask* addr, data->addr_mask )
{
int row = addNewAddress();
rows[row].first->setText(addr->getAddressPtr()->toString().c_str());
@@ -131,7 +131,7 @@ void InterfaceEditorWidget::nameEdited(QString newname)
}
libfwbuilder::Interface* InterfaceEditorWidget::getInterface()
Interface* InterfaceEditorWidget::getInterface()
{
return this->interface;
}
@@ -216,9 +216,9 @@ bool InterfaceEditorWidget::validateAddress(const QString &addr,
}
try
{
libfwbuilder::InetAddr(addr.toLatin1().constData());
InetAddr(addr.toLatin1().constData());
}
catch (libfwbuilder::FWException &ex)
catch (FWException &ex)
{
QMessageBox::warning(
this,"Firewall Builder",
@@ -243,11 +243,11 @@ bool InterfaceEditorWidget::validateAddress(const QString &addr,
}
else
{
libfwbuilder::InetAddr(netm.toLatin1().constData());
InetAddr(netm.toLatin1().constData());
}
}
catch (libfwbuilder::FWException &ex)
catch (FWException &ex)
{
QMessageBox::warning(
this,"Firewall Builder",
@@ -268,3 +268,14 @@ void InterfaceEditorWidget::resizeEvent ( QResizeEvent * )
this->m_ui->addresses->setColumnWidth(2, controls);
this->m_ui->addresses->setColumnWidth(3, controls);
}
void InterfaceEditorWidget::addressChanged(int row, int col)
{
if ( rows.isEmpty() || row > this->m_ui->addresses->rowCount() || col > 1 ) return;
QString address = this->rows[row].first->text();
QString netmask = this->rows[row].second->text();
if ( address.isEmpty() || netmask.isEmpty() ) return;
bool regular = this->types[row]->currentIndex() == 0;
validateAddress(address, netmask, regular);
}

View File

@@ -20,6 +20,8 @@
#include "fwbuilder/Interface.h"
using namespace libfwbuilder;
namespace Ui {
class InterfaceEditorWidget;
}
@@ -36,11 +38,11 @@ struct AddressInfo
class InterfaceEditorWidget : public QWidget {
Q_OBJECT
public:
InterfaceEditorWidget(QWidget *parent, libfwbuilder::Interface *interface);
InterfaceEditorWidget(QWidget *parent, libfwbuilder::InterfaceData* data);
InterfaceEditorWidget(QWidget *parent, Interface *interface);
InterfaceEditorWidget(QWidget *parent, InterfaceData* data);
InterfaceEditorWidget(QWidget *parent);
~InterfaceEditorWidget();
libfwbuilder::Interface* getInterface();
Interface* getInterface();
EditedInterfaceData getInterfaceData();
bool isValid();
@@ -50,12 +52,12 @@ protected:
private:
QTabWidget *tabw;
QToolButton *addAddr, *delAddr;
libfwbuilder::Interface *interface;
Interface *interface;
Ui::InterfaceEditorWidget *m_ui;
QMap<QPushButton*, QPair<QTableWidgetItem*, QTableWidgetItem*> > buttons;
QMap<int, QPair<QTableWidgetItem*, QTableWidgetItem*> > rows;
QMap<int, QComboBox*> types;
QMap<int, libfwbuilder::Address*> fwaddrs;
QMap<int, Address*> fwaddrs;
bool validateAddress(const QString &addr, const QString &netm, bool regular);
public slots:
@@ -63,6 +65,7 @@ public slots:
void deleteAddress();
void nameEdited(QString);
void typeChanged(int);
void addressChanged(int, int);
protected:
virtual void resizeEvent ( QResizeEvent * );

View File

@@ -111,9 +111,6 @@
</item>
<item>
<widget class="QTableWidget" name="addresses">
<attribute name="horizontalHeaderDefaultSectionSize">
<number>120</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>120</number>
</attribute>
@@ -198,11 +195,28 @@
</hint>
</hints>
</connection>
<connection>
<sender>addresses</sender>
<signal>cellChanged(int,int)</signal>
<receiver>InterfaceEditorWidget</receiver>
<slot>addressChanged(int,int)</slot>
<hints>
<hint type="sourcelabel">
<x>41</x>
<y>318</y>
</hint>
<hint type="destinationlabel">
<x>3</x>
<y>314</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>nameEdited(QString)</slot>
<slot>closeTab(int)</slot>
<slot>addNewAddress()</slot>
<slot>typeChanged(int)</slot>
<slot>addressChanged(int,int)</slot>
</slots>
</ui>

View File

@@ -40,9 +40,9 @@ void InterfacesTabWidget::changeEvent(QEvent *e)
}
}
QMap<libfwbuilder::Interface*, EditedInterfaceData> InterfacesTabWidget::getData()
QMap<Interface*, EditedInterfaceData> InterfacesTabWidget::getData()
{
QMap<libfwbuilder::Interface*, EditedInterfaceData> res;
QMap<Interface*, EditedInterfaceData> res;
for ( int i = 0; i < this->count(); i++ )
{
if ( dynamic_cast<InterfaceEditorWidget*>(this->widget(i))->getInterface() == NULL)
@@ -65,12 +65,12 @@ QList<EditedInterfaceData> InterfacesTabWidget::getNewData()
return res;
}
QList<libfwbuilder::Interface*> InterfacesTabWidget::getDeletedInterfaces()
QList<Interface*> InterfacesTabWidget::getDeletedInterfaces()
{
return deleted;
}
void InterfacesTabWidget::addInterface(libfwbuilder::Interface *interface)
void InterfacesTabWidget::addInterface(Interface *interface)
{
this->addTab(new InterfaceEditorWidget(this, interface), interface->getName().c_str());
}
@@ -81,7 +81,7 @@ void InterfacesTabWidget::addNewInterface()
setCurrentIndex(count() - 1);
}
void InterfacesTabWidget::setTemplate(libfwbuilder::FWObject* obj)
void InterfacesTabWidget::setTemplate(FWObject* obj)
{
currentTemplate = obj;
}
@@ -97,7 +97,7 @@ void InterfacesTabWidget::closeTab()
if ( this->count() == 1 ) return;
int idx = this->currentIndex();
QWidget *w = this->widget(idx);
libfwbuilder::Interface *interface = dynamic_cast<InterfaceEditorWidget*>(w)->getInterface() ;
Interface *interface = dynamic_cast<InterfaceEditorWidget*>(w)->getInterface() ;
if ( interface != NULL ) deleted.append( interface );
this->removeTab(idx);
delete w;
@@ -120,7 +120,7 @@ void InterfacesTabWidget::setCornerWidgetsVisible(bool st)
this->cornerWidget(Qt::TopLeftCorner)->setVisible(st);
}
void InterfacesTabWidget::addInterface(libfwbuilder::InterfaceData* idata)
void InterfacesTabWidget::addInterface(InterfaceData* idata)
{
addTab(new InterfaceEditorWidget(this, idata), idata->name.c_str());
}

View File

@@ -15,6 +15,8 @@
#include "fwbuilder/FWObjectDatabase.h"
#include "InterfaceEditorWidget.h"
using namespace libfwbuilder;
namespace Ui {
class InterfacesTabWidget;
}
@@ -29,7 +31,7 @@ struct EditedInterfaceData
QString comment;
QString mac;
int type; // 0 - regular, 1 - dynamic, 2 - unnumbered
QMultiMap<libfwbuilder::Address*, AddressInfo > addresses;
QMultiMap<Address*, AddressInfo > addresses;
};
class InterfacesTabWidget : public QTabWidget {
@@ -37,9 +39,9 @@ class InterfacesTabWidget : public QTabWidget {
public:
InterfacesTabWidget(QWidget *parent = 0);
~InterfacesTabWidget();
QMap<libfwbuilder::Interface*, EditedInterfaceData> getData();
QMap<Interface*, EditedInterfaceData> getData();
QList<EditedInterfaceData> getNewData();
QList<libfwbuilder::Interface*> getDeletedInterfaces();
QList<Interface*> getDeletedInterfaces();
bool isValid();
void setCornerWidgetsVisible(bool);
@@ -52,16 +54,16 @@ private:
QToolButton *delInterface;
QWidget newInterfaceWidget;
QHBoxLayout newInterfaceLayout;
libfwbuilder::FWObject *currentTemplate;
QList<libfwbuilder::Interface*> deleted;
FWObject *currentTemplate;
QList<Interface*> deleted;
public slots:
void addInterface(libfwbuilder::Interface*);
void addInterface(Interface*);
void clear();
void addNewInterface();
void setTemplate(libfwbuilder::FWObject*);
void setTemplate(FWObject*);
void closeTab();
void addInterface(libfwbuilder::InterfaceData*);
void addInterface(InterfaceData*);
};