00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <unistd.h>
00020
00021 #include <qcheckbox.h>
00022 #include <qdrawutil.h>
00023 #include <qfontmetrics.h>
00024 #include <qlabel.h>
00025 #include <qgrid.h>
00026 #include <qpainter.h>
00027 #include <qpopupmenu.h>
00028 #include <qvbox.h>
00029 #include <qwhatsthis.h>
00030
00031 #include <kaboutdata.h>
00032 #include <kconfig.h>
00033 #include <kglobal.h>
00034 #include <kicondialog.h>
00035 #include <kiconloader.h>
00036 #include <kinstance.h>
00037 #include <klineedit.h>
00038 #include <klocale.h>
00039 #include <kmimetype.h>
00040 #include <kprotocolinfo.h>
00041 #include <kurldrag.h>
00042 #include <kurlrequester.h>
00043
00044 #include "kurlbar.h"
00045
00050 class KURLBarToolTip : public QToolTip
00051 {
00052 public:
00053 KURLBarToolTip( QListBox *view ) : QToolTip( view ), m_view( view ) {}
00054
00055 protected:
00056 virtual void maybeTip( const QPoint& point ) {
00057 QListBoxItem *item = m_view->itemAt( point );
00058 if ( item ) {
00059 QString text = static_cast<KURLBarItem*>( item )->toolTip();
00060 if ( !text.isEmpty() )
00061 tip( m_view->itemRect( item ), text );
00062 }
00063 }
00064
00065 private:
00066 QListBox *m_view;
00067 };
00068
00069
00072
00073
00074 KURLBarItem::KURLBarItem( KURLBar *parent,
00075 const KURL& url, const QString& description,
00076 const QString& icon, KIcon::Group group )
00077 : QListBoxPixmap( KIconLoader::unknown() ),
00078 m_url( url ),
00079 m_pixmap( 0L ),
00080 m_parent( parent ),
00081 m_appLocal( true )
00082 {
00083 setCustomHighlighting( true );
00084 setDescription( description );
00085 setIcon( icon, group );
00086 }
00087
00088 KURLBarItem::~KURLBarItem()
00089 {
00090 }
00091
00092 void KURLBarItem::setURL( const KURL& url )
00093 {
00094 m_url = url;
00095 if ( m_description.isEmpty() )
00096 setText( url.fileName() );
00097 }
00098
00099 void KURLBarItem::setIcon( const QString& icon, KIcon::Group group )
00100 {
00101 m_icon = icon;
00102 m_group = group;
00103
00104 if ( icon.isEmpty() )
00105 m_pixmap = KMimeType::pixmapForURL( m_url, 0, group, iconSize() );
00106 else
00107 m_pixmap = KGlobal::iconLoader()->loadIcon( icon, group, iconSize(),
00108 KIcon::DefaultState );
00109 }
00110
00111 void KURLBarItem::setDescription( const QString& desc )
00112 {
00113 m_description = desc;
00114 setText( desc.isEmpty() ? m_url.fileName() : desc );
00115 }
00116
00117 void KURLBarItem::setToolTip( const QString& tip )
00118 {
00119 m_toolTip = tip;
00120 }
00121
00122 QString KURLBarItem::toolTip() const
00123 {
00124 return m_toolTip.isEmpty() ? m_url.prettyURL() : m_toolTip;
00125 }
00126
00127 int KURLBarItem::iconSize() const
00128 {
00129 return m_parent->iconSize();
00130 }
00131
00132 void KURLBarItem::paint( QPainter *p )
00133 {
00134 QListBox *box = listBox();
00135 int w = width( box );
00136
00137 if ( m_parent->iconSize() < KIcon::SizeMedium ) {
00138
00139
00140
00141
00142 const QPixmap *pm = pixmap();
00143 int yPos = QMAX( 0, (height(box) - pm->height())/2 );
00144
00145 p->drawPixmap( 3, yPos, *pm );
00146 if ( !text().isEmpty() ) {
00147 QFontMetrics fm = p->fontMetrics();
00148 if ( pm->height() < fm.height() )
00149 yPos = fm.ascent() + fm.leading()/2;
00150 else
00151 yPos = pm->height()/2 - fm.height()/2 + fm.ascent();
00152 p->drawText( pm->width() + 5, yPos, text() );
00153 }
00154
00155 }
00156
00157 else {
00158
00159 static const int margin = 3;
00160 int y = margin;
00161 const QPixmap *pm = pixmap();
00162
00163 if ( !pm->isNull() ) {
00164 int x = (w - pm->width()) / 2;
00165 x = QMAX( x, margin );
00166 p->drawPixmap( x, y, *pm );
00167 }
00168
00169 if ( !text().isEmpty() ) {
00170 QFontMetrics fm = p->fontMetrics();
00171 y += pm->height() + fm.height() - fm.descent();
00172 int x = (w - fm.width( text() )) / 2;
00173 x = QMAX( x, margin );
00174 p->drawText( x, y, text() );
00175 }
00176 }
00177
00178
00179 if ( isCurrent() || isSelected() ) {
00180 qDrawShadePanel( p, 1, 0, w -2, height(box),
00181 box->colorGroup(), true, 1, 0L );
00182 }
00183 }
00184
00185 QSize KURLBarItem::sizeHint() const
00186 {
00187 int wmin = 0;
00188 int hmin = 0;
00189 const KURLBarListBox *lb =static_cast<const KURLBarListBox*>(listBox());
00190
00191 if ( m_parent->iconSize() < KIcon::SizeMedium ) {
00192 wmin = QListBoxPixmap::width( lb );
00193 hmin = QListBoxPixmap::height( lb );
00194 }
00195 else {
00196 wmin = QMAX(lb->fontMetrics().width(text()), pixmap()->width()) + 6;
00197 hmin = lb->fontMetrics().lineSpacing() + pixmap()->height() + 6;
00198 }
00199
00200 if ( lb->isVertical() )
00201 wmin = QMAX( wmin, lb->viewport()->sizeHint().width() );
00202 else
00203 hmin = QMAX( hmin, lb->viewport()->sizeHint().height() );
00204
00205 return QSize( wmin, hmin );
00206 }
00207
00208 int KURLBarItem::width( const QListBox *lb ) const
00209 {
00210 if ( static_cast<const KURLBarListBox *>( lb )->isVertical() )
00211 return QMAX( sizeHint().width(), lb->viewport()->width() );
00212 else
00213 return sizeHint().width();
00214 }
00215
00216 int KURLBarItem::height( const QListBox *lb ) const
00217 {
00218 if ( static_cast<const KURLBarListBox *>( lb )->isVertical() )
00219 return sizeHint().height();
00220 else
00221 return QMAX( sizeHint().height(), lb->viewport()->height() );
00222 }
00223
00226
00227
00228 KURLBar::KURLBar( bool useGlobalItems, QWidget *parent, const char *name, WFlags f )
00229 : QFrame( parent, name, f ),
00230 m_activeItem( 0L ),
00231 m_useGlobal( useGlobalItems ),
00232 m_isModified( false ),
00233 m_listBox( 0L ),
00234 m_iconSize( KIcon::SizeMedium )
00235 {
00236 setListBox( 0L );
00237 setSizePolicy( QSizePolicy( isVertical() ?
00238 QSizePolicy::Maximum :
00239 QSizePolicy::Preferred,
00240 isVertical() ?
00241 QSizePolicy::Preferred :
00242 QSizePolicy::Maximum ));
00243 QWhatsThis::add(this, i18n("<qt>The <b>Quick Access</b> panel provides easy access to commonly used file locations.<p>"
00244 "Clicking on one of the shortcut entries will take you to that location.<p>"
00245 "By right clicking on an entry you can add, edit and remove shortcuts.</qt>"));
00246 }
00247
00248 KURLBar::~KURLBar()
00249 {
00250 }
00251
00252 KURLBarItem * KURLBar::insertItem(const KURL& url, const QString& description,
00253 bool applicationLocal,
00254 const QString& icon, KIcon::Group group )
00255 {
00256 KURLBarItem *item = new KURLBarItem(this, url, description, icon, group);
00257 item->setApplicationLocal( applicationLocal );
00258 m_listBox->insertItem( item );
00259 return item;
00260 }
00261
00262 void KURLBar::setOrientation( Qt::Orientation orient )
00263 {
00264 m_listBox->setOrientation( orient );
00265 setSizePolicy( QSizePolicy( isVertical() ?
00266 QSizePolicy::Maximum :
00267 QSizePolicy::Preferred,
00268 isVertical() ?
00269 QSizePolicy::Preferred :
00270 QSizePolicy::Maximum ));
00271 }
00272
00273 Qt::Orientation KURLBar::orientation() const
00274 {
00275 return m_listBox->orientation();
00276 }
00277
00278 void KURLBar::setListBox( KURLBarListBox *view )
00279 {
00280 delete m_listBox;
00281
00282 if ( !view ) {
00283 m_listBox = new KURLBarListBox( this, "urlbar listbox" );
00284 setOrientation( Vertical );
00285 }
00286 else {
00287 m_listBox = view;
00288 if ( m_listBox->parentWidget() != this )
00289 m_listBox->reparent( this, QPoint(0,0) );
00290 m_listBox->resize( width(), height() );
00291 }
00292
00293 m_listBox->setSelectionMode( KListBox::Single );
00294 QPalette pal = palette();
00295 QColor gray = pal.color( QPalette::Normal, QColorGroup::Mid );
00296 QColor selectedTextColor = pal.color( QPalette::Normal, QColorGroup::BrightText );
00297 pal.setColor( QPalette::Normal, QColorGroup::Base, gray );
00298 pal.setColor( QPalette::Normal, QColorGroup::HighlightedText, selectedTextColor );
00299 pal.setColor( QPalette::Inactive, QColorGroup::Base, gray );
00300 pal.setColor( QPalette::Inactive, QColorGroup::HighlightedText, selectedTextColor );
00301
00302 setPalette( pal );
00303 m_listBox->viewport()->setBackgroundMode( PaletteMid );
00304
00305 connect( m_listBox, SIGNAL( mouseButtonClicked( int, QListBoxItem *, const QPoint & ) ),
00306 SLOT( slotSelected( int, QListBoxItem * )));
00307 connect( m_listBox, SIGNAL( dropped( QDropEvent * )),
00308 this, SLOT( slotDropped( QDropEvent * )));
00309 connect( m_listBox, SIGNAL( contextMenuRequested( QListBoxItem *,
00310 const QPoint& )),
00311 SLOT( slotContextMenuRequested( QListBoxItem *, const QPoint& )));
00312 }
00313
00314 void KURLBar::setIconSize( int size )
00315 {
00316 if ( size == m_iconSize )
00317 return;
00318
00319 m_iconSize = size;
00320
00321
00322 KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() );
00323 while ( item ) {
00324 item->setIcon( item->icon(), item->iconGroup() );
00325 item = static_cast<KURLBarItem*>( item->next() );
00326 }
00327
00328 resize( sizeHint() );
00329 updateGeometry();
00330 }
00331
00332 void KURLBar::clear()
00333 {
00334 m_listBox->clear();
00335 }
00336
00337 void KURLBar::resizeEvent( QResizeEvent *e )
00338 {
00339 QFrame::resizeEvent( e );
00340 m_listBox->resize( width(), height() );
00341 }
00342
00343 QSize KURLBar::sizeHint() const
00344 {
00345 return m_listBox->sizeHint();
00346
00347 #if 0
00348
00349
00350
00351
00352 int w = 0;
00353 int h = 0;
00354 KURLBarItem *item;
00355 bool vertical = isVertical();
00356
00357 for ( item = static_cast<KURLBarItem*>( m_listBox->firstItem() );
00358 item;
00359 item = static_cast<KURLBarItem*>( item->next() ) ) {
00360
00361 QSize sh = item->sizeHint();
00362
00363 if ( vertical ) {
00364 w = QMAX( w, sh.width() );
00365 h += sh.height();
00366 }
00367 else {
00368 w += sh.width();
00369 h = QMAX( h, sh.height() );
00370 }
00371 }
00372
00373
00374
00375
00376
00377
00378 if ( w == 0 && h == 0 )
00379 return QSize( 100, 200 );
00380 else
00381 return QSize( 6 + w, h );
00382 #endif
00383 }
00384
00385 QSize KURLBar::minimumSizeHint() const
00386 {
00387 QSize s = sizeHint();
00388 int w = s.width() + m_listBox->verticalScrollBar()->width();
00389 int h = s.height() + m_listBox->horizontalScrollBar()->height();
00390 return QSize( w, h );
00391 }
00392
00393 void KURLBar::slotSelected( int button, QListBoxItem *item )
00394 {
00395 if ( button != Qt::LeftButton )
00396 return;
00397
00398 slotSelected( item );
00399 }
00400
00401 void KURLBar::slotSelected( QListBoxItem *item )
00402 {
00403 if ( item && item != m_activeItem )
00404 m_activeItem = static_cast<KURLBarItem*>( item );
00405
00406 if ( m_activeItem ) {
00407 m_listBox->setCurrentItem( m_activeItem );
00408 emit activated( m_activeItem->url() );
00409 }
00410 }
00411
00412 void KURLBar::setCurrentItem( const KURL& url )
00413 {
00414 QString u = url.url(-1);
00415
00416 if ( m_activeItem && m_activeItem->url().url(-1) == u )
00417 return;
00418
00419 bool hasURL = false;
00420 QListBoxItem *item = m_listBox->firstItem();
00421 while ( item ) {
00422 if ( static_cast<KURLBarItem*>( item )->url().url(-1) == u ) {
00423 m_activeItem = static_cast<KURLBarItem*>( item );
00424 m_listBox->setCurrentItem( item );
00425 m_listBox->setSelected( item, true );
00426 hasURL = true;
00427 break;
00428 }
00429 item = item->next();
00430 }
00431
00432 if ( !hasURL ) {
00433 m_activeItem = 0L;
00434 m_listBox->clearSelection();
00435 }
00436 }
00437
00438 KURLBarItem * KURLBar::currentItem() const
00439 {
00440 QListBoxItem *item = m_listBox->item( m_listBox->currentItem() );
00441 if ( item )
00442 return static_cast<KURLBarItem *>( item );
00443 return 0L;
00444 }
00445
00446 KURL KURLBar::currentURL() const
00447 {
00448 KURLBarItem *item = currentItem();
00449 return item ? item->url() : KURL();
00450 }
00451
00452 void KURLBar::readConfig( KConfig *appConfig, const QString& itemGroup )
00453 {
00454 KConfigGroupSaver cs( appConfig, itemGroup );
00455 m_iconSize = appConfig->readNumEntry( "Speedbar IconSize", m_iconSize );
00456
00457 if ( m_useGlobal ) {
00458 KConfig *globalConfig = KGlobal::config();
00459 KConfigGroupSaver cs( globalConfig, (QString)(itemGroup +" (Global)"));
00460 int num = globalConfig->readNumEntry( "Number of Entries" );
00461 for ( int i = 0; i < num; i++ ) {
00462 readItem( i, globalConfig, false );
00463 }
00464 }
00465
00466
00467 int num = appConfig->readNumEntry( "Number of Entries" );
00468 for ( int i = 0; i < num; i++ ) {
00469 readItem( i, appConfig, true );
00470 }
00471 }
00472
00473 void KURLBar::readItem( int i, KConfig *config, bool applicationLocal )
00474 {
00475 QString number = QString::number( i );
00476
00477 const KURL& url = config->readEntry( QString("URL_") + number );
00478 if ( url.isMalformed() || !KProtocolInfo::isKnownProtocol( url ))
00479 return;
00480
00481 insertItem( url,
00482 config->readEntry( QString("Description_") + number ),
00483 applicationLocal,
00484 config->readEntry( QString("Icon_") + number ),
00485 static_cast<KIcon::Group>(
00486 config->readNumEntry( QString("IconGroup_") + number )) );
00487 }
00488
00489 void KURLBar::writeConfig( KConfig *config, const QString& itemGroup )
00490 {
00491 KConfigGroupSaver cs1( config, itemGroup );
00492 config->writeEntry( "Speedbar IconSize", m_iconSize );
00493
00494 if ( !m_isModified )
00495 return;
00496
00497 int i = 0;
00498 int numLocal = 0;
00499 KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() );
00500
00501 while ( item ) {
00502 if ( item->applicationLocal() ) {
00503 writeItem( item, numLocal, config, false );
00504 numLocal++;
00505 }
00506
00507 i++;
00508 item = static_cast<KURLBarItem*>( item->next() );
00509 }
00510 config->writeEntry("Number of Entries", numLocal);
00511
00512
00513
00514 bool haveGlobalEntries = (i > numLocal);
00515 if ( m_useGlobal && haveGlobalEntries ) {
00516 config->setGroup( itemGroup + " (Global)" );
00517
00518 int numGlobals = 0;
00519 item = static_cast<KURLBarItem*>( m_listBox->firstItem() );
00520
00521 while ( item ) {
00522 if ( !item->applicationLocal() ) {
00523 writeItem( item, numGlobals, config, true );
00524 numGlobals++;
00525 }
00526
00527 item = static_cast<KURLBarItem*>( item->next() );
00528 }
00529 config->writeEntry("Number of Entries", numGlobals, true, true);
00530 }
00531
00532 m_isModified = false;
00533 }
00534
00535 void KURLBar::writeItem( KURLBarItem *item, int i, KConfig *config,
00536 bool global )
00537 {
00538 QString Description = "Description_";
00539 QString URL = "URL_";
00540 QString Icon = "Icon_";
00541 QString IconGroup = "IconGroup_";
00542
00543 QString number = QString::number( i );
00544 config->writeEntry( URL + number, item->url().prettyURL(), true, global );
00545 config->writeEntry( Description + number, item->description(),true,global);
00546 config->writeEntry( Icon + number, item->icon(), true, global );
00547 config->writeEntry( IconGroup + number, item->iconGroup(), true, global );
00548 }
00549
00550
00551 void KURLBar::slotDropped( QDropEvent *e )
00552 {
00553 KURL::List urls;
00554 if ( KURLDrag::decode( e, urls ) ) {
00555 KURL url;
00556 QString description;
00557 QString icon;
00558 bool appLocal = false;
00559
00560 KURL::List::Iterator it = urls.begin();
00561 for ( ; it != urls.end(); ++it ) {
00562 url = *it;
00563 if ( KURLBarItemDialog::getInformation( m_useGlobal,
00564 url, description, icon,
00565 appLocal, m_iconSize,
00566 this ) ) {
00567 (void) insertItem( url, description, appLocal, icon );
00568 m_isModified = true;
00569 updateGeometry();
00570 }
00571 }
00572 }
00573 }
00574
00575 void KURLBar::slotContextMenuRequested( QListBoxItem *item, const QPoint& pos )
00576 {
00577 static const int IconSize = 10;
00578 static const int AddItem = 20;
00579 static const int EditItem = 30;
00580 static const int RemoveItem = 40;
00581
00582 KURL lastURL = m_activeItem ? m_activeItem->url() : KURL();
00583
00584 bool smallIcons = m_iconSize < KIcon::SizeMedium;
00585 QPopupMenu *popup = new QPopupMenu();
00586 popup->insertItem( smallIcons ?
00587 i18n("&Large Icons") : i18n("&Small Icons"),
00588 IconSize );
00589 popup->insertSeparator();
00590 popup->insertItem(SmallIcon("filenew"), i18n("&Add Entry..."), AddItem);
00591 popup->insertItem(SmallIcon("edit"), i18n("&Edit Entry..."), EditItem);
00592 popup->insertSeparator();
00593 popup->insertItem( SmallIcon("editdelete"), i18n("&Remove Entry"),
00594 RemoveItem );
00595
00596 popup->setItemEnabled( EditItem, item != 0L );
00597 popup->setItemEnabled( RemoveItem, item != 0L );
00598
00599 int result = popup->exec( pos );
00600 switch ( result ) {
00601 case IconSize:
00602 setIconSize( smallIcons ? KIcon::SizeMedium : KIcon::SizeSmall );
00603 m_listBox->triggerUpdate( true );
00604 break;
00605 case AddItem:
00606 addNewItem();
00607 break;
00608 case EditItem:
00609 editItem( static_cast<KURLBarItem *>( item ) );
00610 break;
00611 case RemoveItem:
00612 delete item;
00613 m_isModified = true;
00614 break;
00615 default:
00616 break;
00617 }
00618
00619
00620 m_activeItem = 0L;
00621 setCurrentItem( lastURL );
00622 }
00623
00624 bool KURLBar::addNewItem()
00625 {
00626 KURL url;
00627 url.setPath( QDir::homeDirPath() );
00628 KURLBarItem *item = new KURLBarItem( this, url,
00629 i18n("Enter a description") );
00630 if ( editItem( item ) ) {
00631 m_listBox->insertItem( item );
00632 return true;
00633 }
00634
00635 delete item;
00636 return false;
00637 }
00638
00639 bool KURLBar::editItem( KURLBarItem *item )
00640 {
00641 KURL url = item->url();
00642 QString description = item->description();
00643 QString icon = item->icon();
00644 bool appLocal = item->applicationLocal();
00645
00646 if ( KURLBarItemDialog::getInformation( m_useGlobal,
00647 url, description,
00648 icon, appLocal,
00649 m_iconSize, this ))
00650 {
00651 item->setURL( url );
00652 item->setDescription( description );
00653 item->setIcon( icon );
00654 item->setApplicationLocal( appLocal );
00655 m_listBox->triggerUpdate( true );
00656 m_isModified = true;
00657 updateGeometry();
00658 return true;
00659 }
00660
00661 return false;
00662 }
00663
00666
00667
00668 KURLBarListBox::KURLBarListBox( QWidget *parent, const char *name )
00669 : KListBox( parent, name )
00670 {
00671 m_toolTip = new KURLBarToolTip( this );
00672 setAcceptDrops( true );
00673 viewport()->setAcceptDrops( true );
00674 }
00675
00676 KURLBarListBox::~KURLBarListBox()
00677 {
00678 delete m_toolTip;
00679 }
00680
00681 QDragObject * KURLBarListBox::dragObject()
00682 {
00683 KURL::List urls;
00684 KURLBarItem *item = static_cast<KURLBarItem*>( firstItem() );
00685
00686 while ( item ) {
00687 if ( item->isSelected() )
00688 urls.append( item->url() );
00689 item = static_cast<KURLBarItem*>( item->next() );
00690 }
00691
00692 if ( !urls.isEmpty() )
00693 return KURLDrag::newDrag( urls, this, "urlbar drag" );
00694
00695 return 0L;
00696 }
00697
00698 void KURLBarListBox::contentsDragEnterEvent( QDragEnterEvent *e )
00699 {
00700 e->accept( KURLDrag::canDecode( e ));
00701 }
00702
00703 void KURLBarListBox::contentsDropEvent( QDropEvent *e )
00704 {
00705 emit dropped( e );
00706 }
00707
00708 void KURLBarListBox::setOrientation( Qt::Orientation orient )
00709 {
00710 if ( orient == Vertical ) {
00711 setColumnMode( 1 );
00712 setRowMode( Variable );
00713 }
00714 else {
00715 setRowMode( 1 );
00716 setColumnMode( Variable );
00717 }
00718
00719 m_orientation = orient;
00720 }
00721
00724
00725
00726 bool KURLBarItemDialog::getInformation( bool allowGlobal, KURL& url,
00727 QString& description, QString& icon,
00728 bool& appLocal, int iconSize,
00729 QWidget *parent )
00730 {
00731 KURLBarItemDialog *dialog = new KURLBarItemDialog( allowGlobal, url,
00732 description, icon,
00733 appLocal,
00734 iconSize, parent );
00735 if ( dialog->exec() == QDialog::Accepted ) {
00736
00737 url = dialog->url();
00738 description = dialog->description();
00739 icon = dialog->icon();
00740 appLocal = dialog->applicationLocal();
00741
00742 delete dialog;
00743 return true;
00744 }
00745
00746 delete dialog;
00747 return false;
00748 }
00749
00750 KURLBarItemDialog::KURLBarItemDialog( bool allowGlobal, const KURL& url,
00751 const QString& description,
00752 QString icon, bool appLocal,
00753 int iconSize,
00754 QWidget *parent, const char *name )
00755 : KDialogBase( parent, name, true,
00756 i18n("Edit Quick Access Entry"), Ok | Cancel, Ok, true )
00757 {
00758 QVBox *box = new QVBox( this );
00759 QString text = i18n("<qt><b>Please provide a description, URL and icon for this Quick Access entry.</b></br></qt>");
00760 QLabel *label = new QLabel( text, box );
00761 box->setSpacing( spacingHint() );
00762
00763 QGrid *grid = new QGrid( 2, box );
00764 grid->setSpacing( spacingHint() );
00765
00766 QString whatsThisText = i18n("<qt>This is the text that will appear in the Quick Access panel.<p>"
00767 "The description should consist of one or two words "
00768 "that will help you remember what this entry refers to.</qt>");
00769 label = new QLabel( i18n("&Description:"), grid );
00770 m_edit = new KLineEdit( grid, "description edit" );
00771 m_edit->setText( description.isEmpty() ? url.fileName() : description );
00772 label->setBuddy( m_edit );
00773 QWhatsThis::add( label, whatsThisText );
00774 QWhatsThis::add( m_edit, whatsThisText );
00775
00776 whatsThisText = i18n("<qt>This is the location associated with the entry. Any valid URL may be used. For example:<p>"
00777 "%1<br>http://www.kde.org<br>ftp://ftp.kde.org/pub/kde/stable<p>"
00778 "By clicking on the button next to the text edit box you can browse to an "
00779 "appropriate URL.</qt>").arg(QDir::homeDirPath());
00780 label = new QLabel( i18n("&URL:"), grid );
00781 m_urlEdit = new KURLRequester( url.prettyURL(), grid );
00782 m_urlEdit->setMode( KFile::Directory );
00783 label->setBuddy( m_urlEdit );
00784 QWhatsThis::add( label, whatsThisText );
00785 QWhatsThis::add( m_urlEdit, whatsThisText );
00786
00787 whatsThisText = i18n("<qt>This is the icon that will appear in the Quick Access panel.<p>"
00788 "Click on the button to select a different icon.</qt>");
00789 label = new QLabel( i18n("Choose an &icon:"), grid );
00790 m_iconButton = new KIconButton( grid, "icon button" );
00791 m_iconButton->setIconSize( iconSize );
00792 m_iconButton->setStrictIconSize( true );
00793 if ( icon.isEmpty() )
00794 icon = KMimeType::iconForURL( url );
00795 m_iconButton->setIcon( icon );
00796 label->setBuddy( m_iconButton );
00797 QWhatsThis::add( label, whatsThisText );
00798 QWhatsThis::add( m_iconButton, whatsThisText );
00799
00800 if ( allowGlobal ) {
00801 QString appName;
00802 if ( KGlobal::instance()->aboutData() )
00803 appName = KGlobal::instance()->aboutData()->programName();
00804 if ( appName.isEmpty() )
00805 appName = QString::fromLatin1( KGlobal::instance()->instanceName() );
00806 m_appLocal = new QCheckBox( i18n("&Only show when using this application (%1)").arg( appName ), box );
00807 m_appLocal->setChecked( appLocal );
00808 QWhatsThis::add( m_appLocal,
00809 i18n("<qt>Select this setting if you want this "
00810 "entry to show only when using the current application (%1).<p>"
00811 "If this setting is not selected, the entry will be available in all "
00812 "applications.</qt>")
00813 .arg(appName));
00814 }
00815 else
00816 m_appLocal = 0L;
00817 connect(m_urlEdit->lineEdit(),SIGNAL(textChanged ( const QString & )),this,SLOT(urlChanged(const QString & )));
00818 m_edit->setFocus();
00819 setMainWidget( box );
00820 }
00821
00822 KURLBarItemDialog::~KURLBarItemDialog()
00823 {
00824 }
00825
00826 void KURLBarItemDialog::urlChanged(const QString & text )
00827 {
00828 enableButtonOK( !text.isEmpty() );
00829 }
00830
00831 KURL KURLBarItemDialog::url() const
00832 {
00833 QString text = m_urlEdit->url();
00834 KURL u;
00835 if ( text.at(0) == '/' )
00836 u.setPath( text );
00837 else
00838 u = text;
00839
00840 return u;
00841 }
00842
00843 QString KURLBarItemDialog::description() const
00844 {
00845 return m_edit->text();
00846 }
00847
00848 QString KURLBarItemDialog::icon() const
00849 {
00850 return m_iconButton->icon();
00851 }
00852
00853 bool KURLBarItemDialog::applicationLocal() const
00854 {
00855 if ( !m_appLocal )
00856 return true;
00857
00858 return m_appLocal->isChecked();
00859 }
00860
00861 void KURLBarItem::virtual_hook( int, void* )
00862 { }
00863
00864 void KURLBar::virtual_hook( int, void* )
00865 { }
00866
00867 void KURLBarListBox::virtual_hook( int id, void* data )
00868 { KListBox::virtual_hook( id, data ); }
00869
00870
00871 #include "kurlbar.moc"