diff options
Diffstat (limited to 'kio/kfile/kurlcombobox.cpp')
-rw-r--r-- | kio/kfile/kurlcombobox.cpp | 363 |
1 files changed, 0 insertions, 363 deletions
diff --git a/kio/kfile/kurlcombobox.cpp b/kio/kfile/kurlcombobox.cpp deleted file mode 100644 index e01be4548..000000000 --- a/kio/kfile/kurlcombobox.cpp +++ /dev/null @@ -1,363 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000,2001 Carsten Pfeiffer <[email protected]> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2, as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqdir.h> -#include <tqlistbox.h> - -#include <kdebug.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <klocale.h> -#include <kmimetype.h> - -#include <kurlcombobox.h> - -class KURLComboBox::KURLComboBoxPrivate -{ -public: - KURLComboBoxPrivate() { - dirpix = SmallIcon(TQString::fromLatin1("folder")); - } - - TQPixmap dirpix; -}; - - -KURLComboBox::KURLComboBox( Mode mode, TQWidget *parent, const char *name ) - : KComboBox( parent, name ) -{ - init( mode ); -} - - -KURLComboBox::KURLComboBox( Mode mode, bool rw, TQWidget *parent, - const char *name ) - : KComboBox( rw, parent, name ) -{ - init( mode ); -} - - -KURLComboBox::~KURLComboBox() -{ - delete d; -} - - -void KURLComboBox::init( Mode mode ) -{ - d = new KURLComboBoxPrivate(); - - myMode = mode; - urlAdded = false; - myMaximum = 10; // default - itemList.setAutoDelete( true ); - defaultList.setAutoDelete( true ); - setInsertionPolicy( NoInsertion ); - setTrapReturnKey( true ); - setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed )); - - opendirPix = SmallIcon(TQString::fromLatin1("folder_open")); - - connect( this, TQT_SIGNAL( activated( int )), TQT_SLOT( slotActivated( int ))); -} - - -TQStringList KURLComboBox::urls() const -{ - kdDebug(250) << "::urls()" << endl; - //static const TQString &fileProt = TDEGlobal::staticQString("file:"); - TQStringList list; - TQString url; - for ( int i = defaultList.count(); i < count(); i++ ) { - url = text( i ); - if ( !url.isEmpty() ) { - //if ( url.at(0) == '/' ) - // list.append( url.prepend( fileProt ) ); - //else - list.append( url ); - } - } - - return list; -} - - -void KURLComboBox::addDefaultURL( const KURL& url, const TQString& text ) -{ - addDefaultURL( url, getPixmap( url ), text ); -} - - -void KURLComboBox::addDefaultURL( const KURL& url, const TQPixmap& pix, - const TQString& text ) -{ - KURLComboItem *item = new KURLComboItem; - item->url = url; - item->pixmap = pix; - if ( text.isEmpty() ) - if ( url.isLocalFile() ) - item->text = url.path( myMode ); - else - item->text = url.prettyURL( myMode ); - else - item->text = text; - - defaultList.append( item ); -} - - -void KURLComboBox::setDefaults() -{ - clear(); - itemMapper.clear(); - - KURLComboItem *item; - for ( unsigned int id = 0; id < defaultList.count(); id++ ) { - item = defaultList.at( id ); - insertURLItem( item ); - } -} - -void KURLComboBox::setURLs( TQStringList urls ) -{ - setURLs( urls, RemoveBottom ); -} - -void KURLComboBox::setURLs( TQStringList urls, OverLoadResolving remove ) -{ - setDefaults(); - itemList.clear(); - - if ( urls.isEmpty() ) - return; - - TQStringList::Iterator it = urls.begin(); - - // kill duplicates - TQString text; - while ( it != urls.end() ) { - while ( urls.contains( *it ) > 1 ) { - it = urls.remove( it ); - continue; - } - ++it; - } - - // limit to myMaximum items - /* Note: overload is an (old) C++ keyword, some compilers (KCC) choke - on that, so call it Overload (capital 'O'). (matz) */ - int Overload = urls.count() - myMaximum + defaultList.count(); - while ( Overload > 0 ) { - urls.remove((remove == RemoveBottom) ? urls.fromLast() : urls.begin()); - Overload--; - } - - it = urls.begin(); - - KURLComboItem *item = 0L; - KURL u; - - while ( it != urls.end() ) { - if ( (*it).isEmpty() ) { - ++it; - continue; - } - u = KURL::fromPathOrURL( *it ); - - // Don't restore if file doesn't exist anymore - if (u.isLocalFile() && !TQFile::exists(u.path())) { - ++it; - continue; - } - - item = new KURLComboItem; - item->url = u; - item->pixmap = getPixmap( u ); - - if ( u.isLocalFile() ) - item->text = u.path( myMode ); // don't show file:/ - else - item->text = *it; - - insertURLItem( item ); - itemList.append( item ); - ++it; - } -} - - -void KURLComboBox::setURL( const KURL& url ) -{ - if ( url.isEmpty() ) - return; - - blockSignals( true ); - - // check for duplicates - TQMap<int,const KURLComboItem*>::ConstIterator mit = itemMapper.begin(); - TQString urlToInsert = url.url(-1); - while ( mit != itemMapper.end() ) { - if ( urlToInsert == mit.data()->url.url(-1) ) { - setCurrentItem( mit.key() ); - - if ( myMode == Directories ) - updateItem( mit.data(), mit.key(), opendirPix ); - - blockSignals( false ); - return; - } - ++mit; - } - - // not in the combo yet -> create a new item and insert it - - // first remove the old item - if ( urlAdded ) { - itemList.removeLast(); - urlAdded = false; - } - - setDefaults(); - - TQPtrListIterator<KURLComboItem> it( itemList ); - for( ; it.current(); ++it ) - insertURLItem( it.current() ); - - KURLComboItem *item = new KURLComboItem; - item->url = url; - item->pixmap = getPixmap( url ); - if ( url.isLocalFile() ) - item->text = url.path( myMode ); - else - item->text = url.prettyURL( myMode ); - kdDebug(250) << "setURL: text=" << item->text << endl; - - int id = count(); - TQString text = /*isEditable() ? item->url.prettyURL( myMode ) : */ item->text; - - if ( myMode == Directories ) - KComboBox::insertItem( opendirPix, text, id ); - else - KComboBox::insertItem( item->pixmap, text, id ); - itemMapper.insert( id, item ); - itemList.append( item ); - - setCurrentItem( id ); - urlAdded = true; - blockSignals( false ); -} - - -void KURLComboBox::slotActivated( int index ) -{ - const KURLComboItem *item = itemMapper[ index ]; - - if ( item ) { - setURL( item->url ); - emit urlActivated( item->url ); - } -} - - -void KURLComboBox::insertURLItem( const KURLComboItem *item ) -{ -// kdDebug(250) << "insertURLItem " << item->text << endl; - int id = count(); - KComboBox::insertItem( item->pixmap, item->text, id ); - itemMapper.insert( id, item ); -} - - -void KURLComboBox::setMaxItems( int max ) -{ - myMaximum = max; - - if ( count() > myMaximum ) { - int oldCurrent = currentItem(); - - setDefaults(); - - TQPtrListIterator<KURLComboItem> it( itemList ); - int Overload = itemList.count() - myMaximum + defaultList.count(); - for ( int i = 0; i <= Overload; i++ ) - ++it; - - for( ; it.current(); ++it ) - insertURLItem( it.current() ); - - if ( count() > 0 ) { // restore the previous currentItem - if ( oldCurrent >= count() ) - oldCurrent = count() -1; - setCurrentItem( oldCurrent ); - } - } -} - - -void KURLComboBox::removeURL( const KURL& url, bool checkDefaultURLs ) -{ - TQMap<int,const KURLComboItem*>::ConstIterator mit = itemMapper.begin(); - while ( mit != itemMapper.end() ) { - if ( url.url(-1) == mit.data()->url.url(-1) ) { - if ( !itemList.remove( mit.data() ) && checkDefaultURLs ) - defaultList.remove( mit.data() ); - } - ++mit; - } - - blockSignals( true ); - setDefaults(); - TQPtrListIterator<KURLComboItem> it( itemList ); - while ( it.current() ) { - insertURLItem( *it ); - ++it; - } - blockSignals( false ); -} - - -TQPixmap KURLComboBox::getPixmap( const KURL& url ) const -{ - if ( myMode == Directories ) - return d->dirpix; - else - return KMimeType::pixmapForURL( url, 0, KIcon::Small ); -} - - -// updates "item" with pixmap "pixmap" and sets the URL instead of text -// works around a Qt bug. -void KURLComboBox::updateItem( const KURLComboItem *item, - int index, const TQPixmap& pixmap ) -{ - // TQComboBox::changeItem() doesn't honor the pixmap when - // using an editable combobox, so we just remove and insert - if ( editable() ) { - removeItem( index ); - insertItem( pixmap, - item->url.isLocalFile() ? item->url.path( myMode ) : - item->url.prettyURL( myMode ), - index ); - } - else - changeItem( pixmap, item->text, index ); -} - - -#include "kurlcombobox.moc" |