1 /*---------------------------------------------------------------------\
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
11 \----------------------------------------------------------------------/
15 Author: Stefan Hundhammer <sh@suse.de>
19 #define y2log_component "qt-ui"
20 #include <ycp/y2log.h>
22 #include <QColorGroup>
26 #include <QVBoxLayout>
32 #include "YQRichText.h"
35 YQRichText::YQRichText( YWidget * parent, const string & text, bool plainTextMode )
36 : QFrame( (QWidget *) parent->widgetRep() )
37 , YRichText( parent, text, plainTextMode )
39 QVBoxLayout* layout = new QVBoxLayout( this );
40 layout->setSpacing( 0 );
45 layout->setMargin( YQWidgetMargin );
47 _textBrowser = new YQTextBrowser( this );
48 YUI_CHECK_NEW( _textBrowser );
49 layout->addWidget( _textBrowser );
51 _textBrowser->installEventFilter( this );
55 _textBrowser->setPlainText(QString::fromUtf8(text.c_str()));
56 _textBrowser->setWordWrapMode( QTextOption::NoWrap );
60 _textBrowser->setHtml(QString::fromUtf8(text.c_str()));
63 // Set the text foreground color to black, regardless of its current
64 // settings - it might be changed if this widget resides in a
65 // warnColor dialog - which we cannot find right now out since our
66 // parent is not set yet :-(
68 QPalette pal( _textBrowser->palette() );
69 pal.setColor( QPalette::Text, Qt::black );
70 pal.setCurrentColorGroup( QPalette::Normal );
71 _textBrowser->setPalette( pal );
74 // Propagate clicks on hyperlinks
76 connect( _textBrowser, SIGNAL( anchorClicked( const QUrl & ) ),
77 this, SLOT ( linkClicked ( const QUrl & ) ) );
81 YQRichText::~YQRichText()
87 void YQRichText::setValue( const string & newText )
89 if ( _textBrowser->horizontalScrollBar() )
90 _textBrowser->horizontalScrollBar()->setValue(0);
92 if ( ! autoScrollDown() && _textBrowser->verticalScrollBar() )
93 _textBrowser->verticalScrollBar()->setValue(0);
95 QString text = fromUTF8( newText );
97 if ( ! plainTextMode() )
99 text.replace( "&product;", YQUI::ui()->productName() );
100 _textBrowser->setHtml( text );
104 _textBrowser->setPlainText( text );
106 YRichText::setValue( newText );
108 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
109 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
113 void YQRichText::setPlainTextMode( bool newPlainTextMode )
115 YRichText::setPlainTextMode( newPlainTextMode );
117 if ( plainTextMode() )
119 _textBrowser->setWordWrapMode( QTextOption::NoWrap );
124 void YQRichText::setAutoScrollDown( bool newAutoScrollDown )
126 YRichText::setAutoScrollDown( newAutoScrollDown );
128 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
129 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
133 void YQRichText::linkClicked( const QUrl & url )
135 // y2debug( "Selected hyperlink \"%s\"", (const char *) url );
136 YQUI::ui()->sendEvent( new YMenuEvent(url.toString().toUtf8()) );
140 bool YQRichText::eventFilter( QObject * obj, QEvent * ev )
142 if ( ev->type() == QEvent::KeyPress )
144 QKeyEvent * event = ( QKeyEvent * ) ev;
146 if ( ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) &&
147 ( event->modifiers() & Qt::NoModifier || event->modifiers() & Qt::KeypadModifier ) &&
150 YQDialog * dia = (YQDialog *) findDialog();
154 ( void ) dia->activateDefaultButton();
160 return QWidget::eventFilter( obj, ev );
164 bool YQRichText::haveHyperLinks()
166 if ( plainTextMode() )
169 return ( _textBrowser->document()->toPlainText().contains( QRegExp( "<a\\s+href\\s*=", Qt::CaseInsensitive ) ) > 0 );
173 int YQRichText::preferredWidth()
175 return shrinkable() ? 10 : 100;
179 int YQRichText::preferredHeight()
181 return shrinkable() ? 10 : 100;
185 void YQRichText::setSize( int newWidth, int newHeight )
187 resize( newWidth, newHeight );
191 void YQRichText::setEnabled( bool enabled )
193 _textBrowser->setEnabled( enabled );
194 YWidget::setEnabled( enabled );
198 bool YQRichText::setKeyboardFocus()
200 _textBrowser->setFocus();
207 #include "YQRichText.moc"