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/kmftemplatechooser.cpp

155 lines
4.5 KiB

//
// C++ Implementation:
//
// Description:
//
//
// Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2004
//
// Copyright: See COPYING file that comes with this distribution
//
// License: GPL
//
// TQt includes
#include <tqlistbox.h>
#include <tqfile.h>
#include <tqdom.h>
#include <tqlabel.h>
#include <tqdir.h>
#include <tqpushbutton.h>
// KDE includes
#include <kstandarddirs.h>
#include <tdeglobal.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <tdeapplication.h>
// project includes
#include "../core/kmfconfig.h"
#include "xmlnames.h"
#include "kmftemplatechooser.h"
namespace KMF {
KMFTemplateChooser::KMFTemplateChooser(TQWidget* parent, const char* name, bool modal, WFlags fl) : KMyFirewallTemplateChooser(parent,name, modal,fl) {
connect( lb_templates, TQT_SIGNAL( highlighted ( int ) ),
this, TQT_SLOT( slotNewTemplateSelected( int ) ) );
connect( lb_templates, TQT_SIGNAL( doubleClicked( TQListBoxItem* ) ),
this, TQT_SLOT( slotNewTemplateSelected( TQListBoxItem* ) ) );
connect( b_help, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( slotHelp() ) );
parseTemplates();
b_accept->setEnabled( false );
}
KMFTemplateChooser::~KMFTemplateChooser() {}
/*$SPECIALIZATION$*/
void KMFTemplateChooser::reject() {
TQDialog::reject();
}
void KMFTemplateChooser::accept() {
if ( lb_templates->currentItem() == -1 ) {
KMessageBox::error( this, i18n("No Template selected.") );
return;
}
if ( *m_templateFilePaths.at( lb_templates->currentItem() ) == "-1" ) {
// emit sigLoadEmptyDocument();
} else {
emit sigLoadTemplate( *m_templateFilePaths.at( lb_templates->currentItem() ) );
}
TQDialog::accept();
}
void KMFTemplateChooser::slotHelp() {
// kdDebug() << "void KMFTemplateChooser::slotHelp()" << endl;
kapp->invokeHelp();
}
void KMFTemplateChooser::slotNewTemplateSelected( TQListBoxItem* i ){
// kdDebug() << "void KMFTemplateChooser::slotNewTemplateSelected( " << index << " )" << endl;
slotNewTemplateSelected( lb_templates->index( i ) );
accept();
}
void KMFTemplateChooser::slotNewTemplateSelected( int index ){
// kdDebug() << "void KMFTemplateChooser::slotNewTemplateSelected( " << index << " )" << endl;
b_accept->setEnabled( true );
lbl_description->setText( *m_templateDescriptions.at( index ) );
}
void KMFTemplateChooser::parseTemplates(){
lb_templates->clear();
lbl_description->clear();
// Add Empty template
lb_templates->insertItem( i18n("Empty Ruleset") );
m_templateFilePaths.append( "-1" );
if ( KMFConfig::useGenericInterface() ) {
m_templateDescriptions.append( i18n("Clean Ruleset that does only setup connection tracking e.g block everything not related to connections you initialised.") );
} else {
m_templateDescriptions.append( i18n("Clean Ruleset that does not do anything. Use this if you like to setup your firewall from scratch.") );
}
TDEStandardDirs std_dir;
TQString tmp_dir = std_dir.findResourceDir( "data", "kmyfirewall/templates/" );
TQDir dir( tmp_dir + "/kmyfirewall/templates/" );
kdDebug() << "Found Data dir at: " << dir.path() << endl;
TQString type;
if ( KMFConfig::useGenericInterface() ) {
type = "*.tkmfgrs";
} else {
type = "*.tkmfrs";
}
TQStringList templates = dir.entryList( type );
if ( templates.isEmpty() ) {
KMessageBox::information( this, i18n("No templates (%1) could be found; please check your installation.").arg( type ) );
return;
}
for ( TQStringList::Iterator it = templates.begin(); it != templates.end(); ++it ) {
parseFile( dir.path() + "/" + *it );
}
}
void KMFTemplateChooser::parseFile( const TQString& file ) {
// kdDebug() << "Parsing Template: " << file << endl;
TQFile f( file );
if ( !f.open( IO_ReadOnly ) ) {
KMessageBox::information( this, i18n("Template %1 could not be opened.").arg( file ) );
return;
}
TQDomDocument doc;
if ( !doc.setContent( &f ) ) {
f.close();
KMessageBox::information( this, i18n("Template %1 is not a valid XML document.").arg( file ) );
return;
}
TQDomElement root = doc.documentElement();
TQDomNodeList list = root.elementsByTagName ( XML::Abstract_Element );
if ( list.count() == 0 ) {
KMessageBox::information( this, i18n("Template %1 does not contain the \"abstract\" tag.").arg( file ) );
return;
}
TQDomNode node = list.item( 0 );
TQString desc = node.toElement().attribute( XML::Description_Attribute );
TQString name = node.toElement().attribute( XML::Name_Attribute );
lb_templates->insertItem( name );
m_templateFilePaths.append( file );
m_templateDescriptions.append( desc );
}
}
#include "kmftemplatechooser.moc"