#ifndef UIROOTERWIDGET_H #define UIROOTERWIDGET_H #include "ui_UIRooterWidget.h" #include "AbstractRooterWidget.h" #include "ui_UIPortsRedirection.h" #include "ui_UIPlagesRedirection.h" #include "ui_UIPermanentsDHCP.h" class QVBoxLayout; // port redirection widget class UIPortsRedirection : public AbstractRooterWidget, public Ui::UIPortsRedirection { Q_OBJECT public: UIPortsRedirection( QWidget* parent = 0 ) : AbstractRooterWidget( parent ) { setupUi( this ); setRemoveLineVisible( false ); setAddLineVisible( false ); connect( fgAdd, SIGNAL( clicked() ), this, SIGNAL( addLineRequested() ) ); connect( fgRemove, SIGNAL( clicked() ), this, SIGNAL( removeLineRequested() ) ); } QStringList datas() const { QStringList datas; datas << QString::number( sbPortLeft->value() ); datas << QString::number( cbProtocole->currentIndex() +1 ); datas << leDestination4->text(); datas << QString::number( sbPortRight->value() ); return datas; } QString ip( int index ) { switch ( index ) { case 1: return leDestination1->text(); break; case 2: return leDestination2->text(); break; case 3: return leDestination3->text(); break; case 4: return leDestination4->text(); break; } return QString::null; } public slots: void setAddLineVisible( bool visible ) { fgAdd->setVisible( visible ); } void setRemoveLineVisible( bool visible ) { fgRemove->setVisible( visible ); } void setIp( const QString& value, int index ) { switch ( index ) { case 1: leDestination1->setText( value ); break; case 2: leDestination2->setText( value ); break; case 3: leDestination3->setText( value ); break; case 4: leDestination4->setText( value ); break; } } void setDatas( const QStringList& datas ) { sbPortLeft->setValue( datas.value( 0 ).toInt() ); cbProtocole->setCurrentIndex( datas.value( 1 ).toInt() -1 ); leDestination4->setText( datas.value( 2 ) ); sbPortRight->setValue( datas.value( 3 ).toInt() ); } bool isValid() const { return cbProtocole->currentIndex() != -1 && !leDestination4->text().trimmed().isEmpty(); } }; // plage redirection widget class UIPlagesRedirection : public AbstractRooterWidget, public Ui::UIPlagesRedirection { Q_OBJECT public: UIPlagesRedirection( QWidget* parent = 0 ) : AbstractRooterWidget( parent ) { setupUi( this ); setRemoveLineVisible( false ); setAddLineVisible( false ); connect( fgAdd, SIGNAL( clicked() ), this, SIGNAL( addLineRequested() ) ); connect( fgRemove, SIGNAL( clicked() ), this, SIGNAL( removeLineRequested() ) ); } QStringList datas() const { QStringList datas; datas << QString::number( sbPlagesDebut->value() ); datas << QString::number( sbPlagesFin->value() ); datas << QString::number( cbPlagesProtocole->currentIndex() +1 ); datas << lePlagesDestination4->text(); return datas; } QString ip( int index ) { switch ( index ) { case 1: return lePlagesDestination1->text(); break; case 2: return lePlagesDestination2->text(); break; case 3: return lePlagesDestination3->text(); break; case 4: return lePlagesDestination4->text(); break; } return QString::null; } public slots: void setAddLineVisible( bool visible ) { fgAdd->setVisible( visible ); } void setRemoveLineVisible( bool visible ) { fgRemove->setVisible( visible ); } void setIp( const QString& value, int index ) { switch ( index ) { case 1: lePlagesDestination1->setText( value ); break; case 2: lePlagesDestination2->setText( value ); break; case 3: lePlagesDestination3->setText( value ); break; case 4: lePlagesDestination4->setText( value ); break; } } void setDatas( const QStringList& datas ) { sbPlagesDebut->setValue( datas.value( 0 ).toInt() ); sbPlagesFin->setValue( datas.value( 1 ).toInt() ); cbPlagesProtocole->setCurrentIndex( datas.value( 2 ).toInt() -1 ); lePlagesDestination4->setText( datas.value( 3 ) ); } bool isValid() const { return cbPlagesProtocole->currentIndex() != -1 && !lePlagesDestination4->text().trimmed().isEmpty(); } }; // dhcp widget class UIPermanentsDHCP : public AbstractRooterWidget, public Ui::UIPermanentsDHCP { Q_OBJECT public: UIPermanentsDHCP( QWidget* parent = 0 ) : AbstractRooterWidget( parent ) { setupUi( this ); setRemoveLineVisible( false ); setAddLineVisible( false ); connect( fgAdd, SIGNAL( clicked() ), this, SIGNAL( addLineRequested() ) ); connect( fgRemove, SIGNAL( clicked() ), this, SIGNAL( removeLineRequested() ) ); } QStringList datas() const { QStringList datas; datas << leMAC4->text(); datas << leAddressMAC->text(); return datas; } QString ip( int index ) { switch ( index ) { case 1: return leMAC1->text(); break; case 2: return leMAC2->text(); break; case 3: return leMAC3->text(); break; case 4: return leMAC4->text(); break; } return QString::null; } public slots: void setAddLineVisible( bool visible ) { fgAdd->setVisible( visible ); } void setRemoveLineVisible( bool visible ) { fgRemove->setVisible( visible ); } void setIp( const QString& value, int index ) { switch ( index ) { case 1: leMAC1->setText( value ); break; case 2: leMAC2->setText( value ); break; case 3: leMAC3->setText( value ); break; case 4: leMAC4->setText( value ); break; } } void setDatas( const QStringList& datas ) { leMAC4->setText( datas.value( 0 ) ); leAddressMAC->setText( datas.value( 1 ) ); } bool isValid() const { return !leMAC4->text().trimmed().isEmpty() && !leAddressMAC->text().replace( ":", "" ).trimmed().isEmpty(); } }; // main line container class class UIRooterWidget : public QWidget, public Ui::UIRooterWidget { Q_OBJECT public: enum Type { Undefined = -1, Ports, Plages, Macs }; UIRooterWidget( QWidget* parent = 0 ); void setType( Type type ); QStringList datas() const; protected: QVBoxLayout* mVLayout; Type mType; public slots: void setIp3( const QString& value ); void setDatas( const QStringList& datas ); protected slots: QString ip3(); void updateButtonsVisibility(); void addLine(); void removeLine(); }; #endif // UIROOTERWIDGET_H