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()));
65 // Set the text foreground color to black, regardless of its current
66 // settings - it might be changed if this widget resides in a
67 // warnColor dialog - which we cannot find right now out since our
68 // parent is not set yet :-(
70 QPalette pal( _textBrowser->palette() );
71 pal.setColor( QPalette::Text, Qt::black );
72 pal.setCurrentColorGroup( QPalette::Normal );
73 _textBrowser->setPalette( pal );
76 // Propagate clicks on hyperlinks
78 connect( _textBrowser, SIGNAL( anchorClicked( const QUrl & ) ),
79 this, SLOT ( linkClicked ( const QUrl & ) ) );
83 YQRichText::~YQRichText()
89 void YQRichText::setValue( const string & newText )
91 if ( _textBrowser->horizontalScrollBar() )
92 _textBrowser->horizontalScrollBar()->setValue(0);
94 if ( ! autoScrollDown() && _textBrowser->verticalScrollBar() )
95 _textBrowser->verticalScrollBar()->setValue(0);
97 QString text = fromUTF8( newText );
99 if ( ! plainTextMode() )
101 text.replace( "&product;", YQUI::ui()->productName() );
102 _textBrowser->setHtml( text );
106 _textBrowser->setPlainText( text );
108 YRichText::setValue( newText );
110 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
111 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
115 void YQRichText::setPlainTextMode( bool newPlainTextMode )
117 YRichText::setPlainTextMode( newPlainTextMode );
119 if ( plainTextMode() )
121 _textBrowser->setWordWrapMode( QTextOption::NoWrap );
126 void YQRichText::setAutoScrollDown( bool newAutoScrollDown )
128 YRichText::setAutoScrollDown( newAutoScrollDown );
130 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
131 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
135 void YQRichText::linkClicked( const QUrl & url )
137 // y2debug( "Selected hyperlink \"%s\"", (const char *) url );
138 YQUI::ui()->sendEvent( new YMenuEvent(url.toString().toUtf8()) );
142 bool YQRichText::eventFilter( QObject * obj, QEvent * ev )
144 if ( ev->type() == QEvent::KeyPress )
146 QKeyEvent * event = ( QKeyEvent * ) ev;
148 if ( ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) &&
149 ( event->modifiers() & Qt::NoModifier || event->modifiers() & Qt::KeypadModifier ) &&
152 YQDialog * dia = (YQDialog *) findDialog();
156 ( void ) dia->activateDefaultButton();
162 return QWidget::eventFilter( obj, ev );
166 bool YQRichText::haveHyperLinks()
168 if ( plainTextMode() )
171 return ( _textBrowser->document()->toPlainText().contains( QRegExp( "<a\\s+href\\s*=", Qt::CaseInsensitive ) ) > 0 );
175 int YQRichText::preferredWidth()
177 return shrinkable() ? 10 : 100;
181 int YQRichText::preferredHeight()
183 return shrinkable() ? 10 : 100;
187 void YQRichText::setSize( int newWidth, int newHeight )
189 resize( newWidth, newHeight );
193 void YQRichText::setEnabled( bool enabled )
195 _textBrowser->setEnabled( enabled );
196 YWidget::setEnabled( enabled );
200 bool YQRichText::setKeyboardFocus()
202 _textBrowser->setFocus();
209 #include "YQRichText.moc"