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.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Sep 29 09:40:35 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003