KDE3Support
k3panelmenu.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 <kconfiggroup.h>
00027 #include <QTimer>
00028
00029 #include "k3panelmenu.h"
00030 #include "k3panelmenu.moc"
00031
00032
00033
00034 class K3PanelMenu::Private
00035 {
00036 public:
00037 bool init;
00038 int clearDelay;
00039 QString startPath;
00040 QTimer t;
00041 };
00042
00043 K3PanelMenu::K3PanelMenu(const QString &startDir, QWidget *parent)
00044 : KMenu(parent)
00045 {
00046 init(startDir);
00047 }
00048
00049 K3PanelMenu::K3PanelMenu(QWidget *parent)
00050 : KMenu(parent)
00051 {
00052 init();
00053 }
00054
00055 void K3PanelMenu::init(const QString& path)
00056 {
00057 d = new Private;
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 KConfigGroup config(KGlobal::config(), "menus");
00067 d->clearDelay = config.readEntry("MenuCacheTime", 60000);
00068
00069
00070 setKeyboardShortcutsEnabled(true);
00071 }
00072
00073 K3PanelMenu::~K3PanelMenu()
00074 {
00075 delete d;
00076 }
00077
00078 void K3PanelMenu::slotAboutToShow()
00079 {
00080
00081 if(d->clearDelay)
00082 d->t.stop();
00083
00084
00085 if ( isTopLevel() )
00086 d->clearDelay = 0;
00087
00088 internalInitialize();
00089 }
00090
00091 void K3PanelMenu::slotClear()
00092 {
00093 setInitialized( false );
00094 clear();
00095 }
00096
00097 void K3PanelMenu::hideEvent(QHideEvent *ev)
00098 {
00099
00100 if(d->clearDelay) {
00101 disconnect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
00102 connect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
00103 d->t.setSingleShot(true);
00104 d->t.start(d->clearDelay);
00105 }
00106 KMenu::hideEvent(ev);
00107 }
00108
00109 void K3PanelMenu::disableAutoClear()
00110 {
00111 d->clearDelay = 0;
00112 }
00113
00114 const QString& K3PanelMenu::path() const
00115 {
00116 return d->startPath;
00117 }
00118
00119 void K3PanelMenu::setPath(const QString& p)
00120 {
00121 d->startPath = p;
00122 }
00123
00124 bool K3PanelMenu::initialized() const
00125 {
00126 return d->init;
00127 }
00128
00129 void K3PanelMenu::setInitialized(bool on)
00130 {
00131 d->init = on;
00132 }
00133
00134 void K3PanelMenu::reinitialize()
00135 {
00136 deinitialize();
00137
00138
00139
00140 internalInitialize();
00141 }
00142
00143 void K3PanelMenu::deinitialize()
00144 {
00145 slotClear();
00146 }
00147
00148 void K3PanelMenu::internalInitialize()
00149 {
00150 if( initialized() )
00151 return;
00152 initialize();
00153 setInitialized( true );
00154 }
00155