Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / workspace / khotkeys / shared / khlistview.cpp
blob38b53a8a488048c113ed053f2a2a7675f8e20fd8
1 /****************************************************************************
3 KHotKeys
5 Copyright (C) 1999-2002 Lubos Lunak <l.lunak@kde.org>
7 Distributed under the terms of the GNU General Public License version 2.
9 ****************************************************************************/
11 #define _KHLISTVIEW_CPP_
13 #include "khlistview.h"
15 #include <kdebug.h>
16 #include <QDropEvent>
18 namespace KHotKeys
21 KHListView::KHListView( QWidget* parent_P )
22 : K3ListView( parent_P ), saved_current_item( NULL ),
23 in_clear( false ), ignore( false ), force_select( false )
25 insert_select_timer.setSingleShot( true );
27 connect( this, SIGNAL( selectionChanged( Q3ListViewItem* )),
28 SLOT( slot_selection_changed( Q3ListViewItem* )));
29 connect( this, SIGNAL( currentChanged( Q3ListViewItem* )),
30 SLOT( slot_current_changed( Q3ListViewItem* )));
31 // CHECKME grrr
32 connect( this, SIGNAL( selectionChanged()),
33 SLOT( slot_selection_changed()));
34 connect( &insert_select_timer, SIGNAL( timeout()),
35 SLOT( slot_insert_select()));
38 void KHListView::slot_selection_changed()
40 if( ignore )
41 return;
42 if( saved_current_item == NULL )
43 slot_selection_changed( NULL );
44 else if( !saved_current_item->isSelected()) // no way
45 setSelected( saved_current_item, true );
48 void KHListView::slot_selection_changed( Q3ListViewItem* item_P )
50 if( ignore )
51 return;
52 if( item_P == saved_current_item )
53 return;
54 saved_current_item = item_P;
55 setCurrentItem( saved_current_item );
56 emit current_changed( saved_current_item );
59 void KHListView::slot_current_changed( Q3ListViewItem* item_P )
61 if( ignore )
62 return;
63 insert_select_timer.stop();
64 if( item_P == saved_current_item )
65 return;
66 saved_current_item = item_P;
67 setSelected( saved_current_item, true );
68 emit current_changed( saved_current_item );
71 void KHListView::clear()
73 in_clear = true;
74 K3ListView::clear();
75 in_clear = false;
76 slot_selection_changed( NULL );
79 void KHListView::insertItem( Q3ListViewItem* item_P )
81 bool set = false;
82 if( !in_clear )
83 set = childCount() == 0;
84 K3ListView::insertItem( item_P );
85 if( set && force_select )
87 bool block = signalsBlocked();
88 blockSignals( true );
89 // SELI tohle spis jen blokovat sebe?
90 setCurrentItem( item_P );
91 blockSignals( block );
92 insert_select_timer.start( 0 );
96 void KHListView::clearSelection()
98 K3ListView::clearSelection();
99 slot_current_changed( currentItem());
102 // items are often inserted using the QListViewItem constructor,
103 // which means that a derived class are not yet fully created
104 void KHListView::slot_insert_select()
106 if( ignore )
107 return;
108 slot_current_changed( currentItem());
111 void KHListView::contentsDropEvent( QDropEvent* e )
113 bool save_ignore = ignore;
114 ignore = true;
115 K3ListView::contentsDropEvent( e );
116 ignore = save_ignore;
119 } // namespace KHotKeys
121 #include "khlistview.moc"