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