From 2bda8f7717adf28da4af0d34fb82f63d2868c31d Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kregexpeditor/textwidget.cpp | 157 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 kregexpeditor/textwidget.cpp (limited to 'kregexpeditor/textwidget.cpp') diff --git a/kregexpeditor/textwidget.cpp b/kregexpeditor/textwidget.cpp new file mode 100644 index 0000000..c36d1a8 --- /dev/null +++ b/kregexpeditor/textwidget.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2002-2003 Jesper K. Pedersen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + **/ +#ifndef QT_ONLY + #include "textwidget.moc" +#endif + +#include "textwidget.h" +#include "textregexp.h" +#include "selectablelineedit.h" +#include + +TextWidget::TextWidget(RegExpEditorWindow* editorWindow, QWidget *parent, + const char *name) + :RegExpWidget(editorWindow, parent, name) +{ + init( QString::fromLocal8Bit("") ); +} + +TextWidget::TextWidget( TextRegExp* regexp, RegExpEditorWindow* editorWindow, + QWidget* parent, const char* name ) + : RegExpWidget( editorWindow, parent, name ) +{ + init(regexp->text()); +} + +void TextWidget::init( const QString& txt ) +{ + QHBoxLayout *lay = new QHBoxLayout(this); + _edit = new SelectableLineEdit( this, this, "TextWidget::edit" ); + _edit->setDragEnabled( false ); //otherwise QLineEdit::mouseMoveEvent will set the cursor over and over again. + lay->addWidget(_edit); + + _edit->setText( txt ); + + connect( _edit, SIGNAL( parentPleaseUpdate() ), this, SLOT(slotUpdate()) ); + setFocusProxy( _edit ); + _edit->installEventFilter( this ); + connect( _edit, SIGNAL( textChanged( const QString & ) ), _editorWindow, SLOT( emitChange() ) ); +} + + +void TextWidget::slotUpdate() +{ + // I need to force the parent to repaint, as the size change of this + // widget may not be enough for the parent to change size, and in that + // case the parent would not repaint, and the text widget would not be + // resized. + QWidget *p = static_cast(parent()); + if (p) + p->repaint(); + _editorWindow->updateContent( this ); +} + +QSize TextWidget::sizeHint() const +{ + return _edit->sizeHint(); +} + +void TextWidget::paintEvent( QPaintEvent *e) +{ + RegExpWidget::paintEvent(e); +} + +void TextWidget::selectWidget( bool sel ) +{ + _edit->setSelected( sel ); +} + +bool TextWidget::updateSelection(bool parentSelected) +{ + bool changed = RegExpWidget::updateSelection( parentSelected ); + + // I need to call this function all the time, else the rubber band will + // not be correctly deleted in the line edit. + _edit->setSelected( _isSelected ); + return changed; +} +void TextWidget::updateAll() +{ + _edit->update(); + update(); +} + +void TextWidget::clearSelection() +{ + _isSelected = false; + _edit->setSelected( false ); +} + +RegExp* TextWidget::regExp() const +{ + return new TextRegExp( isSelected(), _edit->text() ); +} + +bool TextWidget::eventFilter( QObject*, QEvent* event) +{ + // This is an event filter (in contrast to methods in SelectableLineEdit), + // otherwise lots of functions would need to be exported from TextWidget. + if ( event->type() == QEvent::MouseButtonRelease ) { + if ( _editorWindow->isInserting() ) { + if ( acceptWidgetInsert( _editorWindow->insertType() ) ) { + mouseReleaseEvent( static_cast(event) ); + } + return true; + } + } + else if ( event->type() == QEvent::MouseButtonPress ) { + if ( _editorWindow->isInserting() ) { + return true; + } + else if ( isSelected() ) { + QMouseEvent* e = static_cast( event ); + QMouseEvent ev( event->type(), mapTo(_editorWindow, e->pos()), + e->button(), e->state()); + QApplication::sendEvent( _editorWindow, &ev ); + return true; + } + } + + else if ( event->type() == QEvent::Enter ) { + if ( _editorWindow->isInserting() ) { + if ( acceptWidgetInsert( _editorWindow->insertType() ) ) { + _edit->setCursor(crossCursor); + } + else { + _edit->setCursor(forbiddenCursor); + } + } + else if ( isSelected() ) { + _edit->setCursor( arrowCursor ); + } + else { + _edit->setCursor( ibeamCursor ); + } + } + else if ( event->type() == QEvent::MouseButtonDblClick && _editorWindow->isInserting() ) { + return true; + } + return false; +} + + -- cgit v1.2.1