• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

KDEUI

kurllabel.cpp

Go to the documentation of this file.
00001 // Copyright (C) 2000 Peter Putzer
00002 
00003 // This library is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU Lesser General Public
00005 // License as published by the Free Software Foundation; either
00006 // version 2.1 of the License, or (at your option) any later version.
00007 
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // Lesser General Public License for more details.
00012 
00013 // You should have received a copy of the GNU Lesser General Public
00014 // License along with this library; if not, write to the Free Software
00015 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00016 // 02110-1301  USA
00017 
00018 #include "kurllabel.h"
00019 
00020 #include <QtCore/QTimer>
00021 #include <QtGui/QApplication>
00022 #include <QtGui/QMouseEvent>
00023 
00024 #include <kcursor.h>
00025 #include <kcolorscheme.h>
00026 
00027 class KUrlLabel::Private
00028 {
00029   public:
00030     Private( const QString& _url, KUrlLabel* _parent )
00031       : parent( _parent ),
00032         url( _url ),
00033         tipText( url ),
00034         linkColor( KColorScheme(QPalette::Active, KColorScheme::Window).foreground(KColorScheme::LinkText).color() ),
00035         highlightedLinkColor( KColorScheme(QPalette::Active, KColorScheme::Window).foreground(KColorScheme::ActiveText).color() ),
00036         cursor( 0 ),
00037         textUnderlined( true ),
00038         realUnderlined( true ),
00039         useTips( false ),
00040         useCursor( false ),
00041         glowEnabled( true ),
00042         floatEnabled( false ),
00043         timer( new QTimer( parent ) )
00044     {
00045       connect( timer, SIGNAL( timeout() ), parent, SLOT( updateColor() ) );
00046     }
00047 
00048     ~Private ()
00049     {
00050     }
00051 
00052     void updateColor()
00053     {
00054       timer->stop();
00055 
00056       if ( !(glowEnabled || floatEnabled) || !parent->rect().contains( parent->mapFromGlobal( QCursor::pos() ) ) )
00057         setLinkColor( linkColor );
00058     }
00059 
00060     void setLinkColor( const QColor& color )
00061     {
00062       QPalette palette = parent->palette();
00063       palette.setColor( QPalette::WindowText, color );
00064       parent->setPalette( palette );
00065 
00066       parent->update();
00067     }
00068 
00069 
00070     KUrlLabel *parent;
00071 
00072     QString url;
00073     QString tipText;
00074     QColor linkColor;
00075     QColor highlightedLinkColor;
00076     QCursor* cursor;
00077     bool textUnderlined : 1;
00078     bool realUnderlined : 1;
00079     bool useTips : 1;
00080     bool useCursor : 1;
00081     bool glowEnabled : 1;
00082     bool floatEnabled : 1;
00083     QPixmap alternatePixmap;
00084     QPixmap realPixmap;
00085     QTimer* timer;
00086 };
00087 
00088 KUrlLabel::KUrlLabel( const QString& url, const QString& text, QWidget* parent )
00089   : QLabel( !text.isNull() ? text : url, parent ),
00090     d( new Private( url, this ) )
00091 {
00092   setFont( font() );
00093   setCursor( QCursor( Qt::PointingHandCursor ) );
00094   d->setLinkColor( d->linkColor );
00095 }
00096 
00097 KUrlLabel::KUrlLabel( QWidget* parent )
00098   : QLabel( parent ),
00099     d( new Private( QString(), this ) )
00100 {
00101   setFont( font() );
00102   setCursor( QCursor( Qt::PointingHandCursor ) );
00103   d->setLinkColor( d->linkColor );
00104 }
00105 
00106 KUrlLabel::~KUrlLabel()
00107 {
00108   delete d;
00109 }
00110 
00111 void KUrlLabel::mouseReleaseEvent( QMouseEvent* event )
00112 {
00113   QLabel::mouseReleaseEvent( event );
00114 
00115   d->setLinkColor( d->highlightedLinkColor );
00116   d->timer->start( 300 );
00117 
00118   switch ( event->button() ) {
00119     case Qt::LeftButton:
00120       emit leftClickedUrl();
00121       emit leftClickedUrl( d->url );
00122       break;
00123 
00124     case Qt::MidButton:
00125       emit middleClickedUrl();
00126       emit middleClickedUrl( d->url );
00127       break;
00128 
00129     case Qt::RightButton:
00130       emit rightClickedUrl();
00131       emit rightClickedUrl( d->url );
00132       break;
00133 
00134     default:
00135       break;
00136   }
00137 }
00138 
00139 void KUrlLabel::setFont( const QFont& font )
00140 {
00141   QFont newFont = font;
00142   newFont.setUnderline( d->textUnderlined );
00143 
00144   QLabel::setFont( newFont );
00145 }
00146 
00147 void KUrlLabel::setUnderline( bool on )
00148 {
00149   d->textUnderlined = on;
00150 
00151   setFont( font() );
00152 }
00153 
00154 void KUrlLabel::setUrl( const QString& url )
00155 {
00156   if ( d->tipText == d->url ) { // update the tip as well
00157     d->tipText = url;
00158     setUseTips( d->useTips );
00159   }
00160 
00161   d->url = url;
00162 }
00163 
00164 QString KUrlLabel::url() const
00165 {
00166   return d->url;
00167 }
00168 
00169 void KUrlLabel::setUseCursor( bool on, QCursor* cursor )
00170 {
00171   d->useCursor = on;
00172   d->cursor = cursor;
00173 
00174   if ( on ) {
00175     if ( cursor ) {
00176         setCursor( *cursor );
00177     } else {
00178         setCursor( QCursor( Qt::PointingHandCursor ) );
00179     }
00180   } else
00181     unsetCursor();
00182 }
00183 
00184 bool KUrlLabel::useCursor() const
00185 {
00186   return d->useCursor;
00187 }
00188 
00189 void KUrlLabel::setUseTips( bool on )
00190 {
00191   d->useTips = on;
00192 
00193   if ( on )
00194     setToolTip( d->tipText );
00195   else
00196     setToolTip( QString() );
00197 }
00198 
00199 void KUrlLabel::setTipText( const QString& tipText )
00200 {
00201   d->tipText = tipText;
00202 
00203   setUseTips( d->useTips );
00204 }
00205 
00206 bool KUrlLabel::useTips() const
00207 {
00208   return d->useTips;
00209 }
00210 
00211 QString KUrlLabel::tipText() const
00212 {
00213   return d->tipText;
00214 }
00215 
00216 void KUrlLabel::setHighlightedColor( const QColor& color )
00217 {
00218   d->linkColor = color;
00219 
00220   if ( !d->timer->isActive() )
00221     d->setLinkColor( color );
00222 }
00223 
00224 void KUrlLabel::setHighlightedColor( const QString& color )
00225 {
00226   setHighlightedColor( QColor( color ) );
00227 }
00228 
00229 void KUrlLabel::setSelectedColor( const QColor& color )
00230 {
00231   d->highlightedLinkColor = color;
00232 
00233   if ( d->timer->isActive() )
00234     d->setLinkColor( color );
00235 }
00236 
00237 void KUrlLabel::setSelectedColor( const QString& color )
00238 {
00239   setSelectedColor( QColor( color ) );
00240 }
00241 
00242 void KUrlLabel::setGlowEnabled( bool glowEnabled )
00243 {
00244   d->glowEnabled = glowEnabled;
00245 }
00246 
00247 void KUrlLabel::setFloatEnabled( bool floatEnabled )
00248 {
00249   d->floatEnabled = floatEnabled;
00250 }
00251 
00252 bool KUrlLabel::isGlowEnabled() const
00253 {
00254   return d->glowEnabled;
00255 }
00256 
00257 bool KUrlLabel::isFloatEnabled() const
00258 {
00259   return d->floatEnabled;
00260 }
00261 
00262 void KUrlLabel::setAlternatePixmap( const QPixmap& pixmap )
00263 {
00264   d->alternatePixmap = pixmap;
00265 }
00266 
00267 const QPixmap* KUrlLabel::alternatePixmap() const
00268 {
00269   return &d->alternatePixmap;
00270 }
00271 
00272 void KUrlLabel::enterEvent( QEvent* event )
00273 {
00274   QLabel::enterEvent( event );
00275 
00276   if ( !d->alternatePixmap.isNull() && pixmap() ) {
00277     d->realPixmap = *pixmap();
00278     setPixmap( d->alternatePixmap );
00279   }
00280 
00281   if ( d->glowEnabled || d->floatEnabled ) {
00282     d->timer->stop();
00283 
00284     d->setLinkColor( d->highlightedLinkColor );
00285 
00286     d->realUnderlined = d->textUnderlined;
00287 
00288     if ( d->floatEnabled )
00289       setUnderline( true );
00290   }
00291 
00292   emit enteredUrl();
00293   emit enteredUrl( d->url );
00294 }
00295 
00296 void KUrlLabel::leaveEvent( QEvent* event )
00297 {
00298   QLabel::leaveEvent( event );
00299 
00300   if ( !d->alternatePixmap.isNull() && pixmap() )
00301     setPixmap( d->realPixmap );
00302 
00303   if ( (d->glowEnabled || d->floatEnabled) && !d->timer->isActive() )
00304     d->setLinkColor( d->linkColor );
00305 
00306   setUnderline( d->realUnderlined );
00307 
00308   emit leftUrl();
00309   emit leftUrl( d->url );
00310 }
00311 
00312 bool KUrlLabel::event( QEvent *event )
00313 {
00314   if ( event->type() == QEvent::PaletteChange ) {
00318     QPalette palette = parentWidget() ? parentWidget()->palette() : qApp->palette();
00319 
00320     palette.setBrush( QPalette::Base, palette.brush( QPalette::Normal, QPalette::Background ) );
00321     palette.setColor( QPalette::Foreground, this->palette().color( QPalette::Active, QPalette::Foreground ) );
00322     setPalette( palette );
00323 
00324     d->linkColor = KColorScheme(QPalette::Active, KColorScheme::Window).foreground(KColorScheme::LinkText).color();
00325     d->updateColor();
00326 
00327     return true;
00328   } else
00329     return QLabel::event( event );
00330 }
00331 
00332 #include "kurllabel.moc"

KDEUI

Skip menu "KDEUI"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal