/* 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 <tdeapplication.h> #include <tqregexp.h> #include <tqwhatsthis.h> #include <tqsimplerichtext.h> #include <kdebug.h> KActiveLabel::KActiveLabel(TQWidget * parent, const char * name) : TQTextBrowser(parent, name) { init(); } KActiveLabel::KActiveLabel(const TQString &text, TQWidget * parent, const char * name) : TQTextBrowser(parent, name) { init(); setText(text); } void KActiveLabel::init() { setTextFormat(TQt::RichText); setVScrollBarMode(TQScrollView::AlwaysOff); setHScrollBarMode(TQScrollView::AlwaysOff); setFrameStyle(TQFrame::NoFrame); setFocusPolicy( TQ_TabFocus ); paletteChanged(); connect(this, TQT_SIGNAL(linkClicked(const TQString &)), this, TQT_SLOT(openLink(const TQString &))); if (kapp) { connect(kapp, TQT_SIGNAL(tdedisplayPaletteChanged()), this, TQT_SLOT(paletteChanged())); } } void KActiveLabel::paletteChanged() { TQPalette p = kapp ? kapp->palette() : palette(); p.setBrush(TQColorGroup::Base, p.brush(TQPalette::Normal, TQColorGroup::Background)); p.setColor(TQColorGroup::Text, p.color(TQPalette::Normal, TQColorGroup::Foreground)); setPalette(p); } void KActiveLabel::openLink(const TQString & link) { TQRegExp whatsthis("whatsthis:/*([^/].*)"); if (whatsthis.exactMatch(link)) { TQWhatsThis::display(whatsthis.cap(1)); return; } TQStringList args; args << "exec" << link; kapp->tdeinitExec("kfmclient", args); } void KActiveLabel::virtual_hook( int, void* ) { /*BASE::virtual_hook( id, data );*/ } void KActiveLabel::focusInEvent( TQFocusEvent* fe ) { TQTextBrowser::focusInEvent(fe); if(fe->reason() == TQFocusEvent::Tab || fe->reason() == TQFocusEvent::Backtab) selectAll(true); } void KActiveLabel::focusOutEvent( TQFocusEvent* fe ) { TQTextBrowser::focusOutEvent(fe); if(fe->reason() == TQFocusEvent::Tab || fe->reason() == TQFocusEvent::Backtab) selectAll(false); } void KActiveLabel::keyPressEvent( TQKeyEvent *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 TQWidget::keyPressEvent( e ); break; default: TQTextBrowser::keyPressEvent( e ); } } TQSize KActiveLabel::minimumSizeHint() const { TQSize ms = minimumSize(); if ((ms.width() > 0) && (ms.height() > 0)) return ms; int w = 400; if (ms.width() > 0) w = ms.width(); TQString txt = text(); TQSimpleRichText 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 TQSize(w, h); } TQSize KActiveLabel::sizeHint() const { return minimumSizeHint(); } #include "kactivelabel.moc"