diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch) | |
tree | 5ac38a06f3dde268dc7927dc155896926aaf7012 /kdeui/kactivelabel.cpp | |
download | tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdeui/kactivelabel.cpp')
-rw-r--r-- | kdeui/kactivelabel.cpp | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/kdeui/kactivelabel.cpp b/kdeui/kactivelabel.cpp new file mode 100644 index 000000000..5efdea418 --- /dev/null +++ b/kdeui/kactivelabel.cpp @@ -0,0 +1,142 @@ +/* This file is part of the KDE libraries + Copyright (C) 1999 Waldo Bastian (bastian@kde.org) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + 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 "kactivelabel.h" + +#include <kapplication.h> +#include <qregexp.h> +#include <qwhatsthis.h> +#include <qsimplerichtext.h> +#include <kdebug.h> + +KActiveLabel::KActiveLabel(QWidget * parent, const char * name) + : QTextBrowser(parent, name) +{ + init(); +} + +KActiveLabel::KActiveLabel(const QString &text, QWidget * parent, const char * name) + : QTextBrowser(parent, name) +{ + init(); + setText(text); +} + +void KActiveLabel::init() +{ + setTextFormat(Qt::RichText); + setVScrollBarMode(QScrollView::AlwaysOff); + setHScrollBarMode(QScrollView::AlwaysOff); + setFrameStyle(QFrame::NoFrame); + setFocusPolicy( QWidget::TabFocus ); + paletteChanged(); + + connect(this, SIGNAL(linkClicked(const QString &)), + this, SLOT(openLink(const QString &))); + if (kapp) + { + connect(kapp, SIGNAL(kdisplayPaletteChanged()), + this, SLOT(paletteChanged())); + } +} + +void KActiveLabel::paletteChanged() +{ + QPalette p = kapp ? kapp->palette() : palette(); + p.setBrush(QColorGroup::Base, p.brush(QPalette::Normal, QColorGroup::Background)); + p.setColor(QColorGroup::Text, p.color(QPalette::Normal, QColorGroup::Foreground)); + setPalette(p); +} + +void KActiveLabel::openLink(const QString & link) +{ + QRegExp whatsthis("whatsthis:/*([^/].*)"); + if (whatsthis.exactMatch(link)) { + QWhatsThis::display(whatsthis.cap(1)); + return; + } + + QStringList args; + args << "exec" << link; + kapp->kdeinitExec("kfmclient", args); +} + +void KActiveLabel::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +void KActiveLabel::focusInEvent( QFocusEvent* fe ) +{ + QTextBrowser::focusInEvent(fe); + if(fe->reason() == QFocusEvent::Tab || fe->reason() == QFocusEvent::Backtab) + selectAll(true); +} + +void KActiveLabel::focusOutEvent( QFocusEvent* fe ) +{ + QTextBrowser::focusOutEvent(fe); + if(fe->reason() == QFocusEvent::Tab || fe->reason() == QFocusEvent::Backtab) + selectAll(false); +} + +void KActiveLabel::keyPressEvent( QKeyEvent *e ) +{ + switch ( e->key() ) + { + case Key_Down: + case Key_Up: + case Key_Left: + case Key_Right: + // jump over QTextEdit's key navigation breakage. + // we're not interested in keyboard navigation within the text + QWidget::keyPressEvent( e ); + break; + default: + QTextBrowser::keyPressEvent( e ); + } +} + +QSize KActiveLabel::minimumSizeHint() const +{ + QSize ms = minimumSize(); + if ((ms.width() > 0) && (ms.height() > 0)) + return ms; + + int w = 400; + if (ms.width() > 0) + w = ms.width(); + + QString txt = text(); + QSimpleRichText rt(txt, font()); + rt.setWidth(w - 2*frameWidth() - 10); + w = 10 + rt.widthUsed() + 2*frameWidth(); + if (w < ms.width()) + w = ms.width(); + int h = rt.height() + 2*frameWidth(); + if ( h < ms.height()) + h = ms.height(); + + return QSize(w, h); +} + +QSize KActiveLabel::sizeHint() const +{ + return minimumSizeHint(); +} + +#include "kactivelabel.moc" |