00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 ;
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 ) {
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
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 { }
00340
00341
#include "kurllabel.moc"