You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmyfirewall/kmyfirewall/kmfwidgets/kmfnetworkwidget.cpp

181 lines
5.2 KiB

//
// C++ Implementation: kmfnetworkwidget
//
// Description:
//
//
// Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2004
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include "kmfnetworkwidget.h"
// TQt includes
#include <tqlabel.h>
#include <tqtextedit.h>
#include <tqevent.h>
// KDE includes
#include <kdebug.h>
#include <knuminput.h>
#include <tdelocale.h>
// project includes
#include "../core/kmfundoengine.h"
namespace KMF {
KMFNetworkWidget::KMFNetworkWidget(TQWidget *parent, const char *name)
: KMyFirewallNetworkWidget(parent, name) {
m_allowEdit = true;
connect( m_sb_from_1,TQ_SIGNAL( valueChanged( const TQString& ) ),
this,TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_from_2,TQ_SIGNAL( valueChanged( const TQString& ) ),
this,TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_from_3,TQ_SIGNAL( valueChanged( const TQString& ) ),
this,TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_from_4,TQ_SIGNAL( valueChanged( const TQString& ) ),
this,TQ_SLOT( slotAddressChanged( const TQString& ) ) );
connect( m_sb_mask,TQ_SIGNAL( valueChanged( int ) ),
this,TQ_SLOT( slotShortMaskChanged( int ) ) );
connect( m_txt_desc,TQ_SIGNAL( textChanged() ),
this,TQ_SLOT( slotDescriptionChanged() ) );
}
KMFNetworkWidget::~KMFNetworkWidget() {}
void KMFNetworkWidget::slotZoneDeleted() {
setEnabled( false );
}
void KMFNetworkWidget::loadZone( KMFNetZone* zone ) {
setEnabled( true );
blockAllSignals( true );
m_zone = zone;
connect( m_zone, TQ_SIGNAL( destroyed() ), this, TQ_SLOT ( slotZoneDeleted() ) );
m_sb_from_1->setEnabled( true );
m_sb_from_2->setEnabled( true );
m_sb_from_3->setEnabled( true );
m_sb_from_4->setEnabled( true );
m_sb_mask->setEnabled( true );
m_sb_from_1->setValue( zone->address()->getDigit( 0 ) );
m_sb_from_2->setValue( zone->address()->getDigit( 1 ) );
m_sb_from_3->setValue( zone->address()->getDigit( 2 ) );
m_sb_from_4->setValue( zone->address()->getDigit( 3 ) );
lbl_mask->setText( zone->mask()->toString() );
if ( zone->description() != m_txt_desc->text().simplifyWhiteSpace() ) {
m_txt_desc->setText( zone->description() );
}
m_sb_mask->setValue( IPAddress::calcLenthToMask( *zone->mask() ) );
blockAllSignals( false );
}
void KMFNetworkWidget::slotAddressChanged( const TQString& ) {
kdDebug() << "void KMFNetworkWidget::slotAddressChanged( const TQString& )" << endl;
if ( ! m_zone ) {
return;
}
blockAllSignals( true );
if ( m_allowEdit ) {
const TQString& newAddr = m_sb_from_1->text() +"."+
m_sb_from_2->text() +"."+
m_sb_from_3->text() +"."+
m_sb_from_4->text();
if ( newAddr == m_zone->address()->toString() ) {
return;
}
KMFUndoEngine::instance()->startTransaction(
m_zone->rootZone(),
i18n( "Change address of Zone: %1" ).arg( m_zone->guiName() )
);
m_zone->address()->setAddress( m_sb_from_1->value(), m_sb_from_2->value(), m_sb_from_3->value(), m_sb_from_4->value() );
m_zone->rootZone()->refreshNetworkTree();
KMFUndoEngine::instance()->endTransaction();
emit sigZoneChanged( m_zone );
}
blockAllSignals( false );
}
void KMFNetworkWidget::slotShortMaskChanged( int len ) {
kdDebug() << "void KMFNetworkWidget::slotShortMaskChanged( const TQString& )" << endl;
IPAddress addr = IPAddress::calcNetworkMaskFromLength( len );
blockAllSignals( true );
lbl_mask->setText( addr.toString() );
if ( m_allowEdit && m_zone->maskLength() != len ) {
KMFUndoEngine::instance()->startTransaction(
m_zone->rootZone(),
i18n( "Change mask length of Zone: %1" ).arg( m_zone->guiName() )
);
m_zone->setMaskLength( len );
m_zone->rootZone()->refreshNetworkTree();
KMFUndoEngine::instance()->endTransaction();
emit sigZoneChanged( m_zone );
}
blockAllSignals( false );
}
void KMFNetworkWidget::slotDescriptionChanged() {
kdDebug() << "void KMFNetworkWidget::slotDescriptionChanged( const TQString& )" << endl;
if ( ! m_zone ) {
return;
}
TQString newTxt = m_txt_desc->text().simplifyWhiteSpace();
if ( m_allowEdit && newTxt != m_zone->description() ) {
blockAllSignals( true );
KMFUndoEngine::instance()->startTransaction(
m_zone,
i18n( "Change documentation of Zone: %1" ).arg( m_zone->guiName() )
);
m_zone->setDescription( newTxt );
KMFUndoEngine::instance()->endTransaction();
emit sigZoneChanged( m_zone );
blockAllSignals( false );
}
}
void KMFNetworkWidget::focusOutEvent( TQFocusEvent * e ) {
kdDebug() << "void KMFNetworkWidget::focusOutEvent( TQFocusEvent * e )" << endl;
if ( e->lostFocus() && m_txt_desc->text().simplifyWhiteSpace() != m_zone->description() ) {
slotDescriptionChanged();
}
}
void KMFNetworkWidget::blockAllSignals( bool onOff ) {
m_sb_from_1->blockSignals( onOff );
m_sb_from_2->blockSignals( onOff );
m_sb_from_3->blockSignals( onOff );
m_sb_from_4->blockSignals( onOff );
m_txt_desc->blockSignals( onOff );
m_sb_mask->blockSignals( onOff );
}
void KMFNetworkWidget::allowEdit( bool allow ) {
m_allowEdit = allow;
m_sb_from_1->setEnabled( allow );
m_sb_from_2->setEnabled( allow );
m_sb_from_3->setEnabled( allow );
m_sb_from_4->setEnabled( allow );
m_txt_desc->setEnabled( allow );
m_sb_mask->setEnabled( allow );
}
}
#include "kmfnetworkwidget.moc"