karm Library API Documentation

kaccelmenuwatch.cpp

00001 /* 00002 * kaccelmenuwatch.cpp -- Implementation of class KAccelMenuWatch. 00003 * Author: Sirtaj Singh Kang 00004 * Generated: Thu Jan 7 15:05:26 EST 1999 00005 */ 00006 00007 #include <assert.h> 00008 #include <qpopupmenu.h> 00009 00010 #include "kaccelmenuwatch.h" 00011 00012 KAccelMenuWatch::KAccelMenuWatch( KAccel *accel, QObject *parent ) 00013 : QObject( parent ), 00014 _accel( accel ), 00015 _menu ( 0 ) 00016 { 00017 _accList.setAutoDelete( true ); 00018 _menuList.setAutoDelete( false ); 00019 } 00020 00021 void KAccelMenuWatch::setMenu( QPopupMenu *menu ) 00022 { 00023 assert( menu ); 00024 00025 // we use _menuList to ensure that the signal is 00026 // connected only once per menu. 00027 00028 if ( !_menuList.findRef( menu ) ) { 00029 _menuList.append( menu ); 00030 connect( menu, SIGNAL(destroyed()), this, SLOT(removeDeadMenu()) ); 00031 } 00032 00033 _menu = menu; 00034 } 00035 00036 void KAccelMenuWatch::connectAccel( int itemId, const char *action ) 00037 { 00038 AccelItem *item = newAccelItem( _menu, itemId, StringAccel ) ; 00039 item->action = QString::fromLocal8Bit( action ); 00040 } 00041 00042 void KAccelMenuWatch::connectAccel( int itemId, KStdAccel::StdAccel accel ) 00043 { 00044 AccelItem *item = newAccelItem( _menu, itemId, StdAccel ) ; 00045 item->stdAction = accel; 00046 } 00047 00048 void KAccelMenuWatch::updateMenus() 00049 { 00050 assert( _accel != 0 ); 00051 00052 QPtrListIterator<AccelItem> iter( _accList ); 00053 AccelItem *item; 00054 00055 for( ; (item = iter.current()) ; ++iter ) { 00056 switch( item->type ) { 00057 case StringAccel: 00058 _accel->changeMenuAccel( item->menu, item->itemId, item->action ); 00059 break; 00060 case StdAccel: 00061 _accel->changeMenuAccel( item->menu, item->itemId, item->stdAction ); 00062 break; 00063 default: 00064 break; 00065 } 00066 } 00067 00068 } 00069 00070 void KAccelMenuWatch::removeDeadMenu() 00071 { 00072 QPopupMenu *sdr = (QPopupMenu *) sender(); 00073 assert( sdr ); 00074 00075 if ( !_menuList.findRef( sdr ) ) 00076 return; 00077 00078 // remove all accels 00079 00080 AccelItem *accel; 00081 for ( accel = _accList.first(); accel; accel = _accList.next() ) 00082 { 00083 loop: 00084 if( accel && accel->menu == sdr ) { 00085 _accList.remove(); 00086 accel = _accList.current(); 00087 goto loop; 00088 } 00089 } 00090 00091 // remove from menu list 00092 _menuList.remove( sdr ); 00093 00094 return; 00095 } 00096 00097 KAccelMenuWatch::AccelItem *KAccelMenuWatch::newAccelItem( QPopupMenu *, 00098 int itemId, AccelType type ) 00099 { 00100 AccelItem *item = new AccelItem; 00101 00102 item->menu = _menu; 00103 item->itemId = itemId; 00104 item->type = type; 00105 00106 _accList.append( item ); 00107 00108 return item; 00109 } 00110 00111 #include "kaccelmenuwatch.moc"
KDE Logo
This file is part of the documentation for karm Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 27 12:50:56 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003