kdeui Library API Documentation

kurllabel.cpp

00001 // kurllabel.cpp
00002 
00003 // Copyright (C) 2000 Peter Putzer
00004 
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018 // 02111-1307  USA
00019 
00020 #include <qcolor.h>
00021 #include <qtimer.h>
00022 #include <qtooltip.h>
00023 #include <qpixmap.h>
00024 #include <qapplication.h>
00025 
00026 #include <kcursor.h>
00027 #include <kglobalsettings.h>
00028 
00029 #include "kurllabel.h"
00030 
00031 class KURLLabel::Private
00032 {
00033 public:
00034   Private (const QString& url, KURLLabel* label)
00035     : URL (url),
00036       Underline (true),
00037       LinkColor (KGlobalSettings::linkColor()),
00038       HighlightedLinkColor (Qt::red),
00039       Tip(url),
00040       Cursor (0L),
00041       UseTips (false),
00042       UseCursor (false),
00043       Glow (true),
00044       Float (false),
00045       RealUnderline (true),
00046       Timer (new QTimer (label))
00047   {
00048     connect (Timer, SIGNAL (timeout ()), label, SLOT (updateColor ()));
00049   }
00050 
00051   ~Private ()
00052   {
00053   }
00054 
00055   QString URL;
00056   QPixmap AltPixmap;
00057 
00058   bool Underline;
00059   QColor LinkColor;
00060   QColor HighlightedLinkColor;
00061 
00062   QString Tip;
00063   QCursor* Cursor;
00064   bool UseTips:1;
00065   bool UseCursor:1;
00066   bool Glow:1;
00067   bool Float:1;
00068   bool RealUnderline:1;
00069   QPixmap RealPixmap;
00070 
00071   QTimer* Timer;
00072 };
00073 
00074 KURLLabel::KURLLabel (const QString& url, const QString& text,
00075                         QWidget* parent, const char* name)
00076   : QLabel (!text.isNull() ? text : url, parent, name),
00077     d (new Private (url, this))
00078 {
00079   setFont (font());
00080   setCursor (KCursor::handCursor());
00081   setLinkColor (d->LinkColor);
00082 }
00083 
00084 KURLLabel::KURLLabel (QWidget* parent, const char* name)
00085   : QLabel (parent, name),
00086     d (new Private (QString::null, this))
00087 {
00088   setFont (font());
00089   setCursor (KCursor::handCursor());
00090   setLinkColor (d->LinkColor);
00091 }
00092 
00093 KURLLabel::~KURLLabel ()
00094 {
00095   delete d;
00096 }
00097 
00098 void KURLLabel::mouseReleaseEvent (QMouseEvent* e)
00099 {
00100   QLabel::mouseReleaseEvent (e);
00101 
00102   setLinkColor (d->HighlightedLinkColor);
00103   d->Timer->start (300);
00104 
00105   switch (e->button())
00106     {
00107     case LeftButton:
00108       emit leftClickedURL ();
00109       emit leftClickedURL (d->URL);
00110       break;
00111 
00112     case MidButton:
00113       emit middleClickedURL ();
00114       emit middleClickedURL (d->URL);
00115       break;
00116 
00117     case RightButton:
00118       emit rightClickedURL ();
00119       emit rightClickedURL (d->URL);
00120       break;
00121 
00122     default:
00123       ; // nothing
00124     }
00125 }
00126 
00127 void KURLLabel::setFont (const QFont& f)
00128 {
00129   QFont newFont = f;
00130   newFont.setUnderline (d->Underline);
00131 
00132   QLabel::setFont (newFont);
00133 }
00134 
00135 void KURLLabel::setUnderline (bool on)
00136 {
00137   d->Underline = on;
00138 
00139   setFont (font());
00140 }
00141 
00142 void KURLLabel::updateColor ()
00143 {
00144   d->Timer->stop();
00145 
00146   if (!(d->Glow || d->Float) || !rect().contains (mapFromGlobal(QCursor::pos())))
00147     setLinkColor (d->LinkColor);
00148 }
00149 
00150 void KURLLabel::setLinkColor (const QColor& col)
00151 {
00152   QPalette p = palette();
00153   p.setColor (QColorGroup::Foreground, col);
00154   setPalette (p);
00155 
00156   update();
00157 }
00158 
00159 void KURLLabel::setURL (const QString& url)
00160 {
00161   if ( d->Tip == d->URL ) { // update the tip as well
00162     d->Tip = url;
00163     setUseTips( d->UseTips );
00164   }
00165 
00166   d->URL = url;
00167 }
00168 
00169 const QString& KURLLabel::url () const
00170 {
00171   return d->URL;
00172 }
00173 
00174 void KURLLabel::setUseCursor (bool on, QCursor* cursor)
00175 {
00176   d->UseCursor = on;
00177   d->Cursor = cursor;
00178 
00179   if (on)
00180     {
00181       if (cursor)
00182         setCursor (*cursor);
00183       else
00184         setCursor (KCursor::handCursor());
00185     }
00186   else
00187     unsetCursor();
00188 }
00189 
00190 bool KURLLabel::useCursor () const
00191 {
00192   return d->UseCursor;
00193 }
00194 
00195 void KURLLabel::setUseTips (bool on)
00196 {
00197   d->UseTips = on;
00198 
00199   if (on)
00200     QToolTip::add (this, d->Tip);
00201   else
00202     QToolTip::remove (this);
00203 }
00204 
00205 void KURLLabel::setTipText (const QString& tip)
00206 {
00207   d->Tip = tip;
00208 
00209   setUseTips (d->UseTips);
00210 }
00211 
00212 bool KURLLabel::useTips () const
00213 {
00214   return d->UseTips;
00215 }
00216 
00217 const QString& KURLLabel::tipText () const
00218 {
00219   return d->Tip;
00220 }
00221 
00222 void KURLLabel::setHighlightedColor (const QColor& highcolor)
00223 {
00224   d->LinkColor = highcolor;
00225 
00226   if (!d->Timer->isActive())
00227     setLinkColor (highcolor);
00228 }
00229 
00230 void KURLLabel::setHighlightedColor (const QString& highcolor)
00231 {
00232   setHighlightedColor (QColor (highcolor));
00233 }
00234 
00235 void KURLLabel::setSelectedColor (const QColor& selcolor)
00236 {
00237   d->HighlightedLinkColor = selcolor;
00238 
00239   if (d->Timer->isActive())
00240     setLinkColor (selcolor);
00241 }
00242 
00243 void KURLLabel::setSelectedColor (const QString& selcolor)
00244 {
00245   setSelectedColor (QColor (selcolor));
00246 }
00247 
00248 void KURLLabel::setGlow (bool glow)
00249 {
00250   d->Glow = glow;
00251 }
00252 
00253 void KURLLabel::setFloat (bool do_float)
00254 {
00255   d->Float = do_float;
00256 }
00257 
00258 bool KURLLabel::isGlowEnabled () const
00259 {
00260   return d->Glow;
00261 }
00262 
00263 bool KURLLabel::isFloatEnabled () const
00264 {
00265   return d->Float;
00266 }
00267 
00268 void KURLLabel::setAltPixmap (const QPixmap& altPix)
00269 {
00270   d->AltPixmap = altPix;
00271 }
00272 
00273 const QPixmap* KURLLabel::altPixmap () const
00274 {
00275   return &d->AltPixmap;
00276 }
00277 
00278 void KURLLabel::enterEvent (QEvent* e)
00279 {
00280   QLabel::enterEvent (e);
00281 
00282   if (!d->AltPixmap.isNull() && pixmap())
00283     {
00284       d->RealPixmap = *pixmap();
00285       setPixmap (d->AltPixmap);
00286     }
00287 
00288   if (d->Glow || d->Float)
00289     {
00290       d->Timer->stop();
00291 
00292       setLinkColor (d->HighlightedLinkColor);
00293 
00294       d->RealUnderline = d->Underline;
00295 
00296       if (d->Float)
00297         setUnderline (true);
00298     }
00299 
00300   emit enteredURL ();
00301   emit enteredURL (d->URL);
00302 }
00303 
00304 void KURLLabel::leaveEvent (QEvent* e)
00305 {
00306   QLabel::leaveEvent (e);
00307 
00308   if (!d->AltPixmap.isNull() && pixmap())
00309     setPixmap (d->RealPixmap);
00310 
00311   if ((d->Glow || d->Float) && !d->Timer->isActive())
00312     setLinkColor (d->LinkColor);
00313 
00314   setUnderline (d->RealUnderline);
00315 
00316   emit leftURL ();
00317   emit leftURL (d->URL);
00318 }
00319 
00320 bool KURLLabel::event (QEvent *e)
00321 {
00322   if (e && e->type() == QEvent::ParentPaletteChange)
00323   {
00324     // use parentWidget() unless you are a toplevel widget, then try qAapp
00325     QPalette p = parentWidget() ? parentWidget()->palette() : qApp->palette();
00326     p.setBrush(QColorGroup::Base, p.brush(QPalette::Normal, QColorGroup::Background));
00327     p.setColor(QColorGroup::Foreground, palette().active().foreground());
00328     setPalette(p);
00329     d->LinkColor = KGlobalSettings::linkColor();
00330     setLinkColor(d->LinkColor);
00331     return true;
00332   }
00333   else
00334     return QLabel::event(e);  
00335 }
00336 
00337 
00338 void KURLLabel::virtual_hook( int, void* )
00339 { /*BASE::virtual_hook( id, data );*/ }
00340 
00341 #include "kurllabel.moc"
KDE Logo
This file is part of the documentation for kdeui Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Jul 21 13:14:04 2006 by doxygen 1.4.0 written by Dimitri van Heesch, © 1997-2003