kdeui
kpanelmenu.cpp
Go to the documentation of this file.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