kpanelmenu.cpp
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 #include <kglobal.h>
00026 #include <kconfig.h>
00027 #include <qtimer.h>
00028 
00029 #include "kpanelmenu.h"
00030 #include "kpanelmenu.moc"
00031 
00032 
00033 
00034 class KPanelMenuPrivate
00035 {
00036 public:
00037     bool init;
00038     int clearDelay;
00039     QString startPath;
00040     QTimer t;
00041 };
00042 
00043 KPanelMenu::KPanelMenu(const QString &startDir, QWidget *parent, const char *name)
00044   : KPopupMenu(parent, name)
00045 {
00046     init(startDir);
00047 }
00048 
00049 KPanelMenu::KPanelMenu(QWidget *parent, const char *name)
00050   : KPopupMenu(parent, name)
00051 {
00052     init();
00053 }
00054 
00055 void KPanelMenu::init(const QString& path)
00056 {
00057     d = new KPanelMenuPrivate;
00058 
00059     setInitialized( false );
00060     d->startPath = path;
00061 
00062     connect(this, SIGNAL(activated(int)), SLOT(slotExec(int)));
00063     connect(this, SIGNAL(aboutToShow()), SLOT(slotAboutToShow()));
00064 
00065     
00066     KConfig *config = KGlobal::config();
00067     config->setGroup("menus");
00068     d->clearDelay = config->readNumEntry("MenuCacheTime", 60000); 
00069 
00070     
00071     setKeyboardShortcutsEnabled(true);
00072 }
00073 
00074 KPanelMenu::~KPanelMenu()
00075 {
00076     delete d;
00077 }
00078 
00079 void KPanelMenu::slotAboutToShow()
00080 {
00081     
00082     if(d->clearDelay)
00083         d->t.stop();
00084 
00085     
00086     if ( isTopLevel() )
00087         d->clearDelay = 0;
00088 
00089     internalInitialize();
00090 }
00091 
00092 void KPanelMenu::slotClear()
00093 {
00094     setInitialized( false );
00095     clear();
00096 }
00097 
00098 void KPanelMenu::hideEvent(QHideEvent *ev)
00099 {
00100     
00101     if(d->clearDelay) {
00102         disconnect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
00103         connect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
00104         d->t.start(d->clearDelay, true);
00105     }
00106     QPopupMenu::hideEvent(ev);
00107 }
00108 
00109 void KPanelMenu::disableAutoClear()
00110 {
00111     d->clearDelay = 0;
00112 }
00113 
00114 const QString& KPanelMenu::path() const
00115 {
00116     return d->startPath;
00117 }
00118 
00119 void KPanelMenu::setPath(const QString& p)
00120 {
00121     d->startPath = p;
00122 }
00123 
00124 bool KPanelMenu::initialized() const
00125 {
00126     return d->init;
00127 }
00128 
00129 void KPanelMenu::setInitialized(bool on)
00130 {
00131     d->init = on;
00132 }
00133 
00134 void KPanelMenu::reinitialize()
00135 {
00136     deinitialize();
00137     
00138     
00139     
00140     internalInitialize();
00141 }
00142 
00143 void KPanelMenu::deinitialize()
00144 {
00145     slotClear();
00146 }
00147 
00148 void KPanelMenu::internalInitialize()
00149 {
00150     if( initialized() )
00151         return;
00152     initialize();
00153     setInitialized( true );
00154 }
00155 
00156 void KPanelMenu::virtual_hook( int id, void* data )
00157 { KPopupMenu::virtual_hook( id, data ); }
00158 
 
This file is part of the documentation for kdeui Library Version 3.2.0.