summaryrefslogtreecommitdiffstats
path: root/konq-plugins/minitools/minitoolsplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'konq-plugins/minitools/minitoolsplugin.cpp')
-rw-r--r--konq-plugins/minitools/minitoolsplugin.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/konq-plugins/minitools/minitoolsplugin.cpp b/konq-plugins/minitools/minitoolsplugin.cpp
new file mode 100644
index 0000000..53f109b
--- /dev/null
+++ b/konq-plugins/minitools/minitoolsplugin.cpp
@@ -0,0 +1,156 @@
+/*
+ Copyright (c) 2003 Alexander Kellett <lypanov@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License (LGPL) as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later
+ version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kaction.h>
+#include <kglobal.h>
+#include <kconfig.h>
+#include <kinstance.h>
+#include <khtml_part.h>
+#include <kgenericfactory.h>
+
+#include <kstandarddirs.h>
+
+#include <krun.h>
+#include <kservice.h>
+
+#include <kpopupmenu.h>
+#include <kbookmarkimporter.h>
+#include <kbookmarkmanager.h>
+
+#include "minitoolsplugin.h"
+
+typedef KGenericFactory<MinitoolsPlugin> MinitoolsPluginFactory;
+K_EXPORT_COMPONENT_FACTORY( libminitoolsplugin, MinitoolsPluginFactory("minitoolsplugin") )
+
+MinitoolsPlugin::MinitoolsPlugin(QObject* parent, const char* name, const QStringList &)
+ : KParts::Plugin(parent, name) {
+ m_part = (parent && parent->inherits( "KHTMLPart" )) ? static_cast<KHTMLPart*>(parent) : 0L;
+
+ m_pMinitoolsMenu = new KActionMenu(i18n("&Minitools"), "minitools", actionCollection(), "minitools");
+
+ m_pMinitoolsMenu->setDelayed(false);
+ m_pMinitoolsMenu->setEnabled(true);
+
+ connect(m_pMinitoolsMenu->popupMenu(), SIGNAL( aboutToShow() ),
+ this, SLOT( slotAboutToShow() ));
+}
+
+MinitoolsPlugin::~MinitoolsPlugin() {
+ ;
+}
+
+void MinitoolsPlugin::slotAboutToShow() {
+
+ m_minitoolsList.clear();
+ KXBELBookmarkImporterImpl importer;
+ connect(&importer, SIGNAL( newBookmark( const QString &, const QCString &, const QString &) ),
+ SLOT( newBookmarkCallback( const QString &, const QCString &, const QString & ) ));
+ connect(&importer, SIGNAL( endFolder() ),
+ SLOT( endFolderCallback() ));
+ QString filename = minitoolsFilename(true);
+ if (!filename.isEmpty() && QFile::exists(filename)) {
+ importer.setFilename(filename);
+ importer.parse();
+ }
+ filename = minitoolsFilename(false);
+ if (!filename.isEmpty() && QFile::exists(filename)) {
+ importer.setFilename(filename);
+ importer.parse();
+ }
+
+ m_pMinitoolsMenu->popupMenu()->clear();
+
+ int count = m_pMinitoolsMenu->popupMenu()->count(); // why not 0???
+ bool gotSep = true; // don't start with a sep
+
+ if (m_minitoolsList.count() > 0) {
+ MinitoolsList::ConstIterator e = m_minitoolsList.begin();
+ for( ; e != m_minitoolsList.end(); ++e ) {
+ if ( ((*e).first == "-")
+ && ((*e).second == "-")
+ ) {
+ if (!gotSep)
+ m_pMinitoolsMenu->popupMenu()->insertSeparator();
+ gotSep = true;
+ count++;
+ } else {
+ QString str = (*e).first;
+ // emsquieezzy thingy?
+ if (str.length() > 48) {
+ str.truncate(48);
+ str.append("...");
+ }
+ m_pMinitoolsMenu->popupMenu()->insertItem(
+ str, this,
+ SLOT(slotItemSelected(int)),
+ 0, ++count );
+ gotSep = false;
+ }
+ }
+ }
+
+ if (!gotSep) {
+ // don't have an extra sep
+ m_pMinitoolsMenu->popupMenu()->insertSeparator();
+ }
+
+ m_pMinitoolsMenu->popupMenu()
+ ->insertItem(i18n("&Edit Minitools"),
+ this, SLOT(slotEditBookmarks()),
+ 0, ++count );
+}
+
+void MinitoolsPlugin::newBookmarkCallback(
+ const QString & text, const QCString & url, const QString &
+) {
+ kdDebug(90150) << "MinitoolsPlugin::newBookmarkCallback" << text << url << endl;
+ m_minitoolsList.prepend(qMakePair(text,url));
+}
+
+void MinitoolsPlugin::endFolderCallback() {
+ kdDebug(90150) << "MinitoolsPlugin::endFolderCallback" << endl;
+ m_minitoolsList.prepend(qMakePair(QString("-"),QCString("-")));
+}
+
+QString MinitoolsPlugin::minitoolsFilename(bool local) {
+ return local ? locateLocal("data", QString::fromLatin1("konqueror/minitools.xml"))
+ : locateLocal("data", QString::fromLatin1("konqueror/minitools-global.xml"));
+}
+
+void MinitoolsPlugin::slotEditBookmarks() {
+ KBookmarkManager *manager = KBookmarkManager::managerForFile(minitoolsFilename(true));
+ manager->slotEditBookmarks();
+}
+
+void MinitoolsPlugin::slotItemSelected(int id) {
+ if (m_minitoolsList.count() == 0)
+ return;
+ QString tmp = m_minitoolsList[id-1].second;
+ QString script = KURL::decode_string(tmp.right(tmp.length() - 11)); // sizeof("javascript:")
+ connect(this, SIGNAL( executeScript(const QString &) ),
+ m_part, SLOT( executeScript(const QString &) ));
+ emit executeScript(script);
+ disconnect(this, SIGNAL( executeScript(const QString &) ), 0, 0);
+}
+
+#include "minitoolsplugin.moc"