diff options
author | Timothy Pearson <[email protected]> | 2011-11-06 15:56:40 -0600 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2011-11-06 15:56:40 -0600 |
commit | e16866e072f94410321d70daedbcb855ea878cac (patch) | |
tree | ee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /tdeui/kurllabel.cpp | |
parent | a58c20c1a7593631a1b50213c805507ebc16adaf (diff) | |
download | tdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip |
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'tdeui/kurllabel.cpp')
-rw-r--r-- | tdeui/kurllabel.cpp | 450 |
1 files changed, 450 insertions, 0 deletions
diff --git a/tdeui/kurllabel.cpp b/tdeui/kurllabel.cpp new file mode 100644 index 000000000..9846059ed --- /dev/null +++ b/tdeui/kurllabel.cpp @@ -0,0 +1,450 @@ +/* This file is part of the KDE libraries + Copyright (C) 1998 Kurt Granroth <[email protected]> + Copyright (C) 2000 Peter Putzer <[email protected]> + Copyright (C) 2005 Jaroslaw Staniek <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <tqcolor.h> +#include <tqtimer.h> +#include <tqtooltip.h> +#include <tqpixmap.h> +#include <tqpainter.h> +#include <tqstyle.h> +#include <tqapplication.h> + +#include <kcursor.h> +#include <kglobalsettings.h> + +#include "kurllabel.h" + +class KURLLabel::Private +{ +public: + Private (const TQString& url, KURLLabel* label) + : URL (url), + LinkColor (KGlobalSettings::linkColor()), + HighlightedLinkColor (Qt::red), + Tip(url), + Cursor (0L), + Underline (true), + UseTips (false), + Glow (true), + Float (false), + RealUnderline (true), + MousePressed(false), + WasInsideRect(false), + MarginAltered(false), + Timer (new TQTimer (label)) + { + connect (Timer, TQT_SIGNAL (timeout ()), label, TQT_SLOT (updateColor ())); + } + + ~Private () + { + delete Cursor; + } + + TQString URL; + TQPixmap AltPixmap; + + TQColor LinkColor; + TQColor HighlightedLinkColor; + + TQString Tip; + TQCursor* Cursor; + bool Underline:1; + bool UseTips:1; + bool Glow:1; + bool Float:1; + bool RealUnderline:1; + bool MousePressed:1; + bool WasInsideRect:1; + bool MarginAltered:1; + TQPixmap RealPixmap; + + TQTimer* Timer; +}; + +KURLLabel::KURLLabel (const TQString& url, const TQString& text, + TQWidget* parent, const char* name) + : TQLabel (!text.isNull() ? text : url, parent, name), + d (new Private (url, this)) +{ + setFont (font()); + setUseCursor (true); + setLinkColor (d->LinkColor); + setFocusPolicy( TQ_StrongFocus ); //better accessibility + setMouseTracking (true); +} + +KURLLabel::KURLLabel (TQWidget* parent, const char* name) + : TQLabel (parent, name), + d (new Private (TQString::null, this)) +{ + setFont (font()); + setUseCursor (true); + setLinkColor (d->LinkColor); + setFocusPolicy( TQ_StrongFocus ); //better accessibility + setMouseTracking (true); +} + +KURLLabel::~KURLLabel () +{ + delete d; +} + +void KURLLabel::mouseReleaseEvent (TQMouseEvent* e) +{ + TQLabel::mouseReleaseEvent (e); + if (!d->MousePressed) + return; + d->MousePressed = false; + TQRect r( activeRect() ); + if (!r.contains(e->pos())) + return; + + setLinkColor (d->HighlightedLinkColor); + d->Timer->start (300); + + switch (e->button()) + { + case Qt::LeftButton: + emit leftClickedURL (); + emit leftClickedURL (d->URL); + break; + + case Qt::MidButton: + emit middleClickedURL (); + emit middleClickedURL (d->URL); + break; + + case Qt::RightButton: + emit rightClickedURL (); + emit rightClickedURL (d->URL); + break; + + default: + ; // nothing + } +} + +void KURLLabel::setFont (const TQFont& f) +{ + TQFont newFont = f; + newFont.setUnderline (d->Underline); + + TQLabel::setFont (newFont); +} + +void KURLLabel::setUnderline (bool on) +{ + d->Underline = on; + + setFont (font()); +} + +void KURLLabel::updateColor () +{ + d->Timer->stop(); + + TQRect r( activeRect() ); + if (!(d->Glow || d->Float) || !r.contains (mapFromGlobal(TQCursor::pos()))) + setLinkColor (d->LinkColor); +} + +void KURLLabel::setLinkColor (const TQColor& col) +{ + TQPalette p = palette(); + p.setColor (TQColorGroup::Foreground, col); + setPalette (p); + + update(); +} + +void KURLLabel::setURL (const TQString& url) +{ + if ( d->Tip == d->URL ) { // update the tip as well + d->Tip = url; + setUseTips( d->UseTips ); + } + + d->URL = url; +} + +const TQString& KURLLabel::url () const +{ + return d->URL; +} + +void KURLLabel::unsetCursor () +{ + delete d->Cursor; + d->Cursor = 0; +} + +void KURLLabel::setCursor ( const TQCursor& cursor ) +{ + delete d->Cursor; + d->Cursor = new TQCursor( cursor ); +} + +void KURLLabel::setUseCursor (bool on, TQCursor* cursor) +{ + if (on) + { + if (cursor) + KURLLabel::setCursor (*cursor); + else + KURLLabel::setCursor (KCursor::handCursor()); + } + else + KURLLabel::unsetCursor (); +} + +bool KURLLabel::useCursor () const +{ + return d->Cursor; +} + +void KURLLabel::setUseTips (bool on) +{ + d->UseTips = on; + + if (on) { + TQToolTip::add (this, activeRect(), d->Tip); + } else + TQToolTip::remove (this); +} + +void KURLLabel::setTipText (const TQString& tip) +{ + d->Tip = tip; + + setUseTips (d->UseTips); +} + +bool KURLLabel::useTips () const +{ + return d->UseTips; +} + +const TQString& KURLLabel::tipText () const +{ + return d->Tip; +} + +void KURLLabel::setHighlightedColor (const TQColor& highcolor) +{ + d->LinkColor = highcolor; + + if (!d->Timer->isActive()) + setLinkColor (highcolor); +} + +void KURLLabel::setHighlightedColor (const TQString& highcolor) +{ + setHighlightedColor (TQColor (highcolor)); +} + +void KURLLabel::setSelectedColor (const TQColor& selcolor) +{ + d->HighlightedLinkColor = selcolor; + + if (d->Timer->isActive()) + setLinkColor (selcolor); +} + +void KURLLabel::setSelectedColor (const TQString& selcolor) +{ + setSelectedColor (TQColor (selcolor)); +} + +void KURLLabel::setGlow (bool glow) +{ + d->Glow = glow; +} + +void KURLLabel::setFloat (bool do_float) +{ + d->Float = do_float; +} + +bool KURLLabel::isGlowEnabled () const +{ + return d->Glow; +} + +bool KURLLabel::isFloatEnabled () const +{ + return d->Float; +} + +void KURLLabel::setAltPixmap (const TQPixmap& altPix) +{ + d->AltPixmap = altPix; +} + +const TQPixmap* KURLLabel::altPixmap () const +{ + return &d->AltPixmap; +} + +void KURLLabel::enterEvent (TQEvent* e) +{ + TQLabel::enterEvent (e); + + TQRect r( activeRect() ); + if (!r.contains( TQT_TQMOUSEEVENT(e)->pos() )) + return; + + if (!d->AltPixmap.isNull() && pixmap()) + { + d->RealPixmap = *pixmap(); + setPixmap (d->AltPixmap); + } + + if (d->Glow || d->Float) + { + d->Timer->stop(); + + setLinkColor (d->HighlightedLinkColor); + + d->RealUnderline = d->Underline; + + if (d->Float) + setUnderline (true); + } + + emit enteredURL (); + emit enteredURL (d->URL); +} + +void KURLLabel::leaveEvent (TQEvent* e) +{ + TQLabel::leaveEvent (e); + + if (!d->AltPixmap.isNull() && pixmap()) + setPixmap (d->RealPixmap); + + if ((d->Glow || d->Float) && !d->Timer->isActive()) + setLinkColor (d->LinkColor); + + setUnderline (d->RealUnderline); + + emit leftURL (); + emit leftURL (d->URL); +} + +bool KURLLabel::event (TQEvent *e) +{ + if (e && e->type() == TQEvent::ParentPaletteChange) + { + // use parentWidget() unless you are a toplevel widget, then try qAapp + TQPalette p = parentWidget() ? parentWidget()->palette() : tqApp->palette(); + p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background)); + p.setColor(TQColorGroup::Foreground, tqpalette().active().foreground()); + setPalette(p); + d->LinkColor = KGlobalSettings::linkColor(); + setLinkColor(d->LinkColor); + return true; + } + else if (e->type() == TQEvent::Paint) { + const bool result = TQLabel::event(e); + if (result && hasFocus()) { + TQPainter p(this); + TQRect r( activeRect() ); + tqstyle().tqdrawPrimitive( TQStyle::PE_FocusRect, &p, r, tqcolorGroup() ); + } + return result; + } + else if (e->type() == TQEvent::KeyPress) { + TQKeyEvent* ke = TQT_TQKEYEVENT(e); + if (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return) { + setLinkColor (d->HighlightedLinkColor); + d->Timer->start (300); + emit leftClickedURL (); + emit leftClickedURL (d->URL); + ke->accept(); + return true; + } + } + else if (e->type() == TQEvent::MouseButtonPress) { + TQRect r( activeRect() ); + d->MousePressed = r.contains(TQT_TQMOUSEEVENT(e)->pos()); + } + else if (e->type() == TQEvent::MouseMove) { + if (d->Cursor) { + TQRect r( activeRect() ); + bool inside = r.contains(TQT_TQMOUSEEVENT(e)->pos()); + if (d->WasInsideRect != inside) { + if (inside) + TQLabel::setCursor(*d->Cursor); + else + TQLabel::unsetCursor(); + d->WasInsideRect = inside; + } + } + } + return TQLabel::event(e); +} + +TQRect KURLLabel::activeRect() const +{ + TQRect r( contentsRect() ); + if (text().isEmpty() || (!d->MarginAltered && sizePolicy() == TQSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed))) + return r; //fixed size is sometimes used with pixmap + int hAlign = TQApplication::horizontalAlignment( tqalignment() ); + int indentX = (hAlign && indent()>0) ? indent() : 0; + TQFontMetrics fm(font()); + r.setWidth( QMIN(fm.width(text()), r.width())); + if ( hAlign & AlignLeft ) + r.moveLeft(r.left() + indentX); + if ( hAlign & AlignCenter ) + r.moveLeft((contentsRect().width()-r.width())/2+margin()); + if ( hAlign & AlignRight ) + r.moveLeft(contentsRect().width()-r.width()-indentX+margin()); + int add = QMIN(3, margin()); + r = TQRect(r.left()-add, r.top()-add, r.width()+2*add, r.height()+2*add); + return r; +} + +void KURLLabel::setMargin( int margin ) +{ + TQLabel::setMargin(margin); + d->MarginAltered = true; +} + +void KURLLabel::setFocusPolicy( TQ_FocusPolicy policy ) +{ + TQLabel::setFocusPolicy(policy); + if (!d->MarginAltered) { + TQLabel::setMargin(policy == TQ_NoFocus ? 0 : 3); //better default : better look when focused + } +} + +void KURLLabel::tqsetSizePolicy ( TQSizePolicy policy ) +{ + TQLabel::tqsetSizePolicy(policy); + if (!d->MarginAltered && policy.horData()==TQSizePolicy::Fixed && policy.verData()==TQSizePolicy::Fixed) { + TQLabel::setMargin(0); //better default : better look when fixed size + } +} + +void KURLLabel::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +#include "kurllabel.moc" |