diff options
Diffstat (limited to 'src/app/Konfigurator/kgprotocols.cpp')
-rw-r--r-- | src/app/Konfigurator/kgprotocols.cpp | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/src/app/Konfigurator/kgprotocols.cpp b/src/app/Konfigurator/kgprotocols.cpp new file mode 100644 index 0000000..1dcc81f --- /dev/null +++ b/src/app/Konfigurator/kgprotocols.cpp @@ -0,0 +1,419 @@ +/*************************************************************************** + KgProtocols.cpp - description + ------------------- + copyright : (C) 2004 by Csaba Karai + e-mail : krusader@users.sourceforge.net + web site : http://krusader.sourceforge.net + --------------------------------------------------------------------------- + Description + *************************************************************************** + + A + + db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. + 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D + 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' + 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b + 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. + YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD + + S o u r c e F i l e + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "kgprotocols.h" +#include "../krusader.h" +#include "../krservices.h" +#include <tdelocale.h> +#include <kprotocolinfo.h> +#include <kmimetype.h> +#include <tqvbox.h> +#include <tqheader.h> +#include <kiconloader.h> +#include <tqwhatsthis.h> + +TQString KgProtocols::defaultProtocols = "krarc,iso,tar"; +TQString KgProtocols::defaultIsoMimes = "application/x-iso"; +TQString KgProtocols::defaultKrarcMimes = "application/x-7z,application/x-7z-compressed," + "application/x-ace,application/x-ace-compressed," + "application/x-arj,application/x-arj-compressed," + "application/x-bzip2," + "application/x-cpio,application/x-deb," + "application/x-debian-package," + "application/x-gzip,application/x-jar," + "application/x-lha,application/x-lha-compressed," + "application/x-rar," + "application/x-rpm," + "application/x-xz," + "application/x-zip"; +TQString KgProtocols::defaultTarMimes = "application/x-tar,application/x-tarz," + "application/x-compressed-tar," + "application/x-tbz,application/x-tgz,application/x-txz"; + +KgProtocols::KgProtocols( bool first, TQWidget* parent, const char* name ) : + KonfiguratorPage( first, parent, name ) +{ + TQGridLayout *KgProtocolsLayout = new TQGridLayout( parent ); + KgProtocolsLayout->setSpacing( 6 ); + + // -------------------------- LINK VIEW ---------------------------------- + + TQGroupBox *linkGrp = createFrame( i18n( "Links" ), parent, "linkGrp" ); + TQGridLayout *linkGrid = createGridLayout( linkGrp->layout() ); + + linkList = new TQListView( linkGrp, "linkList" ); + linkList->addColumn( i18n( "Defined Links" ) ); + linkList->header()->setStretchEnabled( true, 0 ); + linkList->setRootIsDecorated( true ); + + linkGrid->addWidget( linkList, 0, 0 ); + KgProtocolsLayout->addMultiCellWidget( linkGrp, 0 ,1, 0, 0 ); + + // -------------------------- BUTTONS ---------------------------------- + + TQVBox *vbox1 = new TQVBox( parent, "vbox1" ) ; + + addSpacer( vbox1 ); + btnAddProtocol = new TQPushButton( vbox1, "btnAddProtocolButton" ); + btnAddProtocol->setPixmap( krLoader->loadIcon( "1leftarrow", TDEIcon::Small ) ); + TQWhatsThis::add( btnAddProtocol, i18n( "Add protocol to the link list." ) ); + btnRemoveProtocol = new TQPushButton( vbox1, "btnRemoveProtocolButton" ); + btnRemoveProtocol->setPixmap( krLoader->loadIcon( "1rightarrow", TDEIcon::Small ) ); + TQWhatsThis::add( btnRemoveProtocol, i18n( "Remove protocol from the link list." ) ); + addSpacer( vbox1 ); + + KgProtocolsLayout->addWidget( vbox1, 0 ,1 ); + + TQVBox *vbox2 = new TQVBox( parent, "vbox2" ) ; + + addSpacer( vbox2 ); + btnAddMime = new TQPushButton( vbox2, "btnAddMimeButton" ); + btnAddMime->setPixmap( krLoader->loadIcon( "1leftarrow", TDEIcon::Small ) ); + TQWhatsThis::add( btnAddMime, i18n( "Add mime to the selected protocol on the link list." ) ); + btnRemoveMime = new TQPushButton( vbox2, "btnRemoveMimeButton" ); + btnRemoveMime->setPixmap( krLoader->loadIcon( "1rightarrow", TDEIcon::Small ) ); + TQWhatsThis::add( btnRemoveMime, i18n( "Remove mime from the link list." ) ); + addSpacer( vbox2 ); + + KgProtocolsLayout->addWidget( vbox2, 1 ,1 ); + + // -------------------------- PROTOCOLS LISTBOX ---------------------------------- + + TQGroupBox *protocolGrp = createFrame( i18n( "Protocols" ), parent, "protocolGrp" ); + TQGridLayout *protocolGrid = createGridLayout( protocolGrp->layout() ); + + protocolList = new TQListBox( protocolGrp, "protocolList" ); + loadListCapableProtocols(); + protocolGrid->addWidget( protocolList, 0, 0 ); + + KgProtocolsLayout->addWidget( protocolGrp, 0 ,2 ); + + // -------------------------- MIMES LISTBOX ---------------------------------- + + TQGroupBox *mimeGrp = createFrame( i18n( "Mimes" ), parent, "mimeGrp" ); + TQGridLayout *mimeGrid = createGridLayout( mimeGrp->layout() ); + + mimeList = new TQListBox( mimeGrp, "protocolList" ); + loadMimes(); + mimeGrid->addWidget( mimeList, 0, 0 ); + + KgProtocolsLayout->addWidget( mimeGrp, 1 ,2 ); + + // -------------------------- CONNECT TABLE ---------------------------------- + + connect( protocolList, TQ_SIGNAL( selectionChanged() ), this, TQ_SLOT( slotDisableButtons() ) ); + connect( linkList, TQ_SIGNAL( selectionChanged() ), this, TQ_SLOT( slotDisableButtons() ) ); + connect( mimeList, TQ_SIGNAL( selectionChanged() ), this, TQ_SLOT( slotDisableButtons() ) ); + connect( linkList, TQ_SIGNAL( currentChanged( TQListViewItem *) ), this, TQ_SLOT( slotDisableButtons() ) ); + connect( btnAddProtocol, TQ_SIGNAL( clicked() ) , this, TQ_SLOT( slotAddProtocol() ) ); + connect( btnRemoveProtocol, TQ_SIGNAL( clicked() ) , this, TQ_SLOT( slotRemoveProtocol() ) ); + connect( btnAddMime, TQ_SIGNAL( clicked() ) , this, TQ_SLOT( slotAddMime() ) ); + connect( btnRemoveMime, TQ_SIGNAL( clicked() ) , this, TQ_SLOT( slotRemoveMime() ) ); + + loadInitialValues(); + slotDisableButtons(); +} + +TQWidget* KgProtocols::addSpacer( TQWidget *parent, const char *widgetName ) +{ + TQWidget *widget = new TQWidget( parent, widgetName ); + TQVBoxLayout *vboxlayout = new TQVBoxLayout( widget ); + TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); + vboxlayout->addItem( spacer ); + return widget; +} + +void KgProtocols::loadListCapableProtocols() +{ + TQStringList protocols = KProtocolInfo::protocols(); + protocols.sort(); + + for ( TQStringList::Iterator it = protocols.begin(); it != protocols.end();) + { + if( !KProtocolInfo::supportsListing( *it ) ) + { + it = protocols.remove( it ); + continue; + } + ++it; + } + protocolList->insertStringList( protocols ); +} + +void KgProtocols::loadMimes() +{ + KMimeType::List mimes = KMimeType::allMimeTypes(); + + for( TQValueListIterator<KMimeType::Ptr> it = mimes.begin(); it != mimes.end(); it++ ) + mimeList->insertItem( (*it)->name() ); + + mimeList->sort(); +} + +void KgProtocols::slotDisableButtons() +{ + btnAddProtocol->setEnabled( protocolList->selectedItem() != 0 ); + TQListViewItem *listViewItem = linkList->currentItem(); + bool isProtocolSelected = ( listViewItem == 0 ? false : listViewItem->parent() == 0 ); + btnRemoveProtocol->setEnabled( isProtocolSelected ); + btnAddMime->setEnabled( listViewItem != 0 && mimeList->selectedItem() != 0 ); + btnRemoveMime->setEnabled( listViewItem == 0 ? false : listViewItem->parent() != 0 ); + + if( linkList->currentItem() == 0 && linkList->firstChild() != 0 ) + linkList->setCurrentItem( linkList->firstChild() ); + if( linkList->selectedItem() == 0 && linkList->currentItem() != 0 ) + linkList->setSelected( linkList->currentItem(), true ); +} + +void KgProtocols::slotAddProtocol() +{ + TQListBoxItem *item = protocolList->selectedItem(); + if( item ) + { + addProtocol( item->text(), true ); + slotDisableButtons(); + emit sigChanged(); + } +} + +void KgProtocols::addProtocol( TQString name, bool changeCurrent ) +{ + TQListBoxItem *item = protocolList->findItem( name, ExactMatch ); + if( item ) + { + protocolList->removeItem( protocolList->index( item ) ); + TQListViewItem *listViewItem = new TQListViewItem( linkList, name ); + listViewItem->setPixmap( 0, krLoader->loadIcon( "application-x-executable", TDEIcon::Small ) ); + + if( changeCurrent ) + linkList->setCurrentItem( listViewItem ); + } +} + +void KgProtocols::slotRemoveProtocol() +{ + TQListViewItem *item = linkList->currentItem(); + if( item ) + { + removeProtocol( item->text( 0 ) ); + slotDisableButtons(); + emit sigChanged(); + } +} + +void KgProtocols::removeProtocol( TQString name ) +{ + TQListViewItem *item = linkList->findItem( name, 0 ); + if( item ) + { + while( item->childCount() != 0 ) + removeMime( item->firstChild()->text( 0 ) ); + + linkList->takeItem( item ); + protocolList->insertItem( name ); + protocolList->sort(); + } +} + +void KgProtocols::slotAddMime() +{ + TQListBoxItem *item = mimeList->selectedItem(); + if( item && linkList->currentItem() != 0 ) + { + TQListViewItem *itemToAdd = linkList->currentItem(); + if( itemToAdd->parent() ) + itemToAdd = itemToAdd->parent(); + + addMime( item->text(), itemToAdd->text( 0 ) ); + slotDisableButtons(); + emit sigChanged(); + } +} + +void KgProtocols::addMime( TQString name, TQString protocol ) +{ + TQListBoxItem *item = mimeList->findItem( name, ExactMatch ); + TQListViewItem *currentListItem = linkList->findItem( protocol, 0 ); + + if( item && currentListItem && currentListItem->parent() == 0 ) + { + mimeList->removeItem( mimeList->index( item ) ); + TQListViewItem *listViewItem = new TQListViewItem( currentListItem, name ); + listViewItem->setPixmap( 0, krLoader->loadIcon( "mime", TDEIcon::Small ) ); + currentListItem->setOpen( true ); + } +} + +void KgProtocols::slotRemoveMime() +{ + TQListViewItem *item = linkList->currentItem(); + if( item ) + { + removeMime( item->text( 0 ) ); + slotDisableButtons(); + emit sigChanged(); + } +} + +void KgProtocols::removeMime( TQString name ) +{ + TQListViewItem *currentMimeItem = linkList->findItem( name, 0 ); + + if( currentMimeItem && currentMimeItem->parent() != 0 ) + { + mimeList->insertItem( currentMimeItem->text( 0 ) ); + mimeList->sort(); + currentMimeItem->parent()->takeItem( currentMimeItem ); + } +} + +void KgProtocols::loadInitialValues() +{ + while( linkList->childCount() != 0 ) + removeProtocol( linkList->firstChild()->text( 0 ) ); + + krConfig->setGroup( "Protocols" ); + TQStringList protList = krConfig->readListEntry( "Handled Protocols" ); + + for( TQStringList::Iterator it = protList.begin(); it != protList.end(); it++ ) + { + addProtocol( *it ); + + TQStringList mimes = krConfig->readListEntry( TQString( "Mimes For %1" ).arg( *it ) ); + + for( TQStringList::Iterator it2 = mimes.begin(); it2 != mimes.end(); it2++ ) + addMime( *it2, *it ); + } + + if( linkList->firstChild() != 0 ) + linkList->setCurrentItem( linkList->firstChild() ); + slotDisableButtons(); +} + +void KgProtocols::setDefaults() +{ + while( linkList->childCount() != 0 ) + removeProtocol( linkList->firstChild()->text( 0 ) ); + + addProtocol( "iso" ); + addMime( "application/x-iso", "iso" ); + + addProtocol( "krarc" ); + TQStringList krarcMimes = TQStringList::split( ',', defaultKrarcMimes ); + for( TQStringList::Iterator it = krarcMimes.begin(); it != krarcMimes.end(); it++ ) + addMime( *it, "krarc" ); + + addProtocol( "tar" ); + TQStringList tarMimes = TQStringList::split( ',', defaultTarMimes ); + for( TQStringList::Iterator it = tarMimes.begin(); it != tarMimes.end(); it++ ) + addMime( *it, "tar" ); + + slotDisableButtons(); + + if( isChanged() ) + emit sigChanged(); +} + +bool KgProtocols::isChanged() +{ + krConfig->setGroup( "Protocols" ); + TQStringList protList = krConfig->readListEntry( "Handled Protocols" ); + + if( (int)protList.count() != linkList->childCount() ) + return true; + + TQListViewItem *item = linkList->firstChild(); + while( item ) + { + if( !protList.contains( item->text( 0 ) ) ) + return true; + + TQStringList mimes = krConfig->readListEntry( TQString( "Mimes For %1" ).arg( item->text( 0 ) ) ); + + if( (int)mimes.count() != item->childCount() ) + return true; + TQListViewItem *childs = item->firstChild(); + while( childs ) + { + if( !mimes.contains( childs->text( 0 ) ) ) + return true; + childs = childs->nextSibling(); + } + + item = item->nextSibling(); + } + + return false; +} + +bool KgProtocols::apply() +{ + krConfig->setGroup( "Protocols" ); + + TQStringList protocolList; + + TQListViewItem *item = linkList->firstChild(); + while( item ) + { + protocolList.append( item->text( 0 ) ); + + TQStringList mimes; + TQListViewItem *childs = item->firstChild(); + while( childs ) + { + mimes.append( childs->text( 0 ) ); + childs = childs->nextSibling(); + } + krConfig->writeEntry( TQString( "Mimes For %1" ).arg( item->text( 0 ) ), mimes ); + + item = item->nextSibling(); + } + krConfig->writeEntry( "Handled Protocols", protocolList ); + krConfig->sync(); + + KrServices::clearProtocolCache(); + + emit sigChanged(); + return false; +} + +void KgProtocols::init() +{ + if( !krConfig->groupList().contains( "Protocols" ) ) + { + krConfig->setGroup( "Protocols" ); + krConfig->writeEntry( "Handled Protocols", defaultProtocols ); + krConfig->writeEntry( "Mimes For iso", defaultIsoMimes ); + krConfig->writeEntry( "Mimes For krarc", defaultKrarcMimes ); + krConfig->writeEntry( "Mimes For tar", defaultTarMimes ); + } +} + +#include "kgprotocols.moc" |