// // C++ Implementation: // // Description: // // // Author: Christian Hubinger , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "kmfprotocollistview.h" // TQt includes #include #include #include #include #include #include #include #include #include #include // KDE includes #include #include #include #include #include #include #include #include // Project includes #include "../core/kmfprotocolcategory.h" #include "../core/kmfprotocol.h" #include "../core/kmfprotocollibrary.h" #include "../core/kmfprotocolusage.h" #include "../core/kmfnetzone.h" #include "../core/kmfnethost.h" #include "../kmfwidgets/kmflistviewitem.h" #include "../kmfwidgets/kmfchecklistitem.h" namespace KMF { KMFProtocolListView::KMFProtocolListView ( TQWidget* parent, const char* name, WFlags fl ) : KMyFirewallProtocolListView ( parent,name,fl ) { m_reloading = false; loadProtocols(); connect( m_lv_protocols, TQ_SIGNAL( pressed( TQListViewItem* ) ), this, TQ_SLOT( slotNewProtocolSelected( TQListViewItem* ) ) ); } KMFProtocolListView::~KMFProtocolListView() {} /*$SPECIALIZATION$*/ void KMFProtocolListView::setHost( KMFNetHost* host ) { setEnabled( true ); TQValueList& allProts = KMFProtocolLibrary::instance()->allProtocols(); TQValueList::iterator it; for( it = allProts.begin(); it != allProts.end(); ++it ) { /* TQPtrListIterator it( *KMFProtocol::protocolLibrary() ); while ( it.current() ) {*/ KMFProtocol * prot = *it; TQListViewItem *qitem = m_lv_protocols->findItem( prot->name(), 0 ); if ( ! qitem ) { kdDebug() << "No item found for protocol: " << prot->name() << endl; } KMFCheckListItem *item = dynamic_cast( qitem ); if ( ! item ) { kdDebug() << "Item is no KMFCheckListItem" << endl; } if ( host->findProtocolUsageByProtocolUuid( prot->uuid() ) ) { item->setOn( true ); item->setEnabled( true ); } if ( host->protocolInherited( prot->uuid() ) ) { item->setOn( true ); item->setEnabled( false ); } if ( ! host->findProtocolUsageByProtocolUuid( prot->uuid() ) && ! host->protocolInherited( prot->uuid() ) ) { item->setOn( false ); item->setEnabled( true ); } } } void KMFProtocolListView::setZone( KMFNetZone* zone ) { setEnabled( true ); TQValueList& allProts = KMFProtocolLibrary::instance()->allProtocols(); TQValueList::iterator it; for( it = allProts.begin(); it != allProts.end(); ++it ) { KMFProtocol * prot = *it; TQListViewItem *qitem = m_lv_protocols->findItem( prot->name(), 0 ); if ( ! qitem ) { kdDebug() << "No item found for protocol: " << prot->name() << endl; } KMFCheckListItem *item = dynamic_cast( qitem ); if ( ! item ) { kdDebug() << "Item is no KMFCheckListItem" << endl; } if ( zone->findProtocolUsageByProtocolUuid( prot->uuid() ) ) { item->setOn( true ); item->setEnabled( true ); } if ( zone->protocolInherited( prot->uuid() ) ) { item->setOn( true ); item->setEnabled( false ); } if ( ! zone->findProtocolUsageByProtocolUuid( prot->uuid() ) && ! zone->protocolInherited( prot->uuid() ) ) { item->setOn( false ); item->setEnabled( true ); } } } void KMFProtocolListView::loadProtocols() { kdDebug() << "KMFProtocolListView::loadProtocols(" << endl; m_reloading = true; TQListViewItemIterator listViewIt( m_lv_protocols ); while ( listViewIt.current() ) { TQListViewItem * qitem = listViewIt.current(); ++listViewIt; KMFCheckListItem * item = 0; item = dynamic_cast ( qitem ); if( item && item->protocolUsage() ) { item->protocolUsage()->deleteLater(); } } m_lv_protocols->clear(); setEnabled( false ); TQValueList& allProts = KMFProtocolLibrary::instance()->allProtocols(); TQValueList::iterator it; for( it = allProts.begin(); it != allProts.end(); ++it ) { KMFProtocol * prot = *it; /* disconnect( prot, TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( slotOnProtocolDeleted( TQObject* ) ) ); connect( prot, TQ_SIGNAL( destroyed( TQObject* ) ), this, TQ_SLOT( slotOnProtocolDeleted( TQObject* ) ) );*/ KMFProtocolUsage *protUsage = prot->createUsage(); protUsage->setProtocol( prot ); TQString cat = prot->category()->name(); TQListViewItem *parentItem = m_lv_protocols->findItem( cat, 0 ); if ( ! parentItem ) { KMFListViewItem *newParentItem = new KMFListViewItem( m_lv_protocols, 0, prot->category() ); newParentItem->setText( 0, cat ); newParentItem->loadNetfilterObject( prot->category() ); newParentItem->setOpen( true ); parentItem = newParentItem; } KMFCheckListItem *item = new KMFCheckListItem( parentItem, 0 , prot->name() , TQCheckListItem::CheckBox, protUsage ); item->setText( 0, prot->name() ); // item->setText( 1, prot->uuid().toString() ); } m_reloading = false; } void KMFProtocolListView::slotOnProtocolDeleted( TQObject* ) { if ( m_reloading ) { return; } // loadProtocols(); } void KMFProtocolListView::slotNewProtocolSelected( TQListViewItem* qitem ) { if ( KMFCheckListItem * item = dynamic_cast ( qitem ) ) { emit sigProtocolClicked( item->protocolUsage(), item->isOn() ); } else if ( KMFListViewItem * item = dynamic_cast ( qitem ) ){ emit sigProtocolCategoryClicked( item->protocolCategory() ); } } } #include "kmfprotocollistview.moc"