kaccelmenuwatch.cpp
00001
00002
00003
00004
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
00026
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
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
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"
This file is part of the documentation for karm Library Version 3.2.2.