/* ============================================================ * QupZilla - WebKit based browser * Copyright (C) 2010-2012 David Rosca * * 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 3 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, see . * ============================================================ */ #include "testplugin.h" #include "qupzilla.h" #include "webview.h" #include "pluginproxy.h" #include #include #include #include TestPlugin::TestPlugin() : QObject() , m_view(0) { // Don't do anything expensive in constructor! // It will be called even if user doesn't have // plugin allowed } PluginSpec TestPlugin::pluginSpec() { PluginSpec spec; spec.name = "Example Plugin"; spec.info = "Example minimal plugin"; spec.description = "Very simple minimal plugin example"; spec.version = "0.0.1"; spec.author = "David Rosca "; spec.icon = QPixmap(":qupzilla.png"); spec.hasSettings = true; return spec; } void TestPlugin::init(const QString &sPath) { qDebug() << __FUNCTION__ << "called"; // This function is called right after plugin is loaded // it will be called even if we return false from testPlugin() // so it is recommended not to call any QupZilla function here m_settingsPath = sPath; QZ_REGISTER_EVENT_HANDLER(PluginProxy::MousePressHandler); } void TestPlugin::unload() { qDebug() << __FUNCTION__ << "called"; // This function will be called when unloading plugin // it will be also called if we return false from testPlugin() } bool TestPlugin::testPlugin() { //This function is called right after init() //There should be some testing if plugin is loaded correctly //If this function returns false, plugin is automatically unloaded return (QupZilla::VERSION == "1.1.8"); } QTranslator* TestPlugin::getTranslator(const QString &locale) { QTranslator* translator = new QTranslator(); translator->load(":/testplugin/locale/" + locale); return translator; } void TestPlugin::showSettings(QWidget* parent) { QDialog* dialog = new QDialog(parent); QPushButton* b = new QPushButton("Example Plugin v0.0.1"); QPushButton* closeButton = new QPushButton(tr("Close")); QLabel* label = new QLabel(); label->setPixmap(QPixmap(":icons/other/about.png")); QVBoxLayout* l = new QVBoxLayout(dialog); l->addWidget(label); l->addWidget(b); l->addWidget(closeButton); dialog->setLayout(l); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(tr("Example Plugin Settings")); dialog->setWindowIcon(QIcon(":qupzilla.png")); connect(closeButton, SIGNAL(clicked()), dialog, SLOT(close())); dialog->show(); } void TestPlugin::populateWebViewMenu(QMenu* menu, WebView* view, const QWebHitTestResult &r) { m_view = view; QString title; if (!r.imageUrl().isEmpty()) { title += " on image"; } if (!r.linkUrl().isEmpty()) { title += " on link"; } if (r.isContentEditable()) { title += " on input"; } menu->addAction(tr("My first plugin action") + title, this, SLOT(actionSlot())); } bool TestPlugin::mousePress(const Qz::ObjectName &type, QObject* obj, QMouseEvent* event) { qDebug() << "mousePress" << type << obj << event; return false; } void TestPlugin::actionSlot() { QMessageBox::information(m_view, tr("Hello"), tr("First plugin action works :-)")); } //Export plugin macro Q_EXPORT_PLUGIN2(ExamplePlugin, TestPlugin)