diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 2bda8f7717adf28da4af0d34fb82f63d2868c31d (patch) | |
tree | 8d927b7b47a90c4adb646482a52613f58acd6f8c /kregexpeditor/dragaccepter.cpp | |
download | tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.tar.gz tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.zip |
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
Diffstat (limited to 'kregexpeditor/dragaccepter.cpp')
-rw-r--r-- | kregexpeditor/dragaccepter.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/kregexpeditor/dragaccepter.cpp b/kregexpeditor/dragaccepter.cpp new file mode 100644 index 0000000..0198e58 --- /dev/null +++ b/kregexpeditor/dragaccepter.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2002-2003 Jesper K. Pedersen <blackie@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 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. + **/ +#include "dragaccepter.h" +#include "concwidget.h" + +#include <qpainter.h> + +DragAccepter::DragAccepter(RegExpEditorWindow* editorWindow, RegExpWidget *parent, + const char *name) + : RegExpWidget(editorWindow, parent, name == 0 ? "dragaccepter" : name ), + _drawLine( false ) +{ + setAcceptDrops(TRUE); +} + +QSize DragAccepter::sizeHint() const +{ + return QSize(10,10); +} + +void DragAccepter::paintEvent(QPaintEvent *e) +{ + QPainter painter(this); + drawPossibleSelection( painter, size() ); + + if ( _drawLine ) + painter.drawLine( 0, height()/2, width(), height()/2 ); + + RegExpWidget::paintEvent(e); +} + +void DragAccepter::mousePressEvent ( QMouseEvent* event ) +{ + if ( event->button() == RightButton ) { + _editorWindow->showRMBMenu( _editorWindow->hasSelection() ); + } + else { + RegExpWidget::mousePressEvent( event ); + } +} + +void DragAccepter::mouseReleaseEvent( QMouseEvent* event ) +{ + if ( _editorWindow->isPasteing() && event->button() == LeftButton ) { + RegExp* regexp = _editorWindow->pasteData(); + + RegExpWidget *newElm = WidgetFactory::createWidget( regexp, _editorWindow, 0 ); + if ( newElm ) { + ConcWidget* elm; + if (! (elm = dynamic_cast<ConcWidget*>( newElm ) ) ) { + elm = new ConcWidget( _editorWindow, newElm, 0 ); + } + + Q_ASSERT( elm ); + + RegExpWidget *w = dynamic_cast<RegExpWidget*>(parent()); + if (w) + w->addNewConcChild(this, elm); + _editorWindow->updateContent( this ); + _editorWindow->clearSelection( true ); + } + } + else if ( _editorWindow->isInserting() && event->button() == LeftButton ) { + if ( WidgetFactory::isContainer( _editorWindow->insertType() ) && + _editorWindow->pointSelected( mapToGlobal( event->pos() ) ) ) { + RegExpWidget::mouseReleaseEvent( event ); + } + else { + RegExpWidget *child = WidgetFactory::createWidget( _editorWindow, + dynamic_cast<QWidget*>(parent()), + _editorWindow->insertType() ); + if ( child ) { + RegExpWidget *w = dynamic_cast<RegExpWidget*>(parent()); + if (w) + w->addNewChild(this, child); + _editorWindow->updateContent( child ); + child->setFocus(); + _editorWindow->clearSelection( true ); + } + } + } + _editorWindow->slotEndActions(); +} + + +void DragAccepter::dragEnterEvent(QDragEnterEvent *event) +{ + bool selfDrag = ( event->source() && event->source()->topLevelWidget() == topLevelWidget() && _isSelected ); + event->accept(RegExpWidgetDrag::canDecode( event ) && !selfDrag ); +} + +void DragAccepter::dropEvent(QDropEvent *event) +{ + // The widget will be reparent afterward or part of it will, so no need to give + // it a parent here. + RegExpWidget *newElm = RegExpWidgetDrag::decode( event, _editorWindow, 0 ); + ConcWidget* elm; + if ( !(elm = dynamic_cast<ConcWidget*>( newElm ) ) ) { + elm = new ConcWidget( _editorWindow, newElm, 0 ); + } + + Q_ASSERT( elm ); + + RegExpWidget *rew = dynamic_cast<RegExpWidget*>(parent()); + if (rew) + rew->addNewConcChild(this, elm); + QWidget *w = dynamic_cast<QWidget*>(parent()); + if (w) + w->update(); + _editorWindow->updateContent( this ); + + bool selfDrag = ( event->source() && event->source()->topLevelWidget() == topLevelWidget() ); + if ( ! selfDrag ) + _editorWindow->clearSelection( true ); + else { + // selection should not be cleared here, since we might want to delete it. + } + event->accept(); +} + +RegExp* DragAccepter::regExp() const +{ + return 0; +} |