25 #define YUILogComponent "qt-ui"
26 #include <yui/YUILog.h>
28 #include <QColorGroup>
33 #include <QVBoxLayout>
35 #include <yui/YApplication.h>
36 #include <yui/YEvent.h>
38 #include "QY2Styler.h"
41 #include "YQRichText.h"
43 static const char *colors[] = {
"red",
"blue",
"green", 0};
46 : QFrame( (QWidget *) parent->widgetRep() )
47 , YRichText( parent, text, plainTextMode )
48 , _colors_specified( 0 )
50 QVBoxLayout* layout =
new QVBoxLayout(
this );
51 layout->setSpacing( 0 );
56 layout->setMargin( YQWidgetMargin );
59 YUI_CHECK_NEW( _textBrowser );
60 layout->addWidget( _textBrowser );
62 _textBrowser->installEventFilter(
this );
66 _textBrowser->setWordWrapMode( QTextOption::NoWrap );
70 QString style =
"\n" + QY2Styler::styler()->textStyle();
71 size_t ccolors =
sizeof( colors ) /
sizeof(
char* ) - 1;
72 _colors_specified =
new bool[ccolors];
73 for (
size_t i = 0; i < ccolors; ++i )
75 _colors_specified[i] =
false;
77 sprintf( buffer,
"\n.%s ", colors[i] );
78 if ( style.contains( buffer ) )
79 _colors_specified[i] =
true;
81 _textBrowser->document()->setDefaultStyleSheet( style );
88 connect( _textBrowser, SIGNAL( anchorClicked(
const QUrl & ) ),
101 if ( _textBrowser->horizontalScrollBar() )
102 _textBrowser->horizontalScrollBar()->setValue(0);
104 if ( ! autoScrollDown() && _textBrowser->verticalScrollBar() )
105 _textBrowser->verticalScrollBar()->setValue(0);
107 QString text = fromUTF8( newText );
109 if ( ! plainTextMode() )
111 for (
int counter = 0; colors[counter]; counter++ )
113 if ( !_colors_specified[counter] )
continue;
114 text.replace( QString(
"color=%1" ).arg( colors[counter] ), QString(
"class=\"%1\"" ).arg( colors[counter] ) );
115 text.replace( QString(
"color=\"%1\"" ).arg( colors[counter] ), QString(
"class=\"%1\"" ).arg( colors[counter] ));
117 text.replace(
"&product;", fromUTF8( YUI::app()->productName() ) );
118 _textBrowser->setHtml( text );
122 _textBrowser->setPlainText( text );
124 YRichText::setValue( newText );
126 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
127 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
133 YRichText::setPlainTextMode( newPlainTextMode );
135 if ( plainTextMode() )
137 _textBrowser->setWordWrapMode( QTextOption::NoWrap );
144 YRichText::setAutoScrollDown( newAutoScrollDown );
146 if ( autoScrollDown() && _textBrowser->verticalScrollBar() )
147 _textBrowser->verticalScrollBar()->setValue( _textBrowser->verticalScrollBar()->maximum() );
160 if ( ev->type() == QEvent::KeyPress )
162 QKeyEvent *
event = ( QKeyEvent * ) ev;
164 if ( ( event->key() == Qt::Key_Return ||
event->key() == Qt::Key_Enter ) &&
165 ( event->modifiers() & Qt::NoModifier ||
event->modifiers() & Qt::KeypadModifier ) &&
178 return QWidget::eventFilter( obj, ev );
184 if ( plainTextMode() )
187 return ( _textBrowser->document()->toPlainText().contains( QRegExp(
"<a\\s+href\\s*=", Qt::CaseInsensitive ) ) > 0 );
193 return shrinkable() ? 10 : 100;
199 return shrinkable() ? 10 : 100;
205 resize( newWidth, newHeight );
211 _textBrowser->setEnabled( enabled );
212 YWidget::setEnabled( enabled );
218 _textBrowser->setFocus();
228 if ( name.toString().startsWith(
"#") )
229 scrollToAnchor( name.toString().mid(1) );
235 #include "YQRichText.moc"
virtual bool setKeyboardFocus()
YQRichText(YWidget *parent, const std::string &text, bool plainTextMode=false)
virtual bool eventFilter(QObject *obj, QEvent *ev)
virtual void setSize(int newWidth, int newHeight)
virtual int preferredWidth()
void sendEvent(YEvent *event)
virtual void setPlainTextMode(bool on=true)
virtual void setSource(const QUrl &name)
virtual void setAutoScrollDown(bool on=true)
virtual void setValue(const std::string &newValue)
bool activateDefaultButton(bool warn=true)
virtual int preferredHeight()
virtual void setEnabled(bool enabled)
void linkClicked(const QUrl &url)