diff options
Diffstat (limited to 'kio/kfile/kurlbar.cpp')
-rw-r--r-- | kio/kfile/kurlbar.cpp | 1049 |
1 files changed, 0 insertions, 1049 deletions
diff --git a/kio/kfile/kurlbar.cpp b/kio/kfile/kurlbar.cpp deleted file mode 100644 index ee79b4e58..000000000 --- a/kio/kfile/kurlbar.cpp +++ /dev/null @@ -1,1049 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - 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 <unistd.h> - -#include <tqapplication.h> -#include <tqcheckbox.h> -#include <tqdrawutil.h> -#include <tqfontmetrics.h> -#include <tqlabel.h> -#include <tqgrid.h> -#include <tqpainter.h> -#include <tqpopupmenu.h> -#include <tqstyle.h> -#include <tqvbox.h> -#include <tqwhatsthis.h> - -#include <kaboutdata.h> -#include <kconfig.h> -#include <kdebug.h> -#include <kglobal.h> -#include <kicondialog.h> -#include <kiconloader.h> -#include <kinstance.h> -#include <klineedit.h> -#include <klocale.h> -#include <kmimetype.h> -#include <kprotocolinfo.h> -#include <kstringhandler.h> -#include <kurldrag.h> -#include <kurlrequester.h> -#include <kio/global.h> -#include <kio/netaccess.h> - -#include "kurlbar.h" - -/** - * Handles tooltips in the KURLBar - * @internal - */ -class KURLBarToolTip : public TQToolTip -{ -public: - KURLBarToolTip( TQListBox *view ) : TQToolTip( view ), m_view( view ) {} - -protected: - virtual void maybeTip( const TQPoint& point ) { - TQListBoxItem *item = m_view->itemAt( point ); - if ( item ) { - TQString text = static_cast<KURLBarItem*>( item )->toolTip(); - if ( !text.isEmpty() ) - tip( m_view->itemRect( item ), text ); - } - } - -private: - TQListBox *m_view; -}; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -class KURLBarItem::KURLBarItemPrivate -{ -public: - KURLBarItemPrivate() - { - isPersistent = true; - } - - bool isPersistent; -}; - -KURLBarItem::KURLBarItem( KURLBar *parent, - const KURL& url, bool persistent, const TQString& description, - const TQString& icon, KIcon::Group group ) - : TQListBoxPixmap( KIconLoader::unknown() /*, parent->listBox()*/ ), - m_url( url ), - m_pixmap( 0L ), - m_parent( parent ), - m_appLocal( true ) -{ - init( icon, group, description, persistent ); -} - -KURLBarItem::KURLBarItem( KURLBar *parent, - const KURL& url, const TQString& description, - const TQString& icon, KIcon::Group group ) - : TQListBoxPixmap( KIconLoader::unknown() /*, parent->listBox()*/ ), - m_url( url ), - m_pixmap( 0L ), - m_parent( parent ), - m_appLocal( true ) -{ - init( icon, group, description, true /*persistent*/ ); -} - -void KURLBarItem::init( const TQString& icon, KIcon::Group group, - const TQString& description, bool persistent ) -{ - d = new KURLBarItemPrivate; - d->isPersistent = persistent; - - setCustomHighlighting( true ); - setIcon( icon, group ); - setDescription( description ); -} - -KURLBarItem::~KURLBarItem() -{ - delete d; -} - -void KURLBarItem::setURL( const KURL& url ) -{ - m_url = url; - if ( m_description.isEmpty() ) - setText( url.fileName() ); -} - -void KURLBarItem::setIcon( const TQString& icon, KIcon::Group group ) -{ - m_icon = icon; - m_group = group; - - if ( icon.isEmpty() ) - m_pixmap = KMimeType::pixmapForURL( m_url, 0, group, iconSize() ); - else - m_pixmap = KGlobal::iconLoader()->loadIcon( icon, group, iconSize(), - KIcon::DefaultState ); -} - -void KURLBarItem::setDescription( const TQString& desc ) -{ - m_description = desc; - setText( desc.isEmpty() ? m_url.fileName() : desc ); -} - -void KURLBarItem::setApplicationLocal( bool local ) -{ - if ( !local && !isPersistent() ) - { - kdWarning() << "KURLBar: dynamic (non-persistent) items can not be global." << endl; - return; - } - - m_appLocal = local; -} - -void KURLBarItem::setToolTip( const TQString& tip ) -{ - m_toolTip = tip; -} - -TQString KURLBarItem::toolTip() const -{ - return m_toolTip.isEmpty() ? m_url.prettyURL() : m_toolTip; -} - -int KURLBarItem::iconSize() const -{ - return m_parent->iconSize(); -} - -void KURLBarItem::paint( TQPainter *p ) -{ - TQListBox *box = listBox(); - int w = width( box ); - static const int margin = KDialog::spacingHint(); - - // draw sunken selection - if ( isCurrent() || isSelected() ) { - int h = height( box ); - - TQBrush brush = box->colorGroup().brush( TQColorGroup::Highlight ); - p->fillRect( 0, 0, w, h, brush ); - TQPen pen = p->pen(); - TQPen oldPen = pen; - pen.setColor( box->colorGroup().mid() ); - p->setPen( pen ); - - p->drawPoint( 0, 0 ); - p->drawPoint( 0, h - 1 ); - p->drawPoint( w - 1, 0 ); - p->drawPoint( w - 1, h - 1 ); - - p->setPen( oldPen ); - } - - if ( m_parent->iconSize() < KIcon::SizeMedium ) { - // small icon -> draw icon next to text - - // ### mostly cut & paste of TQListBoxPixmap::paint() until Qt 3.1 - // (where it will properly use pixmap() instead of the internal pixmap) - const TQPixmap *pm = pixmap(); - int yPos = QMAX( 0, (height(box) - pm->height())/2 ); - - p->drawPixmap( margin, yPos, *pm ); - if ( !text().isEmpty() ) { - TQFontMetrics fm = p->fontMetrics(); - if ( pm->height() < fm.height() ) - yPos = fm.ascent() + fm.leading()/2; - else - yPos = pm->height()/2 - fm.height()/2 + fm.ascent(); - - yPos += margin; - int stringWidth = box->width() - pm->width() - 2 - (margin * 2); - TQString visibleText = KStringHandler::rPixelSqueeze( text(), fm, stringWidth ); - int xPos = pm->width() + margin + 2; - - if ( isCurrent() || isSelected() ) { - p->setPen( box->colorGroup().highlight().dark(115) ); - p->drawText( xPos + ( TQApplication::reverseLayout() ? -1 : 1), - yPos + 1, visibleText ); - p->setPen( box->colorGroup().highlightedText() ); - } - - p->drawText( xPos, yPos, visibleText ); - } - // end cut & paste (modulo pixmap centering) - } - - else { - // big icons -> draw text below icon - int y = margin; - const TQPixmap *pm = pixmap(); - - if ( !pm->isNull() ) { - int x = (w - pm->width()) / 2; - x = QMAX( x, margin ); - p->drawPixmap( x, y, *pm ); - } - - if ( !text().isEmpty() ) { - TQFontMetrics fm = p->fontMetrics(); - y += pm->height() + fm.height() - fm.descent(); - - int stringWidth = box->width() - (margin * 2); - TQString visibleText = KStringHandler::rPixelSqueeze( text(), fm, stringWidth ); - int x = (w - fm.width( visibleText )) / 2; - x = QMAX( x, margin ); - - if ( isCurrent() || isSelected() ) { - p->setPen( box->colorGroup().highlight().dark(115) ); - p->drawText( x + ( TQApplication::reverseLayout() ? -1 : 1), - y + 1, visibleText ); - p->setPen( box->colorGroup().highlightedText() ); - } - - p->drawText( x, y, visibleText ); - } - } -} - -TQSize KURLBarItem::sizeHint() const -{ - int wmin = 0; - int hmin = 0; - const KURLBarListBox *lb =static_cast<const KURLBarListBox*>(listBox()); - - if ( m_parent->iconSize() < KIcon::SizeMedium ) { - wmin = TQListBoxPixmap::width( lb ) + KDialog::spacingHint() * 2; - hmin = TQListBoxPixmap::height( lb ) + KDialog::spacingHint() * 2; - } - else { - wmin = QMAX(lb->fontMetrics().width(text()), pixmap()->width()) + KDialog::spacingHint() * 2; - hmin = lb->fontMetrics().lineSpacing() + pixmap()->height() + KDialog::spacingHint() * 2; - } - - if ( lb->isVertical() ) - wmin = QMIN( wmin, lb->viewport()->sizeHint().width() ); - else - hmin = QMIN( hmin, lb->viewport()->sizeHint().height() ); - - return TQSize( wmin, hmin ); -} - -int KURLBarItem::width( const TQListBox *lb ) const -{ - if ( static_cast<const KURLBarListBox *>( lb )->isVertical() ) - return QMAX( sizeHint().width(), lb->viewport()->width() ); - else - return sizeHint().width(); -} - -int KURLBarItem::height( const TQListBox *lb ) const -{ - if ( static_cast<const KURLBarListBox *>( lb )->isVertical() ) - return sizeHint().height(); - else - return QMAX( sizeHint().height(), lb->viewport()->height() ); -} - -bool KURLBarItem::isPersistent() const -{ - return d->isPersistent; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -class KURLBar::KURLBarPrivate -{ -public: - KURLBarPrivate() - { - currentURL.setPath( TQDir::homeDirPath() ); - defaultIconSize = 0; - } - - int defaultIconSize; - KURL currentURL; -}; - - -KURLBar::KURLBar( bool useGlobalItems, TQWidget *parent, const char *name, WFlags f ) - : TQFrame( parent, name, f ), - m_activeItem( 0L ), - m_useGlobal( useGlobalItems ), - m_isModified( false ), - m_isImmutable( false ), - m_listBox( 0L ), - m_iconSize( KIcon::SizeMedium ) -{ - d = new KURLBarPrivate(); - - setListBox( 0L ); - setSizePolicy( TQSizePolicy( isVertical() ? - TQSizePolicy::Maximum : - TQSizePolicy::Preferred, - isVertical() ? - TQSizePolicy::Preferred : - TQSizePolicy::Maximum )); - TQWhatsThis::add(this, i18n("<qt>The <b>Quick Access</b> panel provides easy access to commonly used file locations.<p>" - "Clicking on one of the shortcut entries will take you to that location.<p>" - "By right clicking on an entry you can add, edit and remove shortcuts.</qt>")); -} - -KURLBar::~KURLBar() -{ - delete d; -} - -KURLBarItem * KURLBar::insertItem(const KURL& url, const TQString& description, - bool applicationLocal, - const TQString& icon, KIcon::Group group ) -{ - KURLBarItem *item = new KURLBarItem(this, url, description, icon, group); - item->setApplicationLocal( applicationLocal ); - m_listBox->insertItem( item ); - return item; -} - -KURLBarItem * KURLBar::insertDynamicItem(const KURL& url, const TQString& description, - const TQString& icon, KIcon::Group group ) -{ - KURLBarItem *item = new KURLBarItem(this, url, false, description, icon, group); - m_listBox->insertItem( item ); - return item; -} - -void KURLBar::setOrientation( Qt::Orientation orient ) -{ - m_listBox->setOrientation( orient ); - setSizePolicy( TQSizePolicy( isVertical() ? - TQSizePolicy::Maximum : - TQSizePolicy::Preferred, - isVertical() ? - TQSizePolicy::Preferred : - TQSizePolicy::Maximum )); -} - -Qt::Orientation KURLBar::orientation() const -{ - return m_listBox->orientation(); -} - -void KURLBar::setListBox( KURLBarListBox *view ) -{ - delete m_listBox; - - if ( !view ) { - m_listBox = new KURLBarListBox( this, "urlbar listbox" ); - setOrientation( Qt::Vertical ); - } - else { - m_listBox = view; - if ( m_listBox->parentWidget() != this ) - m_listBox->reparent( this, TQPoint(0,0) ); - m_listBox->resize( width(), height() ); - } - - m_listBox->setSelectionMode( KListBox::Single ); - paletteChange( palette() ); - m_listBox->setFocusPolicy( TQ_TabFocus ); - - connect( m_listBox, TQT_SIGNAL( mouseButtonClicked( int, TQListBoxItem *, const TQPoint & ) ), - TQT_SLOT( slotSelected( int, TQListBoxItem * ))); - connect( m_listBox, TQT_SIGNAL( dropped( TQDropEvent * )), - this, TQT_SLOT( slotDropped( TQDropEvent * ))); - connect( m_listBox, TQT_SIGNAL( contextMenuRequested( TQListBoxItem *, - const TQPoint& )), - TQT_SLOT( slotContextMenuRequested( TQListBoxItem *, const TQPoint& ))); - connect( m_listBox, TQT_SIGNAL( returnPressed( TQListBoxItem * ) ), - TQT_SLOT( slotSelected( TQListBoxItem * ) )); -} - -void KURLBar::setIconSize( int size ) -{ - if ( size == m_iconSize ) - return; - - m_iconSize = size; - - // reload the icons with the new size - KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - while ( item ) { - item->setIcon( item->icon(), item->iconGroup() ); - item = static_cast<KURLBarItem*>( item->next() ); - } - - resize( sizeHint() ); - updateGeometry(); -} - -void KURLBar::clear() -{ - m_listBox->clear(); -} - -void KURLBar::resizeEvent( TQResizeEvent *e ) -{ - TQFrame::resizeEvent( e ); - m_listBox->resize( width(), height() ); -} - -void KURLBar::paletteChange( const TQPalette & ) -{ - TQPalette pal = palette(); - TQColor gray = pal.color( TQPalette::Normal, TQColorGroup::Background ); - TQColor selectedTextColor = pal.color( TQPalette::Normal, TQColorGroup::BrightText ); - TQColor foreground = pal.color( TQPalette::Normal, TQColorGroup::Foreground ); - pal.setColor( TQPalette::Normal, TQColorGroup::Base, gray ); - pal.setColor( TQPalette::Normal, TQColorGroup::HighlightedText, selectedTextColor ); - pal.setColor( TQPalette::Normal, TQColorGroup::Text, foreground ); - pal.setColor( TQPalette::Inactive, TQColorGroup::Base, gray ); - pal.setColor( TQPalette::Inactive, TQColorGroup::HighlightedText, selectedTextColor ); - pal.setColor( TQPalette::Inactive, TQColorGroup::Text, foreground ); - - setPalette( pal ); -} - -TQSize KURLBar::sizeHint() const -{ - return m_listBox->sizeHint(); - -#if 0 - // this code causes vertical and or horizontal scrollbars appearing - // depending on the text, font, moonphase and earth rotation. Just using - // m_listBox->sizeHint() fixes this (although the widget can then be - // resized to a smaller size so that scrollbars appear). - int w = 0; - int h = 0; - KURLBarItem *item; - bool vertical = isVertical(); - - for ( item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - item; - item = static_cast<KURLBarItem*>( item->next() ) ) { - - TQSize sh = item->sizeHint(); - - if ( vertical ) { - w = QMAX( w, sh.width() ); - h += sh.height(); - } - else { - w += sh.width(); - h = QMAX( h, sh.height() ); - } - } - -// if ( vertical && m_listBox->verticalScrollBar()->isVisible() ) -// w += m_listBox->verticalScrollBar()->width(); -// else if ( !vertical && m_listBox->horizontalScrollBar()->isVisible() ) -// h += m_listBox->horizontalScrollBar()->height(); - - if ( w == 0 && h == 0 ) - return TQSize( 100, 200 ); - else - return TQSize( 6 + w, h ); -#endif -} - -TQSize KURLBar::minimumSizeHint() const -{ - TQSize s = sizeHint(); // ### - int w = s.width() + m_listBox->verticalScrollBar()->width(); - int h = s.height() + m_listBox->horizontalScrollBar()->height(); - return TQSize( w, h ); -} - -void KURLBar::slotSelected( int button, TQListBoxItem *item ) -{ - if ( button != Qt::LeftButton ) - return; - - slotSelected( item ); -} - -void KURLBar::slotSelected( TQListBoxItem *item ) -{ - if ( item && item != m_activeItem ) - m_activeItem = static_cast<KURLBarItem*>( item ); - - if ( m_activeItem ) { - m_listBox->setCurrentItem( m_activeItem ); - emit activated( m_activeItem->url() ); - } -} - -void KURLBar::setCurrentItem( const KURL& url ) -{ - d->currentURL = url; - - TQString u = url.url(-1); - - if ( m_activeItem && m_activeItem->url().url(-1) == u ) - return; - - bool hasURL = false; - TQListBoxItem *item = m_listBox->firstItem(); - while ( item ) { - if ( static_cast<KURLBarItem*>( item )->url().url(-1) == u ) { - m_activeItem = static_cast<KURLBarItem*>( item ); - m_listBox->setCurrentItem( item ); - m_listBox->setSelected( item, true ); - hasURL = true; - break; - } - item = item->next(); - } - - if ( !hasURL ) { - m_activeItem = 0L; - m_listBox->clearSelection(); - } -} - -KURLBarItem * KURLBar::currentItem() const -{ - TQListBoxItem *item = m_listBox->item( m_listBox->currentItem() ); - if ( item ) - return static_cast<KURLBarItem *>( item ); - return 0L; -} - -KURL KURLBar::currentURL() const -{ - KURLBarItem *item = currentItem(); - return item ? item->url() : KURL(); -} - -void KURLBar::readConfig( KConfig *appConfig, const TQString& itemGroup ) -{ - m_isImmutable = appConfig->groupIsImmutable( itemGroup ); - KConfigGroupSaver cs( appConfig, itemGroup ); - d->defaultIconSize = m_iconSize; - m_iconSize = appConfig->readNumEntry( "Speedbar IconSize", m_iconSize ); - - if ( m_useGlobal ) { // read global items - KConfig *globalConfig = KGlobal::config(); - KConfigGroupSaver cs( globalConfig, (TQString)(itemGroup +" (Global)")); - int num = globalConfig->readNumEntry( "Number of Entries" ); - for ( int i = 0; i < num; i++ ) { - readItem( i, globalConfig, false ); - } - } - - // read application local items - int num = appConfig->readNumEntry( "Number of Entries" ); - for ( int i = 0; i < num; i++ ) { - readItem( i, appConfig, true ); - } -} - -void KURLBar::readItem( int i, KConfig *config, bool applicationLocal ) -{ - TQString number = TQString::number( i ); - KURL url = KURL::fromPathOrURL( config->readPathEntry( TQString("URL_") + number )); - if ( !url.isValid() || !KProtocolInfo::isKnownProtocol( url )) - return; // nothing we could do. - - TQString description = config->readEntry( TQString("Description_") + number ); - - if (description.isEmpty() && url.protocol()=="beagle") { - KIO::UDSEntry uds; - const KURL kurl("beagle:?beagled-status"); - if (!KIO::NetAccess::stat(kurl, uds)) - return; - - description = i18n("Desktop Search"); - } - - insertItem( url, - description, - applicationLocal, - config->readEntry( TQString("Icon_") + number ), - static_cast<KIcon::Group>( - config->readNumEntry( TQString("IconGroup_") + number )) ); -} - -void KURLBar::writeConfig( KConfig *config, const TQString& itemGroup ) -{ - KConfigGroupSaver cs1( config, itemGroup ); - if(!config->hasDefault("Speedbar IconSize") && m_iconSize == d->defaultIconSize ) - config->revertToDefault("Speedbar IconSize"); - else - config->writeEntry( "Speedbar IconSize", m_iconSize ); - - if ( !m_isModified ) - return; - - int i = 0; - int numLocal = 0; - KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - - while ( item ) - { - if ( item->isPersistent() ) // we only save persistent items - { - if ( item->applicationLocal() ) - { - writeItem( item, numLocal, config, false ); - numLocal++; - } - - i++; - } - item = static_cast<KURLBarItem*>( item->next() ); - } - config->writeEntry("Number of Entries", numLocal); - - - // write the global entries to kdeglobals, if any - bool haveGlobalEntries = (i > numLocal); - if ( m_useGlobal && haveGlobalEntries ) { - config->setGroup( itemGroup + " (Global)" ); - - int numGlobals = 0; - item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - - while ( item ) - { - if ( item->isPersistent() ) // we only save persistent items - { - if ( !item->applicationLocal() ) - { - writeItem( item, numGlobals, config, true ); - numGlobals++; - } - } - - item = static_cast<KURLBarItem*>( item->next() ); - } - config->writeEntry("Number of Entries", numGlobals, true, true); - } - - m_isModified = false; -} - -void KURLBar::writeItem( KURLBarItem *item, int i, KConfig *config, - bool global ) -{ - if ( !item->isPersistent() ) - return; - - TQString Description = "Description_"; - TQString URL = "URL_"; - TQString Icon = "Icon_"; - TQString IconGroup = "IconGroup_"; - - TQString number = TQString::number( i ); - config->writePathEntry( URL + number, item->url().prettyURL(), true, global ); - - config->writeEntry( Description + number, item->description(),true,global); - config->writeEntry( Icon + number, item->icon(), true, global ); - config->writeEntry( IconGroup + number, item->iconGroup(), true, global ); -} - - -void KURLBar::slotDropped( TQDropEvent *e ) -{ - KURL::List urls; - if ( KURLDrag::decode( e, urls ) ) { - KURL url; - TQString description; - TQString icon; - bool appLocal = false; - - KURL::List::Iterator it = urls.begin(); - for ( ; it != urls.end(); ++it ) { - (void) insertItem( *it, description, appLocal, icon ); - m_isModified = true; - updateGeometry(); - } - } -} - -void KURLBar::slotContextMenuRequested( TQListBoxItem *_item, const TQPoint& pos ) -{ - if (m_isImmutable) - return; - - KURLBarItem *item = dynamic_cast<KURLBarItem*>( _item ); - - static const int IconSize = 10; - static const int AddItem = 20; - static const int EditItem = 30; - static const int RemoveItem = 40; - - KURL lastURL = m_activeItem ? m_activeItem->url() : KURL(); - - bool smallIcons = m_iconSize < KIcon::SizeMedium; - TQPopupMenu *popup = new TQPopupMenu(); - popup->insertItem( smallIcons ? - i18n("&Large Icons") : i18n("&Small Icons"), - IconSize ); - popup->insertSeparator(); - - if (item != 0L && item->isPersistent()) - { - popup->insertItem(SmallIconSet("edit"), i18n("&Edit Entry..."), EditItem); - popup->insertSeparator(); - } - - popup->insertItem(SmallIconSet("filenew"), i18n("&Add Entry..."), AddItem); - - if (item != 0L && item->isPersistent()) - { - popup->insertItem( SmallIconSet("editdelete"), i18n("&Remove Entry"), - RemoveItem ); - } - - int result = popup->exec( pos ); - switch ( result ) { - case IconSize: - setIconSize( smallIcons ? KIcon::SizeMedium : KIcon::SizeSmallMedium ); - m_listBox->triggerUpdate( true ); - break; - case AddItem: - addNewItem(); - break; - case EditItem: - editItem( static_cast<KURLBarItem *>( item ) ); - break; - case RemoveItem: - delete item; - m_isModified = true; - break; - default: // abort - break; - } - - // reset current item - m_activeItem = 0L; - setCurrentItem( lastURL ); -} - -bool KURLBar::addNewItem() -{ - KURLBarItem *item = new KURLBarItem( this, d->currentURL, - i18n("Enter a description") ); - if ( editItem( item ) ) { - m_listBox->insertItem( item ); - return true; - } - - delete item; - return false; -} - -bool KURLBar::editItem( KURLBarItem *item ) -{ - if ( !item || !item->isPersistent() ) // should never happen tho - return false; - - KURL url = item->url(); - TQString description = item->description(); - TQString icon = item->icon(); - bool appLocal = item->applicationLocal(); - - if ( KURLBarItemDialog::getInformation( m_useGlobal, - url, description, - icon, appLocal, - m_iconSize, this )) - { - item->setURL( url ); - item->setDescription( description ); - item->setIcon( icon ); - item->setApplicationLocal( appLocal ); - m_listBox->triggerUpdate( true ); - m_isModified = true; - updateGeometry(); - return true; - } - - return false; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -KURLBarListBox::KURLBarListBox( TQWidget *parent, const char *name ) - : KListBox( parent, name ) -{ - m_toolTip = new KURLBarToolTip( this ); - setAcceptDrops( true ); - viewport()->setAcceptDrops( true ); -} - -KURLBarListBox::~KURLBarListBox() -{ - delete m_toolTip; -} - -void KURLBarListBox::paintEvent( TQPaintEvent* ) -{ - TQPainter p(this); - p.setPen( colorGroup().mid() ); - p.drawRect( 0, 0, width(), height() ); -} - -TQDragObject * KURLBarListBox::dragObject() -{ - KURL::List urls; - KURLBarItem *item = static_cast<KURLBarItem*>( firstItem() ); - - while ( item ) { - if ( item->isSelected() ) - urls.append( item->url() ); - item = static_cast<KURLBarItem*>( item->next() ); - } - - if ( !urls.isEmpty() ) // ### use custom drag-object with description etc.? - return new KURLDrag( urls, this, "urlbar drag" ); - - return 0L; -} - -void KURLBarListBox::contentsDragEnterEvent( TQDragEnterEvent *e ) -{ - e->accept( KURLDrag::canDecode( e )); -} - -void KURLBarListBox::contentsDropEvent( TQDropEvent *e ) -{ - emit dropped( e ); -} - -void KURLBarListBox::contextMenuEvent( TQContextMenuEvent *e ) -{ - if (e) - { - emit contextMenuRequested( itemAt( e->globalPos() ), e->globalPos() ); - e->consume(); // Consume the event to avoid multiple contextMenuEvent calls... - } -} - -void KURLBarListBox::setOrientation( Qt::Orientation orient ) -{ - if ( orient == Qt::Vertical ) { - setColumnMode( 1 ); - setRowMode( Variable ); - } - else { - setRowMode( 1 ); - setColumnMode( Variable ); - } - - m_orientation = orient; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -bool KURLBarItemDialog::getInformation( bool allowGlobal, KURL& url, - TQString& description, TQString& icon, - bool& appLocal, int iconSize, - TQWidget *parent ) -{ - KURLBarItemDialog *dialog = new KURLBarItemDialog( allowGlobal, url, - description, icon, - appLocal, - iconSize, parent ); - if ( dialog->exec() == TQDialog::Accepted ) { - // set the return parameters - url = dialog->url(); - description = dialog->description(); - icon = dialog->icon(); - appLocal = dialog->applicationLocal(); - - delete dialog; - return true; - } - - delete dialog; - return false; -} - -KURLBarItemDialog::KURLBarItemDialog( bool allowGlobal, const KURL& url, - const TQString& description, - TQString icon, bool appLocal, - int iconSize, - TQWidget *parent, const char *name ) - : KDialogBase( parent, name, true, - i18n("Edit Quick Access Entry"), Ok | Cancel, Ok, true ) -{ - TQVBox *box = new TQVBox( this ); - TQString text = i18n("<qt><b>Please provide a description, URL and icon for this Quick Access entry.</b></br></qt>"); - TQLabel *label = new TQLabel( text, box ); - box->setSpacing( spacingHint() ); - - TQGrid *grid = new TQGrid( 2, box ); - grid->setSpacing( spacingHint() ); - - TQString whatsThisText = i18n("<qt>This is the text that will appear in the Quick Access panel.<p>" - "The description should consist of one or two words " - "that will help you remember what this entry refers to.</qt>"); - label = new TQLabel( i18n("&Description:"), grid ); - m_edit = new KLineEdit( grid, "description edit" ); - m_edit->setText( description.isEmpty() ? url.fileName() : description ); - label->setBuddy( m_edit ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_edit, whatsThisText ); - - whatsThisText = i18n("<qt>This is the location associated with the entry. Any valid URL may be used. For example:<p>" - "%1<br>http://www.kde.org<br>ftp://ftp.kde.org/pub/kde/stable<p>" - "By clicking on the button next to the text edit box you can browse to an " - "appropriate URL.</qt>").arg(TQDir::homeDirPath()); - label = new TQLabel( i18n("&URL:"), grid ); - m_urlEdit = new KURLRequester( url.prettyURL(), grid ); - m_urlEdit->setMode( KFile::Directory ); - label->setBuddy( m_urlEdit ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_urlEdit, whatsThisText ); - - whatsThisText = i18n("<qt>This is the icon that will appear in the Quick Access panel.<p>" - "Click on the button to select a different icon.</qt>"); - label = new TQLabel( i18n("Choose an &icon:"), grid ); - m_iconButton = new KIconButton( grid, "icon button" ); - m_iconButton->setIconSize( iconSize ); - if ( icon.isEmpty() ) - icon = KMimeType::iconForURL( url ); - m_iconButton->setIcon( icon ); - label->setBuddy( m_iconButton ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_iconButton, whatsThisText ); - - if ( allowGlobal ) { - TQString appName; - if ( KGlobal::instance()->aboutData() ) - appName = KGlobal::instance()->aboutData()->programName(); - if ( appName.isEmpty() ) - appName = TQString::fromLatin1( KGlobal::instance()->instanceName() ); - m_appLocal = new TQCheckBox( i18n("&Only show when using this application (%1)").arg( appName ), box ); - m_appLocal->setChecked( appLocal ); - TQWhatsThis::add( m_appLocal, - i18n("<qt>Select this setting if you want this " - "entry to show only when using the current application (%1).<p>" - "If this setting is not selected, the entry will be available in all " - "applications.</qt>") - .arg(appName)); - } - else - m_appLocal = 0L; - connect(m_urlEdit->lineEdit(),TQT_SIGNAL(textChanged ( const TQString & )),this,TQT_SLOT(urlChanged(const TQString & ))); - m_edit->setFocus(); - setMainWidget( box ); -} - -KURLBarItemDialog::~KURLBarItemDialog() -{ -} - -void KURLBarItemDialog::urlChanged(const TQString & text ) -{ - enableButtonOK( !text.isEmpty() ); -} - -KURL KURLBarItemDialog::url() const -{ - TQString text = m_urlEdit->url(); - KURL u; - if ( text.at(0) == '/' ) - u.setPath( text ); - else - u = text; - - return u; -} - -TQString KURLBarItemDialog::description() const -{ - return m_edit->text(); -} - -TQString KURLBarItemDialog::icon() const -{ - return m_iconButton->icon(); -} - -bool KURLBarItemDialog::applicationLocal() const -{ - if ( !m_appLocal ) - return true; - - return m_appLocal->isChecked(); -} - -void KURLBarItem::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KURLBar::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KURLBarListBox::virtual_hook( int id, void* data ) -{ KListBox::virtual_hook( id, data ); } - - -#include "kurlbar.moc" |