summaryrefslogtreecommitdiffstats
path: root/katapult/plugins/catalogs/execcatalog/execcatalog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'katapult/plugins/catalogs/execcatalog/execcatalog.cpp')
-rw-r--r--katapult/plugins/catalogs/execcatalog/execcatalog.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/katapult/plugins/catalogs/execcatalog/execcatalog.cpp b/katapult/plugins/catalogs/execcatalog/execcatalog.cpp
new file mode 100644
index 0000000..177df77
--- /dev/null
+++ b/katapult/plugins/catalogs/execcatalog/execcatalog.cpp
@@ -0,0 +1,122 @@
+/***************************************************************************
+ * Copyright (C) 2007 Martin Meredith *
+ * mez@ubuntu.com *
+ * *
+ * Copyright (C) 2006 Jonathan Riddell *
+ * jriddell@ubuntu.com *
+ * *
+ * Copyright (C) 2005 by Joe Ferris *
+ * jferris@optimistictech.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <kservicegroup.h>
+#include <ksycocaentry.h>
+#include <ksycocatype.h>
+#include <kapplication.h>
+
+#include <qlineedit.h>
+#include <qlabel.h>
+
+#include "settings.h"
+#include "execcatalog.h"
+#include "actionregistry.h"
+#include "actionrun.h"
+#include "status.h"
+
+K_EXPORT_COMPONENT_FACTORY( katapult_execcatalog,
+ KGenericFactory<ExecCatalog>( "katapult_execcatalog" ) )
+
+ExecCatalog::ExecCatalog(QObject*, const char*, const QStringList&): _result(this, QString::null)
+{
+ ActionRegistry::self()->registerAction(new ActionRun());
+}
+
+ExecCatalog::~ExecCatalog()
+{
+}
+
+void ExecCatalog::queryChanged()
+{
+ int newStatus = 0;
+ QString cmd = query();
+ int origLength = cmd.length();
+
+ if (cmd.isEmpty()) {
+ reset();
+ setBestMatch(Match());
+ } else {
+ if (accepts(cmd)) {
+ _result.setText(cmd);
+
+ setBestMatch(Match(&_result, 100, origLength));
+ //set status.
+ //add S_Multiple to make sure katapult doesn't auto-exec and close the window
+ //add S_Active to make sure katapult doesn't start the hideTimer or clearTimer
+ newStatus = S_HasResults | S_Multiple | S_Active;
+ } else {
+ newStatus = 0;
+ }
+ }
+ setStatus(newStatus);
+}
+
+bool ExecCatalog::accepts(const QString& str) const
+{
+ //accept if we begin with the triggerWord
+ int length = _triggerWord.length();
+ return str.left(length + 1) == _triggerWord + " ";
+}
+
+void ExecCatalog::readSettings(KConfigBase* config)
+{
+ _triggerWord = config->readEntry("TriggerWord", i18n("Should be short, easy and quick to type", "exec"));
+}
+
+void ExecCatalog::writeSettings(KConfigBase* config)
+{
+ config->writeEntry("TriggerWord", _triggerWord);
+}
+
+QWidget * ExecCatalog::configure()
+{
+ ExecCatalogSettings* settings = new ExecCatalogSettings();
+
+ settings->triggerWordLE->setText(_triggerWord);
+ connect(settings->triggerWordLE, SIGNAL(textChanged(const QString&)), this, SLOT(triggerWordChanged(const QString&)));
+
+ settings->introLabel->setText(i18n("Use with \"%1 exec query\"").arg(_triggerWord));
+
+ return settings;
+}
+
+void ExecCatalog::triggerWordChanged(const QString& triggerWord)
+{
+ _triggerWord = QString(triggerWord);
+}
+
+int ExecCatalog::triggerWordLength()
+{
+ return _triggerWord.length();
+}
+
+void ExecCatalog::reset()
+{
+ _result.setText(QString::null);
+}
+
+#include "execcatalog.moc"