First step to a kpart.

svn path=/trunk/kdebase/nsplugins/; revision=45843
This commit is contained in:
Matthias Hoelzer-Kluepfel 2000-04-07 07:12:24 +00:00
parent d6eaf414cb
commit d1301bf1ae
4 changed files with 203 additions and 1 deletions

View file

@ -1,4 +1,4 @@
SUBDIRS = viewer wrapper
SUBDIRS = viewer #wrapper
INCLUDES = $(all_includes) -I$(top_srcdir)/libltdl
@ -15,3 +15,14 @@ test_LDADD = $(LIB_KDEUI) libnsplugin.a -lXt
NSPluginClassIface.h:
ln -s viewer/NSPluginClassIface.h .
lib_LTLIBRARIES = libplugin.la
libplugin_la_SOURCES = main.cpp plugin_part.cpp
libplugin_la_LDFLAGS = $(all_libraries) -version-info 1:0:0 -module
libplugin_la_LIBADD = $(LIB_KFILE) -lkparts
kdelnkdir = $(kde_servicesdir)
kdelnk_DATA = plugin.desktop

10
nsplugins/plugin.desktop Normal file
View file

@ -0,0 +1,10 @@
[Desktop Entry]
Name=Netscape Plugin
Icon=netscape
MimeType=image/x-xpixmap;application/x-java-applet;application/x-shockwave-flash;
Type=Service
DocPath=aktion/aktion.html
Comment=Netscape plugin viewer
Terminal=0
ServiceTypes=KParts/ReadOnlyPart,Browser/View
X-KDE-Library=libplugin

111
nsplugins/plugin_part.cpp Normal file
View file

@ -0,0 +1,111 @@
#include "plugin_part.h"
#include <kinstance.h>
#include <klocale.h>
#include <kaboutdata.h>
#include <qlabel.h>
extern "C"
{
/**
* This function is the 'main' function of this part. It takes
* the form 'void *init_lib<library name>() It always returns a
* new factory object
*/
void *init_libplugin()
{
return new PluginFactory;
}
};
/**
* We need one static instance of the factory for our C 'main'
* function
*/
KInstance *PluginFactory::s_instance = 0L;
PluginFactory::PluginFactory()
{
}
PluginFactory::~PluginFactory()
{
if (s_instance)
delete s_instance;
s_instance = 0;
}
QObject *PluginFactory::create(QObject *parent, const char *name, const char*,
const QStringList& )
{
QObject *obj = new PluginPart((QWidget*)parent, name);
emit objectCreated(obj);
return obj;
}
KInstance *PluginFactory::instance()
{
if ( !s_instance )
{
KAboutData about("plugin", I18N_NOOP("plugin"), "1.99");
s_instance = new KInstance(&about);
}
return s_instance;
}
PluginPart::PluginPart(QWidget *parent, const char *name)
: KParts::ReadOnlyPart(parent, name)
{
setInstance(PluginFactory::instance());
// create a canvas to insert our widget
QWidget *canvas = new QWidget(parent);
canvas->setFocusPolicy(QWidget::ClickFocus);
setWidget(canvas);
m_extension = new PluginBrowserExtension(this);
// as an example, display a blank white widget
widget = new QLabel(canvas);
widget->setText("plugin!");
widget->setAutoResize(true);
widget->show();
}
PluginPart::~PluginPart()
{
closeURL();
}
bool PluginPart::openFile()
{
widget->setText(m_file);
return true;
}
bool PluginPart::closeURL()
{
return true;
}
PluginBrowserExtension::PluginBrowserExtension(PluginPart *parent)
: KParts::BrowserExtension(parent, "PluginBrowserExtension")
{
}
PluginBrowserExtension::~PluginBrowserExtension()
{
}

70
nsplugins/plugin_part.h Normal file
View file

@ -0,0 +1,70 @@
#ifndef __plugin_part_h__
#define __plugin_part_h__
#include <kparts/browserextension.h>
#include <klibloader.h>
class KInstance;
class PluginBrowserExtension;
class QLabel;
class PluginFactory : public KLibFactory
{
Q_OBJECT
public:
PluginFactory();
virtual ~PluginFactory();
virtual QObject* create(QObject* parent = 0, const char* name = 0,
const char* classname = "QObject",
const QStringList &args = QStringList());
static KInstance *instance();
private:
static KInstance *s_instance;
};
class PluginPart: public KParts::ReadOnlyPart
{
Q_OBJECT
public:
PluginPart(QWidget *parent, const char *name);
virtual ~PluginPart();
protected:
virtual bool openFile();
virtual bool closeURL();
private:
QLabel *widget;
PluginBrowserExtension *m_extension;
};
class PluginBrowserExtension : public KParts::BrowserExtension
{
Q_OBJECT
friend class PluginPart;
public:
PluginBrowserExtension(PluginPart *parent);
virtual ~PluginBrowserExtension();
};
#endif