summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/tools/designer/designer/listboxrename.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/tools/designer/designer/listboxrename.cpp')
-rw-r--r--tqtinterface/qt4/tools/designer/designer/listboxrename.cpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/tqtinterface/qt4/tools/designer/designer/listboxrename.cpp b/tqtinterface/qt4/tools/designer/designer/listboxrename.cpp
new file mode 100644
index 0000000..421fda2
--- /dev/null
+++ b/tqtinterface/qt4/tools/designer/designer/listboxrename.cpp
@@ -0,0 +1,164 @@
+/**********************************************************************
+** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of TQt Designer.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** Licensees holding valid TQt Commercial licenses may use this file in
+** accordance with the TQt Commercial License Agreement provided with
+** the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include <tqheader.h>
+#include <tqlineedit.h>
+#include <tqtimer.h>
+#include "listboxrename.h"
+
+class EditableListBoxItem : public TQListBoxItem
+{
+public:
+ void setText( const TQString & text )
+ {
+ TQListBoxItem::setText( text );
+ }
+};
+
+ListBoxRename::ListBoxRename( TQListBox * eventSource, const char * name )
+ : TQObject( eventSource, name ),
+ clickedItem( 0 ), activity( FALSE )
+{
+ src = eventSource;
+ src->installEventFilter( this );
+ ed = new TQLineEdit( src->viewport() );
+ ed->hide();
+ ed->setFrame( FALSE );
+
+ TQObject::connect( ed, TQT_SIGNAL( returnPressed() ),
+ this, TQT_SLOT( renameClickedItem() ) );
+}
+
+bool ListBoxRename::eventFilter( TQObject *, TQEvent * event )
+{
+ switch ( event->type() ) {
+
+ case TQEvent::MouseButtonPress:
+ {
+ TQPoint pos = ((TQMouseEvent *) event)->pos();
+
+ if ( clickedItem &&
+ clickedItem->isSelected() &&
+ (clickedItem == src->itemAt( pos )) ) {
+ TQTimer::singleShot( 500, this, TQT_SLOT( showLineEdit() ) );
+ activity = FALSE; // no drags or clicks for 500 ms before we start the renaming
+ } else { // new item clicked
+ activity = TRUE;
+ clickedItem = src->itemAt( pos );
+ ed->hide();
+ }
+ }
+ break;
+
+ case TQEvent::MouseMove:
+
+ if ( ((TQMouseEvent *) event)->state() & Qt::LeftButton ) {
+ activity = TRUE; // drag
+ }
+ break;
+
+ case TQEvent::KeyPress:
+
+ switch ( ((TQKeyEvent *) event)->key() ) {
+
+ case TQt::Key_F2:
+
+ activity = FALSE;
+ clickedItem = src->item( src->currentItem() );
+ showLineEdit();
+ break;
+
+ case Key_Escape:
+ if ( !ed->isHidden() ) {
+ hideLineEdit(); // abort rename
+ return TRUE;
+ }
+ break;
+
+ case TQt::Key_Up:
+ case TQt::Key_Down:
+ case TQt::Key_PageUp:
+ case TQt::Key_PageDown:
+
+ if ( !ed->isHidden() )
+ return TRUE; // Filter out the keystrokes
+ break;
+
+ }
+ break;
+
+ case TQEvent::Resize:
+
+ if ( clickedItem && ed && !ed->isHidden() ) {
+ TQRect rect = src->tqitemRect( clickedItem );
+ ed->resize( rect.right() - rect.left() - 1,
+ rect.bottom() - rect.top() - 1 );
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+void ListBoxRename::showLineEdit()
+{
+ if ( !clickedItem || activity )
+ return;
+ TQRect rect = src->tqitemRect( clickedItem );
+ ed->resize( rect.right() - rect.left() - 1,
+ rect.bottom() - rect.top() - 1 );
+ ed->move( rect.left() + 1, rect.top() + 1 );
+ ed->setText( clickedItem->text() );
+ ed->selectAll();
+ ed->show();
+ ed->setFocus();
+}
+
+void ListBoxRename::hideLineEdit()
+{
+ ed->hide();
+ clickedItem = 0;
+ src->setFocus();
+}
+
+void ListBoxRename::renameClickedItem()
+{
+ if ( clickedItem && ed ) {
+ ( (EditableListBoxItem *) clickedItem )->setText( ed->text() );
+ emit itemTextChanged( ed->text() );
+ }
+ hideLineEdit();
+}