/* * tdeaccelmenuwatch.cpp -- Implementation of class TDEAccelMenuWatch. * Author: Sirtaj Singh Kang * Generated: Thu Jan 7 15:05:26 EST 1999 */ #include #include #include "tdeaccelmenuwatch.h" TDEAccelMenuWatch::TDEAccelMenuWatch( TDEAccel *accel, TQObject *parent ) : TQObject( parent ), _accel( accel ), _menu ( 0 ) { _accList.setAutoDelete( true ); _menuList.setAutoDelete( false ); } void TDEAccelMenuWatch::setMenu( TQPopupMenu *menu ) { assert( menu ); // we use _menuList to ensure that the signal is // connected only once per menu. if ( !_menuList.findRef( menu ) ) { _menuList.append( menu ); connect( menu, TQT_SIGNAL(destroyed()), this, TQT_SLOT(removeDeadMenu()) ); } _menu = menu; } void TDEAccelMenuWatch::connectAccel( int itemId, const char *action ) { AccelItem *item = newAccelItem( _menu, itemId, StringAccel ) ; item->action = TQString::fromLocal8Bit( action ); } void TDEAccelMenuWatch::connectAccel( int itemId, TDEStdAccel::StdAccel accel ) { AccelItem *item = newAccelItem( _menu, itemId, StdAccel ) ; item->stdAction = accel; } void TDEAccelMenuWatch::updateMenus() { assert( _accel != 0 ); TQPtrListIterator iter( _accList ); AccelItem *item; for( ; (item = iter.current()) ; ++iter ) { // These setAccel calls were converted from all changeMenuAccel calls // as descibed in KDE3PORTING.html switch( item->type ) { case StringAccel: item->menu->setAccel( _accel->shortcut( item->action ).keyCodeQt(), item->itemId ); break; case StdAccel: item->menu->setAccel( TDEStdAccel::shortcut( item->stdAction ).keyCodeQt(), item->itemId ); break; default: break; } } } void TDEAccelMenuWatch::removeDeadMenu() { TQPopupMenu *sdr = (TQPopupMenu *) sender(); assert( sdr ); if ( !_menuList.findRef( sdr ) ) return; // remove all accels AccelItem *accel; for ( accel = _accList.first(); accel; accel = _accList.next() ) { loop: if( accel && accel->menu == sdr ) { _accList.remove(); accel = _accList.current(); goto loop; } } // remove from menu list _menuList.remove( sdr ); return; } TDEAccelMenuWatch::AccelItem *TDEAccelMenuWatch::newAccelItem( TQPopupMenu *, int itemId, AccelType type ) { AccelItem *item = new AccelItem; item->menu = _menu; item->itemId = itemId; item->type = type; _accList.append( item ); return item; } #include "tdeaccelmenuwatch.moc"