summaryrefslogtreecommitdiffstats
path: root/tdeui/kpanelmenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeui/kpanelmenu.cpp')
-rw-r--r--tdeui/kpanelmenu.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/tdeui/kpanelmenu.cpp b/tdeui/kpanelmenu.cpp
new file mode 100644
index 000000000..ed13502a4
--- /dev/null
+++ b/tdeui/kpanelmenu.cpp
@@ -0,0 +1,158 @@
+/*****************************************************************
+
+Copyright (c) 1996-2000 the kicker authors. See file AUTHORS.
+ (c) Michael Goffioul <tdeprint@swing.be>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include <kglobal.h>
+#include <kconfig.h>
+#include <tqtimer.h>
+
+#include "kpanelmenu.h"
+#include "kpanelmenu.moc"
+//#include "kaccelmanager.h"
+
+
+class KPanelMenuPrivate
+{
+public:
+ bool init;
+ int clearDelay;
+ TQString startPath;
+ TQTimer t;
+};
+
+KPanelMenu::KPanelMenu(const TQString &startDir, TQWidget *parent, const char *name)
+ : KPopupMenu(parent, name)
+{
+ init(startDir);
+}
+
+KPanelMenu::KPanelMenu(TQWidget *parent, const char *name)
+ : KPopupMenu(parent, name)
+{
+ init();
+}
+
+void KPanelMenu::init(const TQString& path)
+{
+ d = new KPanelMenuPrivate;
+
+ setInitialized( false );
+ d->startPath = path;
+
+ connect(this, TQT_SIGNAL(activated(int)), TQT_SLOT(slotExec(int)));
+ connect(this, TQT_SIGNAL(aboutToShow()), TQT_SLOT(slotAboutToShow()));
+
+ // setup cache timer
+ KConfig *config = KGlobal::config();
+ config->setGroup("menus");
+ d->clearDelay = config->readNumEntry("MenuCacheTime", 60000); // 1 minute
+
+ //KAcceleratorManager::manage(this);
+ setKeyboardShortcutsEnabled(true);
+}
+
+KPanelMenu::~KPanelMenu()
+{
+ delete d;
+}
+
+void KPanelMenu::slotAboutToShow()
+{
+ // stop the cache timer
+ if(d->clearDelay)
+ d->t.stop();
+
+ // teared off ?
+ if ( isTopLevel() )
+ d->clearDelay = 0;
+
+ internalInitialize();
+}
+
+void KPanelMenu::slotClear()
+{
+ setInitialized( false );
+ clear();
+}
+
+void KPanelMenu::hideEvent(TQHideEvent *ev)
+{
+ // start the cache timer
+ if(d->clearDelay) {
+ disconnect(&(d->t), TQT_SIGNAL(timeout()), this, TQT_SLOT(slotClear()));
+ connect(&(d->t), TQT_SIGNAL(timeout()), this, TQT_SLOT(slotClear()));
+ d->t.start(d->clearDelay, true);
+ }
+ TQPopupMenu::hideEvent(ev);
+}
+
+void KPanelMenu::disableAutoClear()
+{
+ d->clearDelay = 0;
+}
+
+const TQString& KPanelMenu::path() const
+{
+ return d->startPath;
+}
+
+void KPanelMenu::setPath(const TQString& p)
+{
+ d->startPath = p;
+}
+
+bool KPanelMenu::initialized() const
+{
+ return d->init;
+}
+
+void KPanelMenu::setInitialized(bool on)
+{
+ d->init = on;
+}
+
+void KPanelMenu::reinitialize()
+{
+ deinitialize();
+ // Yes, reinitialize must call initialize(). Otherwise, menus
+ // may not appear in the right place. Don't change this! If
+ // you want delayed initialization, use deinitialize() instead.
+ internalInitialize();
+}
+
+void KPanelMenu::deinitialize()
+{
+ slotClear();
+}
+
+void KPanelMenu::internalInitialize()
+{
+ if( initialized() )
+ return;
+ initialize();
+ setInitialized( true );
+}
+
+void KPanelMenu::virtual_hook( int id, void* data )
+{ KPopupMenu::virtual_hook( id, data ); }
+