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 kdelibs Version 3.1.0.