/**************************************************************************** KHotKeys Copyright (C) 1999-2002 Lubos Lunak Distributed under the terms of the GNU General Public License version 2. ****************************************************************************/ #define _KHLISTBOX_CPP_ #ifdef HAVE_CONFIG_H #include #endif #include "khlistbox.h" #include namespace KHotKeys { KHListBox::KHListBox( TQWidget* parent_P, const char* name_P ) : TQListBox( parent_P, name_P ), saved_current_item( NULL ), in_clear( false ), force_select( false ) { connect( this, TQT_SIGNAL( selectionChanged( TQListBoxItem* )), TQT_SLOT( slot_selection_changed( TQListBoxItem* ))); connect( this, TQT_SIGNAL( currentChanged( TQListBoxItem* )), TQT_SLOT( slot_current_changed( TQListBoxItem* ))); // CHECKME grrr connect( this, TQT_SIGNAL( selectionChanged()), TQT_SLOT( slot_selection_changed())); connect( &insert_select_timer, TQT_SIGNAL( timeout()), TQT_SLOT( slot_insert_select())); } void KHListBox::slot_selection_changed() { if( saved_current_item == NULL ) slot_selection_changed( NULL ); else if( !saved_current_item->isSelected()) // no way setSelected( saved_current_item, true ); } void KHListBox::slot_selection_changed( TQListBoxItem* item_P ) { if( item_P == saved_current_item ) return; saved_current_item = item_P; setCurrentItem( saved_current_item ); emit current_changed( saved_current_item ); } void KHListBox::slot_current_changed( TQListBoxItem* item_P ) { insert_select_timer.stop(); if( item_P == saved_current_item ) return; saved_current_item = item_P; setSelected( saved_current_item, true ); emit current_changed( saved_current_item ); } // neni virtual :(( void KHListBox::clear() { in_clear = true; TQListBox::clear(); in_clear = false; slot_selection_changed( NULL ); } // neni virtual :(( a vubec nefunguje void KHListBox::insertItem( TQListBoxItem* item_P ) { bool set = false; if( !in_clear ) set = count() == 0; TQListBox::insertItem( item_P ); if( set && force_select ) { bool block = signalsBlocked(); blockSignals( true ); setCurrentItem( item_P ); blockSignals( block ); insert_select_timer.start( 0, true ); } } // items are often inserted using the TQListBoxItem constructor, // which means that a derived class are not yet fully created void KHListBox::slot_insert_select() { slot_current_changed( item( currentItem())); } } // namespace KHotKeys #include "khlistbox.moc"