summaryrefslogtreecommitdiffstats
path: root/kdeui/kactivelabel.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kdeui/kactivelabel.cpp
downloadtdelibs-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.cpp142
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"