summaryrefslogtreecommitdiffstats
path: root/qtbrowserplugin/doc
diff options
context:
space:
mode:
authoraavit <qt-info@nokia.com>2010-10-06 12:57:48 +0200
committeraavit <qt-info@nokia.com>2010-10-06 12:57:48 +0200
commit5019ece540d1f9dc08157f67b55d1c4ed896ae39 (patch)
tree2983f19a546336def390f7a43fa4f8426eea8bc8 /qtbrowserplugin/doc
Long live the Qt Solutions archive!
This commit adds the contents of distribution packages of the relevant subset of the Qt Solutions components, generated from the last versions in Perforce.
Diffstat (limited to 'qtbrowserplugin/doc')
-rw-r--r--qtbrowserplugin/doc/html/classic.css284
-rw-r--r--qtbrowserplugin/doc/html/developingplugins.html237
-rw-r--r--qtbrowserplugin/doc/html/images/qt-logo.pngbin0 -> 4075 bytes
-rw-r--r--qtbrowserplugin/doc/html/index.html52
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin-example-grapher.html461
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin-example-scripting.html191
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin-example-trivial.html149
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin.dcf55
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin.index95
-rw-r--r--qtbrowserplugin/doc/html/qtbrowserplugin.qhp70
-rw-r--r--qtbrowserplugin/doc/html/qtnpbindable-members.html45
-rw-r--r--qtbrowserplugin/doc/html/qtnpbindable.html151
-rw-r--r--qtbrowserplugin/doc/html/qtnpfactory-members.html31
-rw-r--r--qtbrowserplugin/doc/html/qtnpfactory.html80
-rw-r--r--qtbrowserplugin/doc/images/qt-logo.pngbin0 -> 4075 bytes
-rw-r--r--qtbrowserplugin/doc/index.qdoc47
-rw-r--r--qtbrowserplugin/doc/qtbrowserplugin.qdoc347
17 files changed, 2295 insertions, 0 deletions
diff --git a/qtbrowserplugin/doc/html/classic.css b/qtbrowserplugin/doc/html/classic.css
new file mode 100644
index 0000000..b8cae8e
--- /dev/null
+++ b/qtbrowserplugin/doc/html/classic.css
@@ -0,0 +1,284 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Arial, Geneva, Helvetica, sans-serif;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+
+h3.fn,span.fn
+{
+ background-color: #eee;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ddd;
+ font-weight: bold;
+ padding: 6px 0px 6px 10px;
+ margin: 42px 0px 0px 0px;
+}
+
+hr {
+ border: 0;
+ color: #a0a0a0;
+ background-color: #ccc;
+ height: 1px;
+ width: 100%;
+ text-align: left;
+ margin: 34px 0px 34px 0px;
+}
+
+table.valuelist {
+ border-width: 1px 1px 1px 1px;
+ border-style: solid;
+ border-color: #dddddd;
+ border-collapse: collapse;
+ background-color: #f0f0f0;
+}
+
+table.indextable {
+ border-width: 1px 1px 1px 1px;
+ border-style: solid;
+ border-collapse: collapse;
+ background-color: #f0f0f0;
+ border-color:#555;
+ font-size: 100%;
+}
+
+table td.largeindex {
+ border-width: 1px 1px 1px 1px;
+ border-collapse: collapse;
+ background-color: #f0f0f0;
+ border-color:#555;
+ font-size: 120%;
+}
+
+table.valuelist th {
+ border-width: 1px 1px 1px 2px;
+ padding: 4px;
+ border-style: solid;
+ border-color: #666;
+ color:white;
+ background-color:#666;
+}
+
+th.titleheader {
+ border-width: 1px 0px 1px 0px;
+ padding: 2px;
+ border-style: solid;
+ border-color: #666;
+ color:white;
+ background-color:#555;
+ background-image:url('images/gradient.png')};
+ background-repeat: repeat-x;
+ font-size: 100%;
+}
+
+
+th.largeheader {
+ border-width: 1px 0px 1px 0px;
+ padding: 4px;
+ border-style: solid;
+ border-color: #444;
+ color:white;
+ background-color:#555555;
+ font-size: 120%;
+}
+
+p {
+
+ margin-left: 4px;
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+a:link
+{
+ color: #0046ad;
+ text-decoration: none
+}
+
+a:visited
+{
+ color: #672967;
+ text-decoration: none
+}
+
+a.obsolete
+{
+ color: #661100;
+ text-decoration: none
+}
+
+a.compat
+{
+ color: #661100;
+ text-decoration: none
+}
+
+a.obsolete:visited
+{
+ color: #995500;
+ text-decoration: none
+}
+
+a.compat:visited
+{
+ color: #995500;
+ text-decoration: none
+}
+
+body
+{
+ background: #ffffff;
+ color: black
+}
+
+table.generic, table.annotated
+{
+ border-width: 1px;
+ border-color:#bbb;
+ border-style:solid;
+ border-collapse:collapse;
+}
+
+table td.memItemLeft {
+ width: 180px;
+ padding: 2px 0px 0px 8px;
+ margin: 4px;
+ border-width: 1px;
+ border-color: #E0E0E0;
+ border-style: none;
+ font-size: 100%;
+ white-space: nowrap
+}
+
+table td.memItemRight {
+ padding: 2px 8px 0px 8px;
+ margin: 4px;
+ border-width: 1px;
+ border-color: #E0E0E0;
+ border-style: none;
+ font-size: 100%;
+}
+
+table tr.odd {
+ background: #f0f0f0;
+ color: black;
+}
+
+table tr.even {
+ background: #e4e4e4;
+ color: black;
+}
+
+table.annotated th {
+ padding: 3px;
+ text-align: left
+}
+
+table.annotated td {
+ padding: 3px;
+}
+
+table tr pre
+{
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: 0px;
+ padding-right: 0px;
+ border: none;
+ background: none
+}
+
+tr.qt-style
+{
+ background: #96E066;
+ color: black
+}
+
+body pre
+{
+ padding: 0.2em;
+ border: #e7e7e7 1px solid;
+ background: #f1f1f1;
+ color: black
+}
+
+table tr.qt-code pre
+{
+ padding: 0.2em;
+ border: #e7e7e7 1px solid;
+ background: #f1f1f1;
+ color: black
+}
+
+span.preprocessor, span.preprocessor a
+{
+ color: darkblue;
+}
+
+span.comment
+{
+ color: darkred;
+ font-style: italic
+}
+
+span.string,span.char
+{
+ color: darkgreen;
+}
+
+.title
+{
+ text-align: center
+}
+
+.subtitle
+{
+ font-size: 0.8em
+}
+
+.small-subtitle
+{
+ font-size: 0.65em
+}
+
+.qmlitem {
+ padding: 0;
+}
+
+.qmlname {
+ white-space: nowrap;
+}
+
+.qmltype {
+ text-align: center;
+ font-size: 160%;
+}
+
+.qmlproto {
+ background-color: #eee;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ddd;
+ font-weight: bold;
+ padding: 6px 10px 6px 10px;
+ margin: 42px 0px 0px 0px;
+}
+
+.qmlreadonly {
+ float: right;
+ color: red
+}
+
+.qmldoc {
+}
+
+*.qmlitem p {
+}
diff --git a/qtbrowserplugin/doc/html/developingplugins.html b/qtbrowserplugin/doc/html/developingplugins.html
new file mode 100644
index 0000000..e2db7bf
--- /dev/null
+++ b/qtbrowserplugin/doc/html/developingplugins.html
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- qtbrowserplugin.qdoc -->
+<head>
+ <title>Developing Plugins</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">Developing Plugins<br /><span class="subtitle"></span>
+</h1>
+<p>The QtBrowserPlugin solution makes it easy to write browser plugins that can be used in Mozilla FireFox, Safari, Opera, Google Chrome, <a href="http://qt.nokia.com/doc/4.6/qtwebkit.html">QtWebKit</a> and any other web browser that supports the &quot;Netscape Plugin API&quot;, NPAPI:</p>
+<p><a href="http://en.wikipedia.org/wiki/NPAPI">http://en.wikipedia.org/wiki/NPAPI</a></p>
+<p><a href="http://developer.mozilla.org/en/Plugins">http://developer.mozilla.org/en/Plugins</a></p>
+<p>Microsoft Internet Explorer does not support this API. However, you can use the <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a> framework to turn your plugin into an ActiveX control, that will work as an IE plugin. Thus, QtBrowserPlugin makes it possible to create a single plugin DLL that will work with all popular browsers on Windows.</p>
+<ul><li><a href="#implementing-plugins">Implementing plugins</a></li>
+<ul><li><a href="#windows-specific-notes">Windows specific notes</a></li>
+<ul><li><a href="#enabling-activex-support">Enabling ActiveX support</a></li>
+</ul>
+<li><a href="#unix-specific-notes">Unix specific notes</a></li>
+<ul><li><a href="#known-issues-on-unix-linux">Known Issues on Unix/Linux</a></li>
+</ul>
+<li><a href="#mac-osx-specific-notes">Mac OSX specific notes</a></li>
+<ul><li><a href="#known-issues-on-mac">Known Issues on Mac</a></li>
+</ul>
+</ul>
+<li><a href="#installing-and-using-plugins">Installing and using Plugins</a></li>
+<ul><li><a href="#embedding-the-plugin-on-a-web-page">Embedding the plugin on a web page.</a></li>
+<ul><li><a href="#plugins-with-data">Plugins with data:</a></li>
+<li><a href="#plugins-without-data">Plugins without data:</a></li>
+<li><a href="#tags-not-working-equally-with-all-browsers">Tags not working equally with all browsers</a></li>
+</ul>
+<li><a href="#browser-full-page-view-of-a-plugin">Browser full-page view of a plugin</a></li>
+<li><a href="#scripting">Scripting</a></li>
+<ul><li><a href="#javascript-calling-slots-and-properties">JavaScript calling slots and properties</a></li>
+<li><a href="#the-plugin-calling-javascript">The plugin calling JavaScript</a></li>
+<li><a href="#using-plugins-in-forms">Using plugins in forms</a></li>
+</ul>
+</ul>
+</ul>
+<a name="implementing-plugins"></a>
+<h2>Implementing plugins</h2>
+<p>Since any <a href="http://qt.nokia.com/doc/4.6/qwidget.html">QWidget</a> or <a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a> subclass can be turned into a plugin with little effort it is usually easiest to do the development as a stand-alone Qt application - debugging plugins can be cumbersome.</p>
+<p>Make sure that the subclass(es) you want to export use the <a href="http://qt.nokia.com/doc/4.6/qobject.html#Q_OBJECT">Q_OBJECT</a> macro and provide a default constructor. Use the Q_CLASSINFO macro to specify a semicolon-delimited list of the MIME types each of your classes supports, and export the classes through the QTNPFACTORY macros:</p>
+<pre> QTNPFACTORY_BEGIN(&quot;Qt-based Graph Plugin&quot;, &quot;A Qt-based NSAPI plug-in that graphs numeric data&quot;);
+ QTNPCLASS(Graph)
+ QTNPFACTORY_END()</pre>
+<p>This should be done only once, in one of the source files. If your plugin needs to export multiple classes (i.e&#x2e; to handle different sets of MIME types), make one QTNPCLASS line for each of them.</p>
+<p>Include the <tt>qtbrowserplugin.pri</tt> in your .pro file, and regenerate the makefile with qmake. The resulting makefile will generate a shared library that the browsers will be able to load as a plugin.</p>
+<a name="windows-specific-notes"></a>
+<h3>Windows specific notes</h3>
+<p>On Windows, the DLL will have <tt>&quot;np&quot;</tt> prepended to its name - this is required by all browsers to recognize the library as a plugin.</p>
+<p>On Windows it is required to link a version resource into the plugin library. To do that, create an .rc file (a plain-text file) and add it to the <tt>RC_FILE</tt> variable of your project. The .rc file needs to contain a version description like here:</p>
+<pre> 1 VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+ #ifdef _DEBUG
+ FILEFLAGS 0x1L
+ #else
+ FILEFLAGS 0x0L
+ #endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+ BEGIN
+ BLOCK &quot;StringFileInfo&quot;
+ BEGIN
+ BLOCK &quot;040904e4&quot;
+ BEGIN
+ VALUE &quot;Comments&quot;, &quot;\0&quot;
+ VALUE &quot;CompanyName&quot;, &quot;Nokia\0&quot;
+ VALUE &quot;FileDescription&quot;, &quot;grapher\0&quot;
+ VALUE &quot;FileExtents&quot;, &quot;g1n\0&quot;
+ VALUE &quot;FileOpenName&quot;, &quot;Graphable data (*.g1n)\0&quot;
+ VALUE &quot;FileVersion&quot;, &quot;1, 0, 0, 1\0&quot;
+ VALUE &quot;InternalName&quot;, &quot;grapher\0&quot;
+ VALUE &quot;LegalTrademarks&quot;, &quot;\0&quot;
+ VALUE &quot;MIMEType&quot;, &quot;application/x-graphable\0&quot;
+ VALUE &quot;OriginalFilename&quot;, &quot;grapher.dll\0&quot;
+ VALUE &quot;PrivateBuild&quot;, &quot;\0&quot;
+ VALUE &quot;ProductName&quot;, &quot;Nokia grapher QtBrowserPlugin example\0&quot;
+ VALUE &quot;ProductVersion&quot;, &quot;1, 0, 0, 1\0&quot;
+ VALUE &quot;SpecialBuild&quot;, &quot;\0&quot;
+ END
+ END
+ BLOCK &quot;VarFileInfo&quot;
+ BEGIN
+ VALUE &quot;Translation&quot;, 0x409, 1252
+ END
+ END</pre>
+<a name="enabling-activex-support"></a>
+<h4>Enabling ActiveX support</h4>
+<p>To build a plugin project with ActiveX support, use <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a>'s <a href="http://qt.nokia.com/doc/4.6/qaxserver.html">QAxServer</a> module by adding the following line to your project:</p>
+<p>CONFIG += qaxserver</p>
+<p>Also, add the following line to your resource file</p>
+<p><tt>1 TYPELIB &quot;thisfile.rc&quot;</tt></p>
+<p>In your plugin code, use Q_CLASSINFO and the <a href="http://qt.nokia.com/doc/4.6/qaxfactory.html">QAxFactory</a> macros as usual; refer to the <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a> documentation.</p>
+<p>When you build the plugin, then <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a> will perform the build steps required to turn the plugin library into an ActiveX control server which provides your plugin classes not only to browsers supporting the npruntime API, but also to browsers supporting ActiveX controls (i.e&#x2e; Internet Explorer).</p>
+<p>However, note that calling <a href="qtnpbindable.html">QtNPBindable</a> APIs will not do anything when the browser does not support the npruntime API. In some cases, <a href="http://qt.nokia.com/doc/4.6/qaxbindable.html">QAxBindable</a> provides equivalent APIs (i.e&#x2e; for reading incoming data).</p>
+<a name="unix-specific-notes"></a>
+<h3>Unix specific notes</h3>
+<p>On Unix/Linux, QtBrowserPlugin uses the XEmbed protocol. Hence, plugins will only work for browsers that support this protocol. This is true for the recent versions of all the most popular browsers. For Opera, it requires at least version 9.6, <a href="http://qt.nokia.com/doc/4.6/qtwebkit.html">QtWebKit</a> requires at least Qt version 4.5&#x2e;</p>
+<a name="known-issues-on-unix-linux"></a>
+<h4>Known Issues on Unix/Linux</h4>
+<p>In some rare cases, symbol clash with other instances of the Qt libraries may occur. That is, if the browser itself uses Qt, or other plugins do, and these are loaded into the same address space, your plugin's calls to the Qt API may end up in a different version of the Qt library than what was intended, leading to undefined results.</p>
+<p>If you should hit this problem, it is easily worked around by linking your plugin to Qt libraries that are either statically built, or that is built to use a separate namespace (by adding the <tt>-qtnamespace=SomeNamespace</tt> option to Qt's <tt>configure</tt> command).</p>
+<a name="mac-osx-specific-notes"></a>
+<h3>Mac OSX specific notes</h3>
+<p>NOTE: Mac support is experimental only! Expect failure with recent versions of Qt!</p>
+<p>To build a browser plugin on Mac, two plain-text resource files are needed: an <tt>Info.plist</tt> file and a <tt>.r</tt> file. To create these files, it is easiest to use the ones provided with the QtBrowserPlugin examples as templates, editing as necessary. Then add them to your project (<tt>.pro</tt> file) like this:</p>
+<pre> QMAKE_INFO_PLIST = Info.plist
+ REZ_FILES += grapher.r
+ rsrc_files.files = grapher.rsrc
+ rsrc_files.path = Contents/Resources
+ QMAKE_BUNDLE_DATA += rsrc_files</pre>
+<a name="known-issues-on-mac"></a>
+<h4>Known Issues on Mac</h4>
+<ul>
+<li>After navigating away from the webpage with the plugin, and then back again, the plugin no longer shows up or runs. No workaround currently known.</li>
+</ul>
+<a name="installing-and-using-plugins"></a>
+<h2>Installing and using Plugins</h2>
+<p>Most browsers provide a UI to display all loaded plugins, either as a menu choice, and/or by navigating to the url <tt>about:plugins</tt>. Use this functionality to diagnose problems.</p>
+<p>The plugin will need to load the Qt libraries at runtime (unless they are statically linked into the plugin). Hence, the required Qt dynamic libraries (at least <a href="http://qt.nokia.com/doc/4.6/qtcore.html">QtCore</a>, <a href="http://qt.nokia.com/doc/4.6/qtgui.html">QtGui</a>, and <a href="http://qt.nokia.com/doc/4.6/qtnetwork.html">QtNetwork</a>) must be located in a directory which the system searches for DLLs. This may or may not include the directory where the plugin itself is located, depending on the OS and browser.</p>
+<p>Windows, Netscape-style browsers: To install the plugin, copy the plugin library in the &quot;plugins&quot; directory of the browser. See <tt>src/qtbrowserplugin.pri</tt> for some typical paths. Typically, it is sufficient to install it for one browser, and the others will find it. Ref. <a href="http://developer.mozilla.org/en/Plugins/The_First_Install_Problem">http://developer.mozilla.org/en/Plugins/The_First_Install_Problem</a></p>
+<p>Windows, Internet Explorer: The Makefile generated by qmake by default runs the necessary commands to register the plugin as an ActiveX server (if <tt>CONFIG</tt> includes <tt>qaxserver</tt>). To unregister, use the following command:</p>
+<pre> c:\Qt-x.y.z\bin\idc.exe path\to\myplugin.dll /unregserver</pre>
+<p>Mac: The build will result in a directory called <tt>myplugin.plugin</tt>. To install, copy this directory with all contents to <tt>/Library/Internet Plugins</tt>.</p>
+<p>Unix: Copy the file <tt>myplugin.so</tt> to the browser or system plugin directory, typically <tt>/usr/lib/browser-plugins</tt>. The path to the Qt libraries may be set in the LD_LIBRARY_PATH environment variable of the browser process.</p>
+<a name="embedding-the-plugin-on-a-web-page"></a>
+<h3>Embedding the plugin on a web page.</h3>
+<p>Browsers vary slightly in their support for different plugin-embedding HTML tags. The following should work for most popular browsers.</p>
+<a name="plugins-with-data"></a>
+<h4>Plugins with data:</h4>
+<p>Plugins can be initialized with a data file, which will be delivered at some point after plugin creation to the plugin through the <a href="qtnpbindable.html#readData">QtNPBindable::readData</a>() virtual function. (This applies to <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a>-based plugins in IE as well).</p>
+<p>Assuming the MIME type is <tt>application/x-graphable</tt>, with the extension <tt>g1n</tt>:</p>
+<pre> &lt;object type=&quot;application/x-graphable&quot; data=&quot;graph.g1n&quot; width=50% height=300&gt;
+ Plugin not installed!
+ &lt;/object&gt;</pre>
+<p>or</p>
+<pre> &lt;object data=&quot;http:<span class="comment">//qt.nokia.com/doc/3.3/graph.g1n&quot; width=50% height=300&gt;</span>
+ Plugin not installed!
+ &lt;/object&gt;</pre>
+<p>Note that some browsers will not display or immediately unload the plugin if the data file does not exist, while other browsers will display the plugin without ever calling readData().</p>
+<p>If the plugin has declared a Q_PROPERTY called <tt>src</tt>, the setter function for this property will be called at instantiation time with the data URL as parameter.</p>
+<a name="plugins-without-data"></a>
+<h4>Plugins without data:</h4>
+<p>Assuming the (dummy) MIME type is <tt>trivial/very</tt>:</p>
+<pre> &lt;embed type=&quot;trivial/very&quot; [property]=[value]&gt;</pre>
+<a name="tags-not-working-equally-with-all-browsers"></a>
+<h4>Tags not working equally with all browsers</h4>
+<ul>
+<li><tt>&lt;object classid=...&gt;</tt> Only IE supports this.</li>
+<li><tt>&lt;embed src=...&gt;</tt> IE will not call readData(), but the <tt>src</tt> property will be set, so manual data loading is possible.</li>
+<li><tt>&lt;object type=... data=...&gt;&lt;param ...&gt;</tt> Ditto.</li>
+<li><tt>&lt;object type=...&gt;</tt> Some browsers do not display plugins without <tt>data</tt> attribute</li>
+</ul>
+<p>For additional information, see <a href="http://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics#Using_HTML_to_Display_Plug-ins">http://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics#Using_HTML_to_Display_Plug-ins</a></p>
+<a name="browser-full-page-view-of-a-plugin"></a>
+<h3>Browser full-page view of a plugin</h3>
+<p>If files viewed by a plugin are provided by an HTTP server (using a <tt>http:<span class="comment">//...</span></tt> URL) then the server must be configured to send the correct MIME type for the file, e.g&#x2e; by editing Apache's <tt>mime.types</tt> file. (Not required for IE).</p>
+<p>If the files are viewed via a <tt>file:<span class="comment">//...</span></tt> URL (e.g&#x2e; by the user opening the data file with <tt>File-&gt;Open</tt>), then the browser will use the filename extension to decide the file type (and hence the plugin to load).</p>
+<p>In the full-page case, IE will not call readData(), but the <tt>src</tt> property will be set, so manual data loading is possible. See the <tt>grapher</tt> example.</p>
+<a name="scripting"></a>
+<h3>Scripting</h3>
+<p>Plugins embedded into browsers that support the respecive NPAPI extensions as well as ActiveX controls can be accessed from JavaScript in the HTML page.</p>
+<pre> &lt;object id=&quot;ScriptableObject&quot; TYPE=trivial/very WIDTH=200 HEIGHT=100 text=&quot;Very Scriptable!&quot;&gt; &lt;/object&gt;
+
+ &lt;script language=JavaScript&gt;</pre>
+<p>Before the object can be accessed, some browsers require it to be located based on the <tt>id</tt> in the <tt>object</tt> tag.</p>
+<a name="javascript-calling-slots-and-properties"></a>
+<h4>JavaScript calling slots and properties</h4>
+<pre> var ScriptableObject = document.getElementById('ScriptableObject');</pre>
+<p>Object properties and public slots can then be accessed as usual. The QtBrowserPlugin implementation supports properties and slots that have parameters and types that <a href="http://qt.nokia.com/doc/4.6/qvariant.html">QVariant</a> can be convert to and from strings, or that are QObjects. Only public slots and scriptable properties are exposed. If the <a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a> class sets a &quot;ToSuperClass&quot; Q_CLASSINFO, then only slots and properties up to the specified superclass are exposed. See the <a href="http://qt.nokia.com/doc/4.6/qaxserver.html">QAxServer</a> documentation provided with Qt for more information.</p>
+<a name="the-plugin-calling-javascript"></a>
+<h4>The plugin calling JavaScript</h4>
+<p>JavaScript functions can be connected to Qt signals emitted by the Qt plugin object.</p>
+<pre> ScriptableObject.text = 'This is some text'
+
+ var oldText
+ ScriptableObject.mouseDown = function()
+ {
+ oldText = ScriptableObject.text
+ ScriptableObject.text = 'Mouse Down'
+ }
+
+ ScriptableObject.mouseMove = function(x, y)
+ {
+ ScriptableObject.text = 'Mouse at ' + x + ',' + y
+ }
+
+ ScriptableObject.mouseUp = function()
+ {
+ ScriptableObject.text = oldText
+ }
+ &lt;/script&gt;</pre>
+<p>Assign a function to a property of the object with the same name as the signal. Overloads (i.e&#x2e; two signal with the same name, but different parameters) are not possible.</p>
+<pre> &lt;!-- Special hookup code required for Internet Explorer --&gt;
+ &lt;!--[if IE]&gt;
+ &lt;script language=JScript&gt;
+ function ScriptableObject::mouseDown() { ScriptableObject.mouseDown() }
+ function ScriptableObject::mouseMove(x, y) { ScriptableObject.mouseMove(x, y) }
+ function ScriptableObject::mouseUp() { ScriptableObject.mouseUp() }
+ &lt;/script&gt;</pre>
+<p>Internet Explorer requires a special syntax that is not compatible with other browsers, but the IE-specific function can just call the other functions.</p>
+<a name="using-plugins-in-forms"></a>
+<h4>Using plugins in forms</h4>
+<p>Plugin objects can be embedded as form elements. To specify which property value the plugin should report to the form upon submission, specify the name of the property as the DefaultProperty using a Q_CLASSINFO entry:</p>
+<pre> Q_OBJECT
+ Q_CLASSINFO(&quot;MIME&quot;, &quot;trivial/very:xxx:Trivial and useless&quot;)
+ Q_CLASSINFO(&quot;DefaultProperty&quot;, &quot;text&quot;)</pre>
+<p>In the HTML page, embed the object as usual:</p>
+<pre> &lt;form method=&quot;get&quot; action=&quot;http:<span class="comment">//www.server.com/search.asp&quot;&gt;</span>
+ &lt;table&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Search:&lt;/td&gt;
+ &lt;td&gt;&lt;object type=&quot;trivial/very&quot; name=&quot;text&quot; WIDTH=100 HEIGHT=20&gt;&lt;/object&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;input type=&quot;submit&quot; value=&quot;Check&quot;&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/table&gt;
+ &lt;/form&gt;</pre>
+<p>Clicking the button will make the browser request a URL</p>
+<p><tt>http:<span class="comment">//www.server.com/search.asp?text=[value from object]</span></tt></p>
+<p>The property type needs to be convertible to a string.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/images/qt-logo.png b/qtbrowserplugin/doc/html/images/qt-logo.png
new file mode 100644
index 0000000..794162f
--- /dev/null
+++ b/qtbrowserplugin/doc/html/images/qt-logo.png
Binary files differ
diff --git a/qtbrowserplugin/doc/html/index.html b/qtbrowserplugin/doc/html/index.html
new file mode 100644
index 0000000..161fa1d
--- /dev/null
+++ b/qtbrowserplugin/doc/html/index.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- index.qdoc -->
+<head>
+ <title>Browser Plugin</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">Browser Plugin<br /><span class="subtitle"></span>
+</h1>
+<a name="description"></a>
+<h2>Description</h2>
+<p>The QtBrowserPlugin solution is useful for implementing plugins for web browser.</p>
+<p>The project provides a framework that makes it simple to export widgets and objects as plugins for web browsers supporting the Netscape LiveConnect APIs.</p>
+<p>Supported web browsers are Netscape, Mozilla FireFox and Opera. Internet Explorer is supported when the plugin supports ActiveX via <a href="http://qt.nokia.com/doc/4.6/activeqt.html">ActiveQt</a>.</p>
+<a name="guidelines"></a>
+<h2>Guidelines</h2>
+<ul>
+<li><a href="developingplugins.html">Developing Plugins</a></li>
+</ul>
+<a name="classes"></a>
+<h2>Classes</h2>
+<ul>
+<li><a href="qtnpbindable.html">QtNPBindable</a></li>
+<li><a href="qtnpfactory.html">QtNPFactory</a></li>
+</ul>
+<a name="examples"></a>
+<h2>Examples</h2>
+<ul>
+<li><a href="qtbrowserplugin-example-trivial.html">A trivial &quot;Hello, World&quot; plugin.</a></li>
+<li><a href="qtbrowserplugin-example-scripting.html">A webpage that combines javascript and the trivial plugin.</a></li>
+<li><a href="qtbrowserplugin-example-grapher.html">A plugin widget displaying a data file as a graph.</a></li>
+</ul>
+<a name="tested-platforms"></a>
+<h2>Tested platforms</h2>
+<ul>
+<li>Qt 4.4, 4.5 / Windows XP / MSVC.NET 2008</li>
+<li>[experimental] Qt 4.4, 4.5 / Linux / gcc</li>
+</ul>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin-example-grapher.html b/qtbrowserplugin/doc/html/qtbrowserplugin-example-grapher.html
new file mode 100644
index 0000000..68230d3
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin-example-grapher.html
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- grapher.qdoc -->
+<head>
+ <title>Grapher Plugin</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">Grapher Plugin<br /><span class="subtitle"></span>
+</h1>
+ <object type="application/x-graphable" data="http://qt.nokia.com/doc/3.3/graph.g1n" WIDTH=250 HEIGHT=250></object>
+ <p>Implementation:</p>
+<pre><span class="comment"> /****************************************************************************
+ **
+ ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ **
+ ** Contact: Nokia Corporation (qt-info@nokia.com)
+ **
+ ** This file is part of a Qt Solutions component.
+ **
+ ** You may use this file under the terms of the BSD license as follows:
+ **
+ ** &quot;Redistribution and use in source and binary forms, with or without
+ ** modification, are permitted provided that the following conditions are
+ ** met:
+ ** * Redistributions of source code must retain the above copyright
+ ** notice, this list of conditions and the following disclaimer.
+ ** * Redistributions in binary form must reproduce the above copyright
+ ** notice, this list of conditions and the following disclaimer in
+ ** the documentation and/or other materials provided with the
+ ** distribution.
+ ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+ ** the names of its contributors may be used to endorse or promote
+ ** products derived from this software without specific prior written
+ ** permission.
+ **
+ ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ** &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&quot;
+ **
+ ****************************************************************************/</span>
+
+ #include &lt;QtGui&gt;
+ #include &lt;qtbrowserplugin.h&gt;
+
+ #ifdef QAXSERVER
+ #include &lt;ActiveQt/QAxBindable&gt;
+ #include &lt;ActiveQt/QAxFactory&gt;
+ #include &lt;qt_windows.h&gt;
+ #endif
+
+ class Graph : public QWidget, public QtNPBindable
+ #ifdef QAXSERVER
+ , public QAxBindable
+ #endif
+ {
+ Q_OBJECT
+ Q_ENUMS(GraphStyle)
+ Q_PROPERTY(GraphStyle graphStyle READ graphStyle WRITE setGraphStyle)
+ Q_PROPERTY(QString src READ dataSourceUrl WRITE setDataSourceUrl)
+
+ Q_CLASSINFO(&quot;ClassID&quot;, &quot;{2e5b2715-46b2-4831-ba9b-6a3b195d5ec8}&quot;)
+ Q_CLASSINFO(&quot;InterfaceID&quot;, &quot;{94581136-3c0c-46cc-97a1-066061356d43}&quot;)
+ Q_CLASSINFO(&quot;EventsID&quot;, &quot;{8c191b77-1894-45c7-9d6b-201dede95410}&quot;)
+
+ Q_CLASSINFO(&quot;MIME&quot;, &quot;application/x-graphable:g1n:Graphable ASCII numeric data&quot;)
+ public:
+ Graph(QWidget *parent = 0);
+ ~Graph();
+
+ enum GraphStyle
+ {
+ Pie,
+ Bar
+ };
+ void setGraphStyle(GraphStyle style);
+ GraphStyle graphStyle() const;
+
+ void setDataSourceUrl(const QString &amp;url);
+ QString dataSourceUrl() const;
+
+ bool readData(QIODevice *source, const QString &amp;format);
+ bool writeData(QIODevice *sink);
+
+ void transferComplete(const QString &amp;url, int id, Reason r);
+
+ protected:
+ void timerEvent(QTimerEvent*);
+ void enterEvent(QEvent *);
+ void leaveEvent(QEvent *);
+ void paintEvent(QPaintEvent*);
+ void mousePressEvent(QMouseEvent *me);
+
+ void paintWait();
+ void paintBar(QPaintEvent*);
+ void paintPie(QPaintEvent*);
+
+ private slots:
+ void stylePie();
+ void styleBar();
+ void aboutPlugin();
+ void aboutData();
+ void aboutQt();
+ void aboutQtDevelopmentFrameworks();
+
+ private:
+
+ struct Datum {
+ double value;
+ QString label;
+ };
+ QList&lt;Datum&gt; data;
+ void processData(QTextStream &amp;in);
+
+ QMenu *menu;
+ QStatusBar *statusbar;
+ QAction *pie, *bar;
+
+ int pieRotation;
+ int pieTimer;
+ GraphStyle m_style;
+
+ <span class="comment">// Developer information for the About Data dialog:</span>
+ QString sourceUrl;
+ int lastReqId, lastConfId;
+ QString lastConfUrl;
+ Reason lastConfReason;
+ };
+
+ Graph::Graph(QWidget *parent)
+ : QWidget(parent), pieRotation(0), pieTimer(0)
+ {
+ menu = new QMenu(this);
+ QMenu *styles = menu-&gt;addMenu(&quot;&amp;Styles&quot;);
+
+ pie = styles-&gt;addAction(&quot;&amp;Pie&quot;,this,SLOT(stylePie()));
+ pie-&gt;setShortcut(QString(&quot;Ctrl+P&quot;));
+ pie-&gt;setCheckable(true);
+
+ bar = styles-&gt;addAction(&quot;&amp;Bar&quot;, this, SLOT(styleBar()));
+ bar-&gt;setShortcut(QString(&quot;Ctrl+B&quot;));
+ bar-&gt;setCheckable(true);
+
+ QActionGroup *group = new QActionGroup(this);
+ group-&gt;setExclusive(true);
+
+ group-&gt;addAction(pie);
+ group-&gt;addAction(bar);
+
+ QMenu* help = menu-&gt;addMenu(&quot;&amp;Help&quot;);
+ help-&gt;addAction(&quot;About &amp;plugin...&quot;, this, SLOT(aboutPlugin()))-&gt;setShortcut(QString(&quot;Ctrl+A&quot;));
+ help-&gt;addAction(&quot;About &amp;data...&quot;, this, SLOT(aboutData()));
+ help-&gt;addAction(&quot;About &amp;Qt...&quot;, this, SLOT(aboutQt()));
+ help-&gt;addAction(&quot;About Qt &amp;Development Frameworks...&quot;, this, SLOT(aboutQtDevelopmentFrameworks()));
+
+ QShortcut *shortcut = new QShortcut(QKeySequence(&quot;Ctrl+F5&quot;), this);
+ connect(shortcut, SIGNAL(activated()), this, SLOT(aboutQt()));
+
+ statusbar = new QStatusBar(this);
+
+ setFocusPolicy(Qt::StrongFocus);
+ setGraphStyle(Pie);
+
+ QPalette pal = palette();
+ pal.setColor(QPalette::Window,Qt::white);
+ setPalette(pal);
+
+ lastReqId = 0;
+ lastConfId = 0;
+ lastConfReason = ReasonUnknown;
+ }
+
+ Graph::~Graph()
+ {
+ }
+
+ void Graph::setGraphStyle(GraphStyle style)
+ {
+ if (pieTimer)
+ killTimer(pieTimer);
+
+ m_style = style;
+ switch(m_style) {
+ case Pie:
+ pieTimer = startTimer(50);
+ pie-&gt;setChecked(true);
+ break;
+ case Bar:
+ bar-&gt;setChecked(true);
+ break;
+ }
+
+ repaint();
+ }
+
+ Graph::GraphStyle Graph::graphStyle() const
+ {
+ return m_style;
+ }
+
+ void Graph::setDataSourceUrl(const QString &amp;url)
+ {
+ sourceUrl = url;
+
+ #ifdef QAXSERVER
+ <span class="comment">// IE does not call our readData() if plugin is fullpage, so do it here</span>
+ if (QAxFactory::isServer() &amp;&amp; clientSite()) {
+ TCHAR cFileName[512];
+ if (URLDownloadToCacheFile(0, url.utf16(), cFileName, 512, 0, 0) == S_OK)
+ readData(&amp;QFile(QString::fromUtf16(cFileName)), QString());
+ }
+ #endif
+ }
+
+ QString Graph::dataSourceUrl() const
+ {
+ return sourceUrl;
+ }
+
+ void Graph::aboutPlugin()
+ {
+ openUrl(&quot;http:<span class="comment">//qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtbrowserplugin/&quot;);</span>
+ }
+
+ void Graph::aboutData()
+ {
+ QString page = parameters().value(&quot;datapage&quot;).toString();
+ if (!page.isEmpty()) {
+ openUrl(page);
+ } else {
+ QByteArray table;
+ table += &quot;&lt;b&gt;Data loaded from &quot; + sourceUrl.toLatin1() + &quot;&lt;/b&gt;\n&quot;;
+ table += &quot;&lt;p&gt;This data has been loaded with streammode = '&quot;;
+ table += parameters().contains(&quot;streammode&quot;) ? parameters().value(&quot;streammode&quot;).toByteArray() : QByteArray(&quot;Default&quot;);
+ table += &quot;'&lt;/p&gt;\n&quot;;
+ table += &quot;&lt;table&gt;\n&quot;;
+ for (int i = 0; i &lt; data.count(); ++i) {
+ Datum datum = data.at(i);
+ table += &quot;&lt;tr&gt;&lt;td&gt;&quot; + datum.label + &quot;&lt;/td&gt;&lt;td&gt;&quot; + QString::number(datum.value) + &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
+ }
+ table += &quot;&lt;/table&gt;\n&quot;;
+
+ table += &quot;&lt;p&gt;&lt;b&gt;OpenURL() API usage information:&lt;/b&gt;\n&quot;;
+ table += &quot;&lt;br&gt;Last OpenURL() request id: &quot; + QString::number(lastReqId);
+ table += &quot;&lt;br&gt;Last confirmation id: &quot; + QString::number(lastConfId);
+ table += &quot; Reason: &quot; + QString::number((int)lastConfReason);
+ table += &quot;&lt;br&gt;URL: &quot; + lastConfUrl;
+ table += &quot;&lt;/p&gt;\n&quot;;
+ QMessageBox::information(this, &quot;Data information&quot;, QLatin1String(table));
+ }
+ }
+
+ void Graph::transferComplete(const QString &amp;url, int id, Reason r)
+ {
+ lastConfId = id;
+ lastConfUrl = url;
+ lastConfReason = r;
+ }
+
+ void Graph::aboutQt()
+ {
+ QMessageBox::aboutQt(this);
+ }
+
+ void Graph::aboutQtDevelopmentFrameworks()
+ {
+ lastReqId = openUrl(&quot;http:<span class="comment">//qt.nokia.com&quot;);</span>
+ }
+
+ void Graph::stylePie()
+ {
+ setGraphStyle(Pie);
+ }
+
+ void Graph::styleBar()
+ {
+ setGraphStyle(Bar);
+ }
+
+ bool Graph::readData(QIODevice *source, const QString &amp;<span class="comment">/*format*/</span>)
+ {
+ if (!source-&gt;open(QIODevice::ReadOnly|QIODevice::Text))
+ return false;
+
+ data.clear();
+
+ QTextStream in(source);
+ processData(in);
+
+ update();
+
+ return true;
+ }
+
+ void Graph::processData(QTextStream &amp;in)
+ {
+ while (!in.atEnd()) {
+ Datum datum;
+ QString value;
+ in &gt;&gt; value;
+ in &gt;&gt; datum.label;
+ bool ok;
+ datum.value = value.toDouble(&amp;ok);
+ if (ok)
+ data += datum;
+ }
+ }
+
+ bool Graph::writeData(QIODevice *target)
+ {
+ if (!target-&gt;open(QIODevice::WriteOnly|QIODevice::Text))
+ return false;
+
+ QTextStream out(target);
+ foreach(Datum datum, data) {
+ out &lt;&lt; datum.value &lt;&lt; &quot;\t&quot; &lt;&lt; datum.label &lt;&lt; endl;
+ }
+
+ return true;
+ }
+
+ void Graph::timerEvent(QTimerEvent *e)
+ {
+ if (e-&gt;timerId() == pieTimer) {
+ pieRotation = (pieRotation + 1) % 360;
+ update();
+ }
+ QWidget::timerEvent(e);
+ }
+
+ void Graph::enterEvent(QEvent *)
+ {
+ statusbar-&gt;showMessage(QString(&quot;Qt Grapher plugin [%1]&quot;).arg(mimeType()));
+ }
+
+ void Graph::leaveEvent(QEvent *)
+ {
+ if (!QApplication::activePopupWidget()) {
+ statusbar-&gt;clearMessage();
+ }
+ }
+
+ void Graph::paintEvent(QPaintEvent* event)
+ {
+ if (!data.count()) {
+ paintWait();
+ } else {
+ switch (m_style) {
+ case Pie:
+ paintPie(event);
+ break;
+ default:
+ paintBar(event);
+ break;
+ }
+ }
+ }
+
+ void Graph::mousePressEvent(QMouseEvent *me)
+ {
+ menu-&gt;exec(me-&gt;globalPos());
+ }
+
+ void Graph::paintWait()
+ {
+ QPainter p(this);
+ p.drawText(rect(), Qt::AlignCenter, &quot;Loading...&quot;);
+ }
+
+ void Graph::paintBar(QPaintEvent* event)
+ {
+ const int count = data.count();
+ double max = 0.0;
+ for (int i = 0; i &lt; count; ++i) {
+ double value = data.at(i).value;
+ if (value &gt; max)
+ max = value;
+ }
+
+ QPainter painter(this);
+ painter.setClipRect(event-&gt;rect());
+ painter.save();
+ painter.setWindow(0, qRound(max), count * 20, qRound(-max));
+ painter.setViewport(20, 5, width() - 40, height() - 40);
+
+ for (int i = 0; i &lt; count; ++i) {
+ double value = data.at(i).value;
+ QColor c;
+ c.setHsv((i * 255)/count, 255, 255);<span class="comment">// rainbow effect</span>
+ painter.setBrush(c);
+
+ painter.drawRect(i * 20, 0, 20, qRound(value));
+ }
+ painter.restore();
+ painter.setClipRect(QRect());
+ }
+
+ void Graph::paintPie(QPaintEvent* event)
+ {
+ const int count = data.count();
+ double total = 0.0;
+
+ for (int i = 0; i &lt; count; ++i) {
+ double value = data.at(i).value;
+ total += value;
+ }
+
+ int apos = (pieRotation-90)*16;
+
+ QPainter painter(this);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setClipRect(event-&gt;rect());
+ QRect r(rect());
+ r.adjust(10, 10, -10, -10);
+
+ for (int i = 0; i &lt; count; ++i) {
+ double value = data.at(i).value;
+ QColor c;
+ c.setHsv((i * 255)/count, 255, 255);<span class="comment">// rainbow effect</span>
+ painter.setBrush( c );
+
+ int a = int((value * 360.0) / total * 16.0 + 0.5);
+ painter.drawPie(r, -apos, -a);
+ apos += a;
+ }
+ }
+
+ #include &quot;grapher.moc&quot;
+
+ QTNPFACTORY_BEGIN(&quot;Qt-based Graph Plugin&quot;, &quot;A Qt-based NSAPI plug-in that graphs numeric data&quot;);
+ QTNPCLASS(Graph)
+ QTNPFACTORY_END()
+
+ #ifdef QAXSERVER
+ #include &lt;ActiveQt/QAxFactory&gt;
+ QAXFACTORY_BEGIN(&quot;{89ab08da-df8c-4bd0-8327-72f73741c1a6}&quot;, &quot;{082bd921-0832-4ca7-ab5a-ec06ca7f3350}&quot;)
+ QAXCLASS(Graph)
+ QAXFACTORY_END()
+ #endif</pre>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin-example-scripting.html b/qtbrowserplugin/doc/html/qtbrowserplugin-example-scripting.html
new file mode 100644
index 0000000..e023284
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin-example-scripting.html
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- scripting.qdoc -->
+<head>
+ <title>Scripting Example</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">Scripting Example<br /><span class="subtitle"></span>
+</h1>
+<p>This example demonstrates the combination of Javascript and a trivial plugin, and the use of a plugin in combination with a form.</p>
+<p>If the browser supports scripting plugins, and everything is set up correctly, the plugin below should react to mouse clicks and drags by changing its text. The <tt>About...</tt> button should pop up an <tt>About Qt</tt> dialog. The second plugin instance, below the horizontal line, should display the word <tt>QtBrowserPlugin</tt>, and pressing the <tt>Go</tt>! button should navigate the browser to a search for this word at google.com.</p>
+ <object id="ScriptableObject" TYPE=trivial/very WIDTH=200 HEIGHT=100 text="Very Scriptable!"> </object>
+
+ <script language=JavaScript>
+ var ScriptableObject = document.getElementById('ScriptableObject');
+ ScriptableObject.text = 'This is some text'
+
+ var oldText
+ ScriptableObject.mouseDown = function()
+ {
+ oldText = ScriptableObject.text
+ ScriptableObject.text = 'Mouse Down'
+ }
+
+ ScriptableObject.mouseMove = function(x, y)
+ {
+ ScriptableObject.text = 'Mouse at ' + x + ',' + y
+ }
+
+ ScriptableObject.mouseUp = function()
+ {
+ ScriptableObject.text = oldText
+ }
+ </script>
+
+ <!-- Special hookup code required for Internet Explorer -->
+ <!--[if IE]>
+ <script language=JScript>
+ function ScriptableObject::mouseDown() { ScriptableObject.mouseDown() }
+ function ScriptableObject::mouseMove(x, y) { ScriptableObject.mouseMove(x, y) }
+ function ScriptableObject::mouseUp() { ScriptableObject.mouseUp() }
+ </script>
+ <![endif]-->
+
+ <form>
+ <input type="button" value="About..." OnClick="ScriptableObject.about();"/>
+ </form>
+
+ <hr>
+ <form method="GET" action="http://www.google.com/search">
+ Search at Google:
+ <object id="SearchableText" name="q" type=trivial/very width=150 height=40 text="QtBrowserPlugin"></object>
+ <input type="submit" value="Go!">
+ </form>
+ <p>Implementation:</p>
+<pre><span class="comment"> /****************************************************************************
+ **
+ ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ **
+ ** Contact: Nokia Corporation (qt-info@nokia.com)
+ **
+ ** This file is part of a Qt Solutions component.
+ **
+ ** You may use this file under the terms of the BSD license as follows:
+ **
+ ** &quot;Redistribution and use in source and binary forms, with or without
+ ** modification, are permitted provided that the following conditions are
+ ** met:
+ ** * Redistributions of source code must retain the above copyright
+ ** notice, this list of conditions and the following disclaimer.
+ ** * Redistributions in binary form must reproduce the above copyright
+ ** notice, this list of conditions and the following disclaimer in
+ ** the documentation and/or other materials provided with the
+ ** distribution.
+ ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+ ** the names of its contributors may be used to endorse or promote
+ ** products derived from this software without specific prior written
+ ** permission.
+ **
+ ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ** &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&quot;
+ **
+ ****************************************************************************/</span>
+
+ #include &lt;QtGui&gt;
+ #include &lt;qtbrowserplugin.h&gt;
+
+ class Trivial : public QWidget
+ {
+ Q_OBJECT
+ Q_PROPERTY(QString text READ text WRITE setText)
+
+ Q_CLASSINFO(&quot;ClassID&quot;, &quot;{5a22176d-118f-4185-9653-9f98958a6df8}&quot;)
+ Q_CLASSINFO(&quot;InterfaceID&quot;, &quot;{2df735ba-da4f-4fb7-8f35-b8dfbf8cfd9a}&quot;)
+ Q_CLASSINFO(&quot;EventsID&quot;, &quot;{449de213-f8bd-4d2e-a2cf-eab407c03245}&quot;)
+
+ Q_CLASSINFO(&quot;MIME&quot;, &quot;trivial/very:xxx:Trivial and useless&quot;)
+ Q_CLASSINFO(&quot;ToSuperClass&quot;, &quot;Trivial&quot;)
+ Q_CLASSINFO(&quot;DefaultProperty&quot;, &quot;text&quot;)
+
+ public:
+ Trivial(QWidget *parent = 0)
+ : QWidget(parent)
+ {
+ m_text = QString::fromLatin1(&quot;Empty&quot;);
+ }
+
+ void mousePressEvent(QMouseEvent *)
+ {
+ mouseDown();
+ }
+ void mouseMoveEvent(QMouseEvent *e)
+ {
+ mouseMove(e-&gt;x(), e-&gt;y());
+ }
+ void mouseReleaseEvent(QMouseEvent*)
+ {
+ mouseUp();
+ }
+ QString text() const
+ {
+ return m_text;
+ }
+
+ public slots:
+ void about()
+ {
+ QMessageBox::aboutQt(this);
+ }
+ void setText(const QString &amp;text)
+ {
+ m_text = text;
+ update();
+ }
+
+ signals:
+ void mouseDown();
+ void mouseMove(int x, int y);
+ void mouseUp();
+
+ protected:
+ void paintEvent(QPaintEvent*)
+ {
+ QPainter p(this);
+ QRect r(rect());
+ r.adjust(0, 0, -1, -1);
+
+ p.drawRect(r);
+ p.drawText(r, Qt::AlignCenter, m_text);
+ }
+
+ private:
+ QString m_text;
+ };
+
+ #include &quot;trivial.moc&quot;
+
+ QTNPFACTORY_BEGIN(&quot;Trivial Qt-based Plugin&quot;, &quot;A Qt-based LiveConnected plug-in that does nothing&quot;)
+ QTNPCLASS(Trivial)
+ QTNPFACTORY_END()
+
+ #ifdef QAXSERVER
+ #include &lt;ActiveQt/QAxFactory&gt;
+ QAXFACTORY_BEGIN(&quot;{aa3216bf-7e20-482c-84c6-06167bacb616}&quot;, &quot;{08538ca5-eb7a-4f24-a3c4-a120c6e04dc4}&quot;)
+ QAXCLASS(Trivial)
+ QAXFACTORY_END()
+ #endif</pre>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin-example-trivial.html b/qtbrowserplugin/doc/html/qtbrowserplugin-example-trivial.html
new file mode 100644
index 0000000..a35c8d3
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin-example-trivial.html
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- trivial.qdoc -->
+<head>
+ <title>Trivial Example</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">Trivial Example<br /><span class="subtitle"></span>
+</h1>
+<p>This example is trivial, and thus useful for investigating problems you might have installing plugins. If everything works correctly, the <tt>trivial</tt> plugin should appear below as a rectangular field below with some text in it:</p>
+ <object id="TrivialObject" TYPE=trivial/very WIDTH=200 HEIGHT=100 text="Very Trivial!">
+ </object>
+ <p>Implementation:</p>
+<pre><span class="comment"> /****************************************************************************
+ **
+ ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ **
+ ** Contact: Nokia Corporation (qt-info@nokia.com)
+ **
+ ** This file is part of a Qt Solutions component.
+ **
+ ** You may use this file under the terms of the BSD license as follows:
+ **
+ ** &quot;Redistribution and use in source and binary forms, with or without
+ ** modification, are permitted provided that the following conditions are
+ ** met:
+ ** * Redistributions of source code must retain the above copyright
+ ** notice, this list of conditions and the following disclaimer.
+ ** * Redistributions in binary form must reproduce the above copyright
+ ** notice, this list of conditions and the following disclaimer in
+ ** the documentation and/or other materials provided with the
+ ** distribution.
+ ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+ ** the names of its contributors may be used to endorse or promote
+ ** products derived from this software without specific prior written
+ ** permission.
+ **
+ ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ** &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&quot;
+ **
+ ****************************************************************************/</span>
+
+ #include &lt;QtGui&gt;
+ #include &lt;qtbrowserplugin.h&gt;
+
+ class Trivial : public QWidget
+ {
+ Q_OBJECT
+ Q_PROPERTY(QString text READ text WRITE setText)
+
+ Q_CLASSINFO(&quot;ClassID&quot;, &quot;{5a22176d-118f-4185-9653-9f98958a6df8}&quot;)
+ Q_CLASSINFO(&quot;InterfaceID&quot;, &quot;{2df735ba-da4f-4fb7-8f35-b8dfbf8cfd9a}&quot;)
+ Q_CLASSINFO(&quot;EventsID&quot;, &quot;{449de213-f8bd-4d2e-a2cf-eab407c03245}&quot;)
+
+ Q_CLASSINFO(&quot;MIME&quot;, &quot;trivial/very:xxx:Trivial and useless&quot;)
+ Q_CLASSINFO(&quot;ToSuperClass&quot;, &quot;Trivial&quot;)
+ Q_CLASSINFO(&quot;DefaultProperty&quot;, &quot;text&quot;)
+
+ public:
+ Trivial(QWidget *parent = 0)
+ : QWidget(parent)
+ {
+ m_text = QString::fromLatin1(&quot;Empty&quot;);
+ }
+
+ void mousePressEvent(QMouseEvent *)
+ {
+ mouseDown();
+ }
+ void mouseMoveEvent(QMouseEvent *e)
+ {
+ mouseMove(e-&gt;x(), e-&gt;y());
+ }
+ void mouseReleaseEvent(QMouseEvent*)
+ {
+ mouseUp();
+ }
+ QString text() const
+ {
+ return m_text;
+ }
+
+ public slots:
+ void about()
+ {
+ QMessageBox::aboutQt(this);
+ }
+ void setText(const QString &amp;text)
+ {
+ m_text = text;
+ update();
+ }
+
+ signals:
+ void mouseDown();
+ void mouseMove(int x, int y);
+ void mouseUp();
+
+ protected:
+ void paintEvent(QPaintEvent*)
+ {
+ QPainter p(this);
+ QRect r(rect());
+ r.adjust(0, 0, -1, -1);
+
+ p.drawRect(r);
+ p.drawText(r, Qt::AlignCenter, m_text);
+ }
+
+ private:
+ QString m_text;
+ };
+
+ #include &quot;trivial.moc&quot;
+
+ QTNPFACTORY_BEGIN(&quot;Trivial Qt-based Plugin&quot;, &quot;A Qt-based LiveConnected plug-in that does nothing&quot;)
+ QTNPCLASS(Trivial)
+ QTNPFACTORY_END()
+
+ #ifdef QAXSERVER
+ #include &lt;ActiveQt/QAxFactory&gt;
+ QAXFACTORY_BEGIN(&quot;{aa3216bf-7e20-482c-84c6-06167bacb616}&quot;, &quot;{08538ca5-eb7a-4f24-a3c4-a120c6e04dc4}&quot;)
+ QAXCLASS(Trivial)
+ QAXFACTORY_END()
+ #endif</pre>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin.dcf b/qtbrowserplugin/doc/html/qtbrowserplugin.dcf
new file mode 100644
index 0000000..08e7fc5
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin.dcf
@@ -0,0 +1,55 @@
+<!DOCTYPE DCF>
+<DCF ref="index.html" icon="qtbrowserplugin.png" imagedir="../../gif" title="Qt Solutions: Browser Plugin Documentation">
+<section ref="classes.html" title="Classes">
+ <section ref="qtnpbindable.html" title="QtNPBindable Class Reference">
+ <keyword ref="qtnpbindable.html">QtNPBindable</keyword>
+ <keyword ref="qtnpbindable.html#DisplayMode-enum">DisplayMode</keyword>
+ <keyword ref="qtnpbindable.html#DisplayMode-enum">QtNPBindable::Embedded</keyword>
+ <keyword ref="qtnpbindable.html#DisplayMode-enum">QtNPBindable::Fullpage</keyword>
+ <keyword ref="qtnpbindable.html#Reason-enum">Reason</keyword>
+ <keyword ref="qtnpbindable.html#Reason-enum">QtNPBindable::ReasonError</keyword>
+ <keyword ref="qtnpbindable.html#Reason-enum">QtNPBindable::ReasonBreak</keyword>
+ <keyword ref="qtnpbindable.html#Reason-enum">QtNPBindable::ReasonUnknown</keyword>
+ <keyword ref="qtnpbindable.html#Reason-enum">QtNPBindable::ReasonDone</keyword>
+ <keyword ref="qtnpbindable.html#displayMode">displayMode</keyword>
+ <keyword ref="qtnpbindable.html#getBrowserVersion">getBrowserVersion</keyword>
+ <keyword ref="qtnpbindable.html#getNppVersion">getNppVersion</keyword>
+ <keyword ref="qtnpbindable.html#instance">instance</keyword>
+ <keyword ref="qtnpbindable.html#mimeType">mimeType</keyword>
+ <keyword ref="qtnpbindable.html#openUrl">openUrl</keyword>
+ <keyword ref="qtnpbindable.html#parameters">parameters</keyword>
+ <keyword ref="qtnpbindable.html#readData">readData</keyword>
+ <keyword ref="qtnpbindable.html#transferComplete">transferComplete</keyword>
+ <keyword ref="qtnpbindable.html#uploadData">uploadData</keyword>
+ <keyword ref="qtnpbindable.html#uploadFile">uploadFile</keyword>
+ <keyword ref="qtnpbindable.html#userAgent">userAgent</keyword>
+ <section ref="qtnpbindable-members.html" title="List of all members"/>
+ </section>
+ <section ref="qtnpfactory.html" title="QtNPFactory Class Reference">
+ <keyword ref="qtnpfactory.html">QtNPFactory</keyword>
+ <keyword ref="qtnpfactory.html#createObject">createObject</keyword>
+ <keyword ref="qtnpfactory.html#mimeTypes">mimeTypes</keyword>
+ <keyword ref="qtnpfactory.html#pluginDescription">pluginDescription</keyword>
+ <keyword ref="qtnpfactory.html#pluginName">pluginName</keyword>
+ <section ref="qtnpfactory-members.html" title="List of all members"/>
+ </section>
+</section>
+<section ref="overviews.html" title="Overviews">
+ <section ref="index.html" title="Browser Plugin">
+ <keyword ref="index.html">Browser Plugin</keyword>
+ </section>
+ <section ref="developingplugins.html" title="Developing Plugins">
+ <keyword ref="developingplugins.html">Developing Plugins</keyword>
+ </section>
+ <section ref="qtbrowserplugin-example-grapher.html" title="Grapher Plugin">
+ <keyword ref="qtbrowserplugin-example-grapher.html">Grapher Plugin</keyword>
+ </section>
+ <section ref="qtbrowserplugin-example-scripting.html" title="Scripting Example">
+ <keyword ref="qtbrowserplugin-example-scripting.html">Scripting Example</keyword>
+ </section>
+ <section ref="qtbrowserplugin-example-trivial.html" title="Trivial Example">
+ <keyword ref="qtbrowserplugin-example-trivial.html">Trivial Example</keyword>
+ </section>
+</section>
+<section ref="examples.html" title="Tutorial &amp; Examples"/>
+</DCF>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin.index b/qtbrowserplugin/doc/html/qtbrowserplugin.index
new file mode 100644
index 0000000..0f1ab6d
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin.index
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="Qt Solutions: Browser Plugin Documentation" version="">
+ <namespace access="public" threadsafety="unspecified" status="commendable" name="" href="" location="" module="">
+ <class access="public" threadsafety="unspecified" status="commendable" name="QtNPBindable" href="qtnpbindable.html" location="qtbrowserplugin.h" bases="" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="Reason" fullname="QtNPBindable::Reason" href="qtnpbindable.html#Reason-enum" location="qtbrowserplugin.h">
+ <value name="ReasonDone" value="0"/>
+ <value name="ReasonBreak" value="1"/>
+ <value name="ReasonError" value="2"/>
+ <value name="ReasonUnknown" value="-1"/>
+ </enum>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="DisplayMode" fullname="QtNPBindable::DisplayMode" href="qtnpbindable.html#DisplayMode-enum" location="qtbrowserplugin.h">
+ <value name="Embedded" value="1"/>
+ <value name="Fullpage" value="2"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="parameters" fullname="QtNPBindable::parameters" href="qtnpbindable.html#parameters" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QMap&lt;QByteArray, QVariant&gt;" signature="parameters() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="displayMode" fullname="QtNPBindable::displayMode" href="qtnpbindable.html#displayMode" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="DisplayMode" signature="displayMode() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="mimeType" fullname="QtNPBindable::mimeType" href="qtnpbindable.html#mimeType" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="mimeType() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="userAgent" fullname="QtNPBindable::userAgent" href="qtnpbindable.html#userAgent" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="userAgent() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="getNppVersion" fullname="QtNPBindable::getNppVersion" href="qtnpbindable.html#getNppVersion" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="void" signature="getNppVersion(int * major, int * minor) const">
+ <parameter left="int *" right="" name="major" default=""/>
+ <parameter left="int *" right="" name="minor" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="getBrowserVersion" fullname="QtNPBindable::getBrowserVersion" href="qtnpbindable.html#getBrowserVersion" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="void" signature="getBrowserVersion(int * major, int * minor) const">
+ <parameter left="int *" right="" name="major" default=""/>
+ <parameter left="int *" right="" name="minor" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="readData" fullname="QtNPBindable::readData" href="qtnpbindable.html#readData" location="qtbrowserplugin.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="bool" signature="readData(QIODevice * source, const QString &amp; format)">
+ <parameter left="QIODevice *" right="" name="source" default=""/>
+ <parameter left="const QString &amp;" right="" name="format" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="openUrl" fullname="QtNPBindable::openUrl" href="qtnpbindable.html#openUrl" location="qtbrowserplugin.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="int" signature="openUrl(const QString &amp; url, const QString &amp; window)">
+ <parameter left="const QString &amp;" right="" name="url" default=""/>
+ <parameter left="const QString &amp;" right="" name="window" default="QString()"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="uploadData" fullname="QtNPBindable::uploadData" href="qtnpbindable.html#uploadData" location="qtbrowserplugin.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="int" signature="uploadData(const QString &amp; url, const QString &amp; window, const QByteArray &amp; data)">
+ <parameter left="const QString &amp;" right="" name="url" default=""/>
+ <parameter left="const QString &amp;" right="" name="window" default=""/>
+ <parameter left="const QByteArray &amp;" right="" name="data" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="uploadFile" fullname="QtNPBindable::uploadFile" href="qtnpbindable.html#uploadFile" location="qtbrowserplugin.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="int" signature="uploadFile(const QString &amp; url, const QString &amp; window, const QString &amp; filename)">
+ <parameter left="const QString &amp;" right="" name="url" default=""/>
+ <parameter left="const QString &amp;" right="" name="window" default=""/>
+ <parameter left="const QString &amp;" right="" name="filename" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="transferComplete" fullname="QtNPBindable::transferComplete" href="qtnpbindable.html#transferComplete" location="qtbrowserplugin.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="transferComplete(const QString &amp; url, int id, Reason reason)">
+ <parameter left="const QString &amp;" right="" name="url" default=""/>
+ <parameter left="int" right="" name="id" default=""/>
+ <parameter left="Reason" right="" name="reason" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="instance" fullname="QtNPBindable::instance" href="qtnpbindable.html#instance" location="qtbrowserplugin.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="NPP" signature="instance() const"/>
+ <function access="protected" threadsafety="unspecified" status="commendable" name="QtNPBindable" fullname="QtNPBindable::QtNPBindable" href="qtnpbindable.html#QtNPBindable" location="qtbrowserplugin.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QtNPBindable()"/>
+ <function access="protected" threadsafety="unspecified" status="commendable" name="~QtNPBindable" fullname="QtNPBindable::~QtNPBindable" href="qtnpbindable.html#dtor.QtNPBindable" location="qtbrowserplugin.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QtNPBindable()"/>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QtNPFactory" href="qtnpfactory.html" location="qtbrowserplugin.h" bases="" module="">
+ <function access="public" threadsafety="unspecified" status="commendable" name="QtNPFactory" fullname="QtNPFactory::QtNPFactory" href="qtnpfactory.html#QtNPFactory" location="qtbrowserplugin.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QtNPFactory()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QtNPFactory" fullname="QtNPFactory::~QtNPFactory" href="qtnpfactory.html#dtor.QtNPFactory" location="qtbrowserplugin.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QtNPFactory()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="mimeTypes" fullname="QtNPFactory::mimeTypes" href="qtnpfactory.html#mimeTypes" location="qtbrowserplugin.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="QStringList" signature="mimeTypes() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="createObject" fullname="QtNPFactory::createObject" href="qtnpfactory.html#createObject" location="qtbrowserplugin.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="QObject *" signature="createObject(const QString &amp; type)">
+ <parameter left="const QString &amp;" right="" name="type" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="pluginName" fullname="QtNPFactory::pluginName" href="qtnpfactory.html#pluginName" location="qtbrowserplugin.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="QString" signature="pluginName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="pluginDescription" fullname="QtNPFactory::pluginDescription" href="qtnpfactory.html#pluginDescription" location="qtbrowserplugin.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="QString" signature="pluginDescription() const"/>
+ </class>
+ <page access="public" status="commendable" name="index.html" href="index.html" subtype="page" title="Browser Plugin" fulltitle="Browser Plugin" subtitle="" location="index.qdoc">
+ <contents name="description" title="Description" level="1"/>
+ <contents name="guidelines" title="Guidelines" level="1"/>
+ <contents name="classes" title="Classes" level="1"/>
+ <contents name="examples" title="Examples" level="1"/>
+ <contents name="tested-platforms" title="Tested platforms" level="1"/>
+ </page>
+ <page access="public" status="commendable" name="qtbrowserplugin-example-scripting.html" href="qtbrowserplugin-example-scripting.html" subtype="page" title="Scripting Example" fulltitle="Scripting Example" subtitle="" location="scripting.qdoc"/>
+ <page access="public" status="commendable" name="qtbrowserplugin-example-grapher.html" href="qtbrowserplugin-example-grapher.html" subtype="page" title="Grapher Plugin" fulltitle="Grapher Plugin" subtitle="" location="grapher.qdoc"/>
+ <page access="public" status="commendable" name="qtbrowserplugin-example-trivial.html" href="qtbrowserplugin-example-trivial.html" subtype="page" title="Trivial Example" fulltitle="Trivial Example" subtitle="" location="trivial.qdoc"/>
+ <page access="public" status="commendable" name="developingplugins.html" href="developingplugins.html" subtype="page" title="Developing Plugins" fulltitle="Developing Plugins" subtitle="" location="qtbrowserplugin.qdoc">
+ <contents name="implementing-plugins" title="Implementing plugins" level="1"/>
+ <contents name="windows-specific-notes" title="Windows specific notes" level="2"/>
+ <contents name="enabling-activex-support" title="Enabling ActiveX support" level="3"/>
+ <contents name="unix-specific-notes" title="Unix specific notes" level="2"/>
+ <contents name="known-issues-on-unix-linux" title="Known Issues on Unix/Linux" level="3"/>
+ <contents name="mac-osx-specific-notes" title="Mac OSX specific notes" level="2"/>
+ <contents name="known-issues-on-mac" title="Known Issues on Mac" level="3"/>
+ <contents name="installing-and-using-plugins" title="Installing and using Plugins" level="1"/>
+ <contents name="embedding-the-plugin-on-a-web-page" title="Embedding the plugin on a web page." level="2"/>
+ <contents name="plugins-with-data" title="Plugins with data:" level="3"/>
+ <contents name="plugins-without-data" title="Plugins without data:" level="3"/>
+ <contents name="tags-not-working-equally-with-all-browsers" title="Tags not working equally with all browsers" level="3"/>
+ <contents name="browser-full-page-view-of-a-plugin" title="Browser full-page view of a plugin" level="2"/>
+ <contents name="scripting" title="Scripting" level="2"/>
+ <contents name="javascript-calling-slots-and-properties" title="JavaScript calling slots and properties" level="3"/>
+ <contents name="the-plugin-calling-javascript" title="The plugin calling JavaScript" level="3"/>
+ <contents name="using-plugins-in-forms" title="Using plugins in forms" level="3"/>
+ </page>
+ </namespace>
+</INDEX>
diff --git a/qtbrowserplugin/doc/html/qtbrowserplugin.qhp b/qtbrowserplugin/doc/html/qtbrowserplugin.qhp
new file mode 100644
index 0000000..ac40cdd
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtbrowserplugin.qhp
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<QtHelpProject version="1.0">
+ <namespace>com.nokia.qtsolutions.qtbrowserplugin_head</namespace>
+ <virtualFolder>qdoc</virtualFolder>
+ <customFilter name="Qt Solutions: Browser Plugin">
+ <filterAttribute>qt</filterAttribute>
+ <filterAttribute>qtbrowserplugin</filterAttribute>
+ <filterAttribute>solutions</filterAttribute>
+ </customFilter>
+ <filterSection>
+ <filterAttribute>qt</filterAttribute>
+ <filterAttribute>qtbrowserplugin</filterAttribute>
+ <filterAttribute>solutions</filterAttribute>
+ <toc>
+ <section ref="index.html" title="Qt Solutions: Browser Plugin Documentation">
+ <section ref="index.html" title="Browser Plugin"/>
+ <section ref="developingplugins.html" title="Developing Plugins"/>
+ <section ref="qtbrowserplugin-example-grapher.html" title="Grapher Plugin"/>
+ <section ref="qtbrowserplugin-example-scripting.html" title="Scripting Example"/>
+ <section ref="qtbrowserplugin-example-trivial.html" title="Trivial Example"/>
+ </section>
+ </toc>
+ <keywords>
+ <keyword name="Browser Plugin" id="Browser Plugin" ref="index.html"/>
+ <keyword name="Developing Plugins" id="Developing Plugins" ref="developingplugins.html"/>
+ <keyword name="Grapher Plugin" id="Grapher Plugin" ref="qtbrowserplugin-example-grapher.html"/>
+ <keyword name="QtNPBindable" id="QtNPBindable" ref="qtnpbindable.html"/>
+ <keyword name="QtNPBindable::DisplayMode" id="QtNPBindable::DisplayMode" ref="qtnpbindable.html#DisplayMode-enum"/>
+ <keyword name="QtNPBindable::Embedded" id="QtNPBindable::Embedded" ref="qtnpbindable.html#DisplayMode-enum"/>
+ <keyword name="QtNPBindable::Fullpage" id="QtNPBindable::Fullpage" ref="qtnpbindable.html#DisplayMode-enum"/>
+ <keyword name="QtNPBindable::Reason" id="QtNPBindable::Reason" ref="qtnpbindable.html#Reason-enum"/>
+ <keyword name="QtNPBindable::ReasonDone" id="QtNPBindable::ReasonDone" ref="qtnpbindable.html#Reason-enum"/>
+ <keyword name="QtNPBindable::ReasonBreak" id="QtNPBindable::ReasonBreak" ref="qtnpbindable.html#Reason-enum"/>
+ <keyword name="QtNPBindable::ReasonError" id="QtNPBindable::ReasonError" ref="qtnpbindable.html#Reason-enum"/>
+ <keyword name="QtNPBindable::ReasonUnknown" id="QtNPBindable::ReasonUnknown" ref="qtnpbindable.html#Reason-enum"/>
+ <keyword name="displayMode" id="QtNPBindable::displayMode" ref="qtnpbindable.html#displayMode"/>
+ <keyword name="getBrowserVersion" id="QtNPBindable::getBrowserVersion" ref="qtnpbindable.html#getBrowserVersion"/>
+ <keyword name="getNppVersion" id="QtNPBindable::getNppVersion" ref="qtnpbindable.html#getNppVersion"/>
+ <keyword name="instance" id="QtNPBindable::instance" ref="qtnpbindable.html#instance"/>
+ <keyword name="mimeType" id="QtNPBindable::mimeType" ref="qtnpbindable.html#mimeType"/>
+ <keyword name="openUrl" id="QtNPBindable::openUrl" ref="qtnpbindable.html#openUrl"/>
+ <keyword name="parameters" id="QtNPBindable::parameters" ref="qtnpbindable.html#parameters"/>
+ <keyword name="readData" id="QtNPBindable::readData" ref="qtnpbindable.html#readData"/>
+ <keyword name="transferComplete" id="QtNPBindable::transferComplete" ref="qtnpbindable.html#transferComplete"/>
+ <keyword name="uploadData" id="QtNPBindable::uploadData" ref="qtnpbindable.html#uploadData"/>
+ <keyword name="uploadFile" id="QtNPBindable::uploadFile" ref="qtnpbindable.html#uploadFile"/>
+ <keyword name="userAgent" id="QtNPBindable::userAgent" ref="qtnpbindable.html#userAgent"/>
+ <keyword name="~QtNPBindable" id="QtNPBindable::~QtNPBindable" ref="qtnpbindable.html#dtor.QtNPBindable"/>
+ <keyword name="QtNPFactory" id="QtNPFactory" ref="qtnpfactory.html"/>
+ <keyword name="createObject" id="QtNPFactory::createObject" ref="qtnpfactory.html#createObject"/>
+ <keyword name="mimeTypes" id="QtNPFactory::mimeTypes" ref="qtnpfactory.html#mimeTypes"/>
+ <keyword name="pluginDescription" id="QtNPFactory::pluginDescription" ref="qtnpfactory.html#pluginDescription"/>
+ <keyword name="pluginName" id="QtNPFactory::pluginName" ref="qtnpfactory.html#pluginName"/>
+ <keyword name="~QtNPFactory" id="QtNPFactory::~QtNPFactory" ref="qtnpfactory.html#dtor.QtNPFactory"/>
+ <keyword name="Scripting Example" id="Scripting Example" ref="qtbrowserplugin-example-scripting.html"/>
+ <keyword name="Trivial Example" id="Trivial Example" ref="qtbrowserplugin-example-trivial.html"/>
+ </keywords>
+ <files>
+ <file>index.html</file>
+ <file>qtbrowserplugin-example-grapher.html</file>
+ <file>qtbrowserplugin-example-scripting.html</file>
+ <file>qtnpbindable.html</file>
+ <file>qtbrowserplugin-example-trivial.html</file>
+ <file>qtnpfactory.html</file>
+ <file>developingplugins.html</file>
+ <file>classic.css</file>
+ <file>images/qt-logo.png</file>
+ </files>
+ </filterSection>
+</QtHelpProject>
diff --git a/qtbrowserplugin/doc/html/qtnpbindable-members.html b/qtbrowserplugin/doc/html/qtnpbindable-members.html
new file mode 100644
index 0000000..7570403
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtnpbindable-members.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- qtbrowserplugin.cpp -->
+<head>
+ <title>List of All Members for QtNPBindable</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">List of All Members for QtNPBindable</h1>
+<p>This is the complete list of members for <a href="qtnpbindable.html">QtNPBindable</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn">enum <b><a href="qtnpbindable.html#DisplayMode-enum">DisplayMode</a></b></div></li>
+<li><div class="fn">enum <b><a href="qtnpbindable.html#Reason-enum">Reason</a></b></div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#QtNPBindable">QtNPBindable</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#dtor.QtNPBindable">~QtNPBindable</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#displayMode">displayMode</a></b> () const : DisplayMode</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#getBrowserVersion">getBrowserVersion</a></b> ( int *, int * ) const</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#getNppVersion">getNppVersion</a></b> ( int *, int * ) const</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#instance">instance</a></b> () const : NPP</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="qtnpbindable.html#mimeType">mimeType</a></b> () const : QString</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#openUrl">openUrl</a></b> ( const QString &amp;, const QString &amp; ) : int</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#parameters">parameters</a></b> () const : QMap&lt;QByteArray, QVariant&gt;</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#readData">readData</a></b> ( QIODevice *, const QString &amp; ) : bool</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#transferComplete">transferComplete</a></b> ( const QString &amp;, int, Reason )</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#uploadData">uploadData</a></b> ( const QString &amp;, const QString &amp;, const QByteArray &amp; ) : int</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#uploadFile">uploadFile</a></b> ( const QString &amp;, const QString &amp;, const QString &amp; ) : int</div></li>
+<li><div class="fn"><b><a href="qtnpbindable.html#userAgent">userAgent</a></b> () const : QString</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtnpbindable.html b/qtbrowserplugin/doc/html/qtnpbindable.html
new file mode 100644
index 0000000..3314d85
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtnpbindable.html
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- qtbrowserplugin.cpp -->
+<head>
+ <title>QtNPBindable Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">QtNPBindable Class Reference</h1>
+<p>The QtNPBindable class provides an interface between a widget and the web browser. <a href="#details">More...</a></p>
+<pre> #include &lt;QtNPBindable&gt;</pre><ul>
+<li><a href="qtnpbindable-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#DisplayMode-enum">DisplayMode</a></b> { Embedded, Fullpage }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#Reason-enum">Reason</a></b> { ReasonDone, ReasonBreak, ReasonError, ReasonUnknown }</td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">DisplayMode </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#displayMode">displayMode</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#getBrowserVersion">getBrowserVersion</a></b> ( int * <i>major</i>, int * <i>minor</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#getNppVersion">getNppVersion</a></b> ( int * <i>major</i>, int * <i>minor</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">NPP </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#instance">instance</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#mimeType">mimeType</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#openUrl">openUrl</a></b> ( const QString &amp; <i>url</i>, const QString &amp; <i>window</i> = QString() )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QMap&lt;QByteArray, QVariant&gt; </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#parameters">parameters</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#readData">readData</a></b> ( QIODevice * <i>source</i>, const QString &amp; <i>format</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#transferComplete">transferComplete</a></b> ( const QString &amp; <i>url</i>, int <i>id</i>, Reason <i>reason</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#uploadData">uploadData</a></b> ( const QString &amp; <i>url</i>, const QString &amp; <i>window</i>, const QByteArray &amp; <i>data</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#uploadFile">uploadFile</a></b> ( const QString &amp; <i>url</i>, const QString &amp; <i>window</i>, const QString &amp; <i>filename</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#userAgent">userAgent</a></b> () const</td></tr>
+</table>
+<hr />
+<a name="protected-functions"></a>
+<h2>Protected Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#QtNPBindable">QtNPBindable</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><b><a href="qtnpbindable.html#dtor.QtNPBindable">~QtNPBindable</a></b> ()</td></tr>
+</table>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QtNPBindable class provides an interface between a widget and the web browser.</p>
+<p>Inherit your plugin widget class from both <a href="http://qt.nokia.com/doc/4.6/qwidget.html">QWidget</a> (or <a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a>) and QtNPBindable to be able to call the functions of this class, and to reimplement the virtual functions. The <a href="http://qt.nokia.com/doc/4.6/moc.html">meta-object compiler</a> requires you to inherit from the <a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a> subclass first.</p>
+<pre> class PluginWidget : public QWidget, public QtNPBindable
+ {
+ Q_OBJECT
+ public:
+ PluginWidget(QWidget *parent = 0)
+ {
+ }
+
+ <span class="comment">//...</span>
+ };</pre>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="fn"><a name="DisplayMode-enum"></a>enum QtNPBindable::DisplayMode</h3>
+<p>This enum specifies the different display modes of a plugin</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QtNPBindable::Embedded</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">The plugin widget is embedded in a web page, usually with the &lt;EMBED&gt; or the &lt;OBJECT&gt; tag.</td></tr>
+<tr><td valign="top"><tt>QtNPBindable::Fullpage</tt></td><td align="center" valign="top"><tt>2</tt></td><td valign="top">The plugin widget is the primary content of the web browser, which is usually the case when the web browser displays a file the plugin supports.</td></tr>
+</table></p>
+<h3 class="fn"><a name="Reason-enum"></a>enum QtNPBindable::Reason</h3>
+<p>This enum specifies how an URL operation was completed</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="40%">
+<tr><th width="60%">Constant</th><th width="40%">Value</th></tr>
+<tr><td valign="top"><tt>QtNPBindable::ReasonDone</tt></td><td align="center" valign="top"><tt>0</tt></td></tr>
+<tr><td valign="top"><tt>QtNPBindable::ReasonBreak</tt></td><td align="center" valign="top"><tt>1</tt></td></tr>
+<tr><td valign="top"><tt>QtNPBindable::ReasonError</tt></td><td align="center" valign="top"><tt>2</tt></td></tr>
+<tr><td valign="top"><tt>QtNPBindable::ReasonUnknown</tt></td><td align="center" valign="top"><tt>-1</tt></td></tr>
+</table></p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QtNPBindable"></a>QtNPBindable::QtNPBindable ()&nbsp;&nbsp;<tt> [protected]</tt></h3>
+<p>Constructs a <a href="qtnpbindable.html">QtNPBindable</a> object.</p>
+<p>This can only happen when the plugin object is created.</p>
+<h3 class="fn"><a name="dtor.QtNPBindable"></a>QtNPBindable::~QtNPBindable ()&nbsp;&nbsp;<tt> [virtual protected]</tt></h3>
+<p>Destroys the object.</p>
+<p>This can only happen when the plugin object is destroyed.</p>
+<h3 class="fn"><a name="displayMode"></a><a href="qtnpbindable.html#DisplayMode-enum">DisplayMode</a> QtNPBindable::displayMode () const</h3>
+<p>Returns the display mode of the plugin.</p>
+<h3 class="fn"><a name="getBrowserVersion"></a>void QtNPBindable::getBrowserVersion ( int * <i>major</i>, int * <i>minor</i> ) const</h3>
+<p>Extracts the version of the browser into <i>major</i> and <i>minor</i>.</p>
+<p>See http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/ for an explanation of those values.</p>
+<p>See also <a href="qtnpbindable.html#getNppVersion">getNppVersion</a>() and <a href="qtnpbindable.html#userAgent">userAgent</a>().</p>
+<h3 class="fn"><a name="getNppVersion"></a>void QtNPBindable::getNppVersion ( int * <i>major</i>, int * <i>minor</i> ) const</h3>
+<p>Extracts the version of the plugin API used by this plugin into <i>major</i> and <i>minor</i>.</p>
+<p>See http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/ for an explanation of those values.</p>
+<p>See also <a href="qtnpbindable.html#getBrowserVersion">getBrowserVersion</a>() and <a href="qtnpbindable.html#userAgent">userAgent</a>().</p>
+<h3 class="fn"><a name="instance"></a>NPP QtNPBindable::instance () const</h3>
+<p>Returns the browser's plugin instance associated with this plugin object. The instance is required to call functions in the Netscape Plugin API, i.e&#x2e; NPN_GetJavaPeer().</p>
+<p>The instance returned is only valid as long as this object is.</p>
+<p>See http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/ for documentation of the <tt>NPP</tt> type.</p>
+<h3 class="fn"><a name="mimeType"></a><a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> QtNPBindable::mimeType () const</h3>
+<p>Returns the mime type this plugin has been instantiated for.</p>
+<h3 class="fn"><a name="openUrl"></a>int QtNPBindable::openUrl ( const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>url</i>, const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>window</i> = QString() )</h3>
+<p>Requests that the <i>url</i> be retrieved and sent to the named <i>window</i> (or a new window if <i>window</i> is empty), and returns the ID of the request that is delivered to <a href="qtnpbindable.html#transferComplete">transferComplete</a>() when the get-operation has finished. Returns 0 when the browser or the system doesn't support notification, or -1 when an error occured.</p>
+<pre> void MyPlugin::aboutQtSoftware()
+ {
+ openUrl(&quot;http:<span class="comment">//qt.nokia.com&quot;);</span>
+ }</pre>
+<p>See Netscape's JavaScript documentation for an explanation of window names.</p>
+<p>See also <a href="qtnpbindable.html#transferComplete">transferComplete</a>(), <a href="qtnpbindable.html#uploadData">uploadData</a>(), and <a href="qtnpbindable.html#uploadFile">uploadFile</a>().</p>
+<h3 class="fn"><a name="parameters"></a><a href="http://qt.nokia.com/doc/4.6/qmap.html">QMap</a>&lt;<a href="http://qt.nokia.com/doc/4.6/qbytearray.html">QByteArray</a>, <a href="http://qt.nokia.com/doc/4.6/qvariant.html">QVariant</a>&gt; QtNPBindable::parameters () const</h3>
+<p>Returns the parameters passed to the plugin instance.</p>
+<p>The framework sets the properties of the plugin to the corresponding parameters when the plugin object has been created, but you can use this function to process additional parameters.</p>
+<p>Note that the SGML specification does not permit multiple arguments with the same name.</p>
+<h3 class="fn"><a name="readData"></a>bool QtNPBindable::readData ( <a href="http://qt.nokia.com/doc/4.6/qiodevice.html">QIODevice</a> * <i>source</i>, const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>format</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Reimplement this function to read data from <i>source</i> provided with mime type <i>format</i>. The data is the one specified in the <tt>src</tt> or <tt>data</tt> attribute of the <tt>&lt;EMBED&gt;</tt> or <tt>&lt;OBJECT&gt;</tt> tag of in HTML page. This function is called once for every stream the browser creates for the plugin.</p>
+<p>Return true to indicate successfull processing of the data, otherwise return false. The default implementation does nothing and returns false.</p>
+<h3 class="fn"><a name="transferComplete"></a>void QtNPBindable::transferComplete ( const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>url</i>, int <i>id</i>, <a href="qtnpbindable.html#Reason-enum">Reason</a> <i>reason</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Called as a result of a call to openUrl, uploadData or uploadFile. <i>url</i> corresponds to the respective parameter, and <i>id</i> to value returned by the call. <i>reason</i> indicates how the transfer was completed.</p>
+<h3 class="fn"><a name="uploadData"></a>int QtNPBindable::uploadData ( const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>url</i>, const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>window</i>, const <a href="http://qt.nokia.com/doc/4.6/qbytearray.html">QByteArray</a> &amp; <i>data</i> )</h3>
+<p>Posts <i>data</i> to <i>url</i>, and displays the result in <i>window</i>. Returns the ID of the request that is delivered to <a href="qtnpbindable.html#transferComplete">transferComplete</a>() when the post-operation has finished. Returns 0 when the browser or the system doesn't support notification, or -1 when an error occured.</p>
+<pre> void MyPlugin::sendMail()
+ {
+ uploadData(&quot;mailto:fred@somewhere.com&quot;, QString(), &quot;There is a new file for you!&quot;);
+ }</pre>
+<p>See Netscape's JavaScript documentation for an explanation of window names.</p>
+<p>See also <a href="qtnpbindable.html#transferComplete">transferComplete</a>(), <a href="qtnpbindable.html#openUrl">openUrl</a>(), and <a href="qtnpbindable.html#uploadFile">uploadFile</a>().</p>
+<h3 class="fn"><a name="uploadFile"></a>int QtNPBindable::uploadFile ( const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>url</i>, const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>window</i>, const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>filename</i> )</h3>
+<p>Posts <i>filename</i> to <i>url</i>, and displays the result in <i>window</i>. Returns the ID of the request that is delivered to <a href="qtnpbindable.html#transferComplete">transferComplete</a>() when the post-operation has finished. Returns 0 when the browser or the system doesn't support notification, or -1 when an error occured.</p>
+<pre> void MyPlugin::uploadFile()
+ {
+ uploadFile(&quot;ftp:<span class="comment">//ftp.somewhere.com/incoming&quot;, &quot;response&quot;, &quot;c:\\temp\\file.txt&quot;);</span>
+ }</pre>
+<p>See Netscape's JavaScript documentation for an explanation of window names.</p>
+<p>See also <a href="qtnpbindable.html#transferComplete">transferComplete</a>(), <a href="qtnpbindable.html#uploadData">uploadData</a>(), and <a href="qtnpbindable.html#openUrl">openUrl</a>().</p>
+<h3 class="fn"><a name="userAgent"></a><a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> QtNPBindable::userAgent () const</h3>
+<p>Returns the user agent (browser name) containing this plugin.</p>
+<p>This is a wrapper around NPN_UserAgent.</p>
+<p>See also <a href="qtnpbindable.html#getBrowserVersion">getBrowserVersion</a>().</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtnpfactory-members.html b/qtbrowserplugin/doc/html/qtnpfactory-members.html
new file mode 100644
index 0000000..7c71d38
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtnpfactory-members.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- qtbrowserplugin.cpp -->
+<head>
+ <title>List of All Members for QtNPFactory</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">List of All Members for QtNPFactory</h1>
+<p>This is the complete list of members for <a href="qtnpfactory.html">QtNPFactory</a>, including inherited members.</p>
+<ul>
+<li><div class="fn"><b><a href="qtnpfactory.html#QtNPFactory">QtNPFactory</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qtnpfactory.html#dtor.QtNPFactory">~QtNPFactory</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qtnpfactory.html#createObject">createObject</a></b> ( const QString &amp; ) : QObject *</div></li>
+<li><div class="fn"><b><a href="qtnpfactory.html#mimeTypes">mimeTypes</a></b> () const : QStringList</div></li>
+<li><div class="fn"><b><a href="qtnpfactory.html#pluginDescription">pluginDescription</a></b> () const : QString</div></li>
+<li><div class="fn"><b><a href="qtnpfactory.html#pluginName">pluginName</a></b> () const : QString</div></li>
+</ul>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/html/qtnpfactory.html b/qtbrowserplugin/doc/html/qtnpfactory.html
new file mode 100644
index 0000000..3a15889
--- /dev/null
+++ b/qtbrowserplugin/doc/html/qtnpfactory.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- qtbrowserplugin.cpp -->
+<head>
+ <title>QtNPFactory Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="57" height="67" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+</tr></table><h1 class="title">QtNPFactory Class Reference</h1>
+<p>The QtNPFactory class provides the factory for plugin objects. <a href="#details">More...</a></p>
+<pre> #include &lt;QtNPFactory&gt;</pre><ul>
+<li><a href="qtnpfactory-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#QtNPFactory">QtNPFactory</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#dtor.QtNPFactory">~QtNPFactory</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual QObject * </td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#createObject">createObject</a></b> ( const QString &amp; <i>type</i> ) = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual QStringList </td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#mimeTypes">mimeTypes</a></b> () const = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual QString </td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#pluginDescription">pluginDescription</a></b> () const = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual QString </td><td class="memItemRight" valign="bottom"><b><a href="qtnpfactory.html#pluginName">pluginName</a></b> () const = 0</td></tr>
+</table>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QtNPFactory class provides the factory for plugin objects.</p>
+<p>Implement this factory once in your plugin project to provide information about the plugin and to create the plugin objects. Subclass QtNPFactory and implement the pure virtual functions, and export the factory using the <tt>QTNPFACTORY_EXPORT()</tt> macro.</p>
+<p>If you use the Q_CLASSINFO macro in your object classes you can use the <tt>QTNPFACTORY_BEGIN()</tt>, <tt>QTNPCLASS()</tt> and <tt>QTNPFACTORY_END()</tt> macros to generate a factory implementation:</p>
+<pre> class Widget : public QWidget
+ {
+ Q_OBJECT
+ Q_CLASSINFO(&quot;MIME&quot;, &quot;application/x-graphable:g1n:Graphable data&quot;)
+ public:
+ ...
+ };
+
+ QTNPFACTORY_BEGIN(&quot;Plugin name&quot;, &quot;Plugin description&quot;)
+ QTNPCLASS(WidgetClass)
+ QTNPFACTORY_END()</pre>
+<p>The classes exposed must provide a constructor.</p>
+<p>If Qt is linked to the plugin as a dynamic library, only one instance of <a href="http://qt.nokia.com/doc/4.6/qapplication.html">QApplication</a> will exist <i>across all plugins that have been made with Qt</i>. So, your plugin should tread lightly on global settings. Do not, for example, use <a href="http://qt.nokia.com/doc/4.6/qapplication.html#setFont">QApplication::setFont</a>() - that will change the font in every widget of every Qt-based plugin currently loaded!</p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QtNPFactory"></a>QtNPFactory::QtNPFactory ()</h3>
+<p>Creates a <a href="qtnpfactory.html">QtNPFactory</a>.</p>
+<h3 class="fn"><a name="dtor.QtNPFactory"></a>QtNPFactory::~QtNPFactory ()&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Destroys the <a href="qtnpfactory.html">QtNPFactory</a>.</p>
+<p>This is called by the plugin binding code just before the plugin is about to be unloaded from memory. If <a href="qtnpfactory.html#createObject">createObject</a>() has been called, a <a href="http://qt.nokia.com/doc/4.6/qapplication.html">QApplication</a> will still exist at this time, but will be deleted shortly after, just before the plugin is deleted.</p>
+<h3 class="fn"><a name="createObject"></a><a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a> * QtNPFactory::createObject ( const <a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> &amp; <i>type</i> )&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Reimplement this function to return the <a href="http://qt.nokia.com/doc/4.6/qobject.html">QObject</a> or <a href="http://qt.nokia.com/doc/4.6/qwidget.html">QWidget</a> subclass supporting the mime type <i>type</i>, or 0 if the factory doesn't support the type requested.</p>
+<p><i>type</i> will be in the same form as the leftmost (mime) part of the string(s) returned by <a href="qtnpfactory.html#mimeTypes">mimeTypes</a>(), e.g&#x2e; &quot;image/png&quot;.</p>
+<h3 class="fn"><a name="mimeTypes"></a><a href="http://qt.nokia.com/doc/4.6/qstringlist.html">QStringList</a> QtNPFactory::mimeTypes () const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Reimplement this function to return the MIME types of the data formats supported by your plugin. The format of each string is mime:extension(s):description:</p>
+<pre> QStringList mimeTypes() const
+ {
+ QStringList list;
+ list &lt;&lt; &quot;image/x-png:png:PNG Image&quot;
+ &lt;&lt; &quot;image/png:png:PNG Image&quot;
+ &lt;&lt; &quot;image/jpeg:jpg,jpeg:JPEG Image&quot;;
+ return list;
+ }</pre>
+<h3 class="fn"><a name="pluginDescription"></a><a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> QtNPFactory::pluginDescription () const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Reimplement this function to return the description of the plugin.</p>
+<h3 class="fn"><a name="pluginName"></a><a href="http://qt.nokia.com/doc/4.6/qstring.html">QString</a> QtNPFactory::pluginName () const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Reimplement this function to return the name of the plugin.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td width="30%" align="left">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td width="40%" align="center"><a href="http://qt.nokia.com/doc/trademarks.html">Trademarks</a></td>
+<td width="30%" align="right"><div align="right">Qt Solutions</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/qtbrowserplugin/doc/images/qt-logo.png b/qtbrowserplugin/doc/images/qt-logo.png
new file mode 100644
index 0000000..794162f
--- /dev/null
+++ b/qtbrowserplugin/doc/images/qt-logo.png
Binary files differ
diff --git a/qtbrowserplugin/doc/index.qdoc b/qtbrowserplugin/doc/index.qdoc
new file mode 100644
index 0000000..e2f0b51
--- /dev/null
+++ b/qtbrowserplugin/doc/index.qdoc
@@ -0,0 +1,47 @@
+/*!
+ \page index.html
+ \title Browser Plugin
+
+ \section1 Description
+
+ The QtBrowserPlugin solution is useful for implementing plugins for
+ web browser.
+
+
+
+ The project provides a framework that makes it simple to export
+ widgets and objects as plugins for web browsers supporting the Netscape
+ LiveConnect APIs.
+
+ Supported web browsers are Netscape, Mozilla FireFox and Opera.
+ Internet Explorer is supported when the plugin supports ActiveX via ActiveQt.
+
+
+
+ \section1 Guidelines
+ \list
+ \i \link developingplugins.html Developing Plugins \endlink \endlist
+
+ \section1 Classes
+ \list
+ \i QtNPBindable \i QtNPFactory\endlist
+
+ \section1 Examples
+ \list
+ \i \link qtbrowserplugin-example-trivial.html A trivial "Hello, World" plugin. \endlink \i \link qtbrowserplugin-example-scripting.html A webpage that combines javascript and the trivial plugin. \endlink \i \link qtbrowserplugin-example-grapher.html A plugin widget displaying a data file as a graph. \endlink \endlist
+
+
+
+
+
+
+ \section1 Tested platforms
+ \list
+ \i Qt 4.4, 4.5 / Windows XP / MSVC.NET 2008
+ \i [experimental] Qt 4.4, 4.5 / Linux / gcc
+ \endlist
+
+
+
+
+ */ \ No newline at end of file
diff --git a/qtbrowserplugin/doc/qtbrowserplugin.qdoc b/qtbrowserplugin/doc/qtbrowserplugin.qdoc
new file mode 100644
index 0000000..082d194
--- /dev/null
+++ b/qtbrowserplugin/doc/qtbrowserplugin.qdoc
@@ -0,0 +1,347 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of a Qt Solutions component.
+**
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+****************************************************************************/
+
+/*!
+
+\page developingplugins.html
+\title Developing Plugins
+
+The QtBrowserPlugin solution makes it easy to write browser plugins
+that can be used in Mozilla FireFox, Safari, Opera, Google Chrome,
+QtWebKit and any other web browser that supports the "Netscape Plugin
+API", NPAPI:
+
+\l http://en.wikipedia.org/wiki/NPAPI
+
+\l http://developer.mozilla.org/en/Plugins
+
+Microsoft Internet Explorer does not support this API. However, you
+can use the ActiveQt framework to turn your plugin into an ActiveX
+control, that will work as an IE plugin. Thus, QtBrowserPlugin makes
+it possible to create a single plugin DLL that will work with all
+popular browsers on Windows.
+
+\tableofcontents
+
+\section1 Implementing plugins
+
+Since any QWidget or QObject subclass can be turned into a plugin with
+little effort it is usually easiest to do the development as a
+stand-alone Qt application - debugging plugins can be cumbersome.
+
+Make sure that the subclass(es) you want to export use the Q_OBJECT
+macro and provide a default constructor. Use the Q_CLASSINFO macro to
+specify a semicolon-delimited list of the MIME types each of your classes
+supports, and export the classes through the QTNPFACTORY macros:
+
+\quotefromfile grapher.cpp
+\skipto QTNPFACTORY_BEGIN
+\printuntil QTNPFACTORY_END()
+
+This should be done only once, in one of the source files. If your
+plugin needs to export multiple classes (i.e. to handle different sets of
+MIME types), make one QTNPCLASS line for each of them.
+
+Include the \c qtbrowserplugin.pri in your .pro file, and regenerate
+the makefile with qmake. The resulting makefile will generate a shared
+library that the browsers will be able to load as a plugin.
+
+\section2 Windows specific notes
+
+On Windows, the DLL will have \c{"np"} prepended to its name - this is
+required by all browsers to recognize the library as a plugin.
+
+On Windows it is required to link a version resource into the plugin
+library. To do that, create an .rc file (a plain-text file) and add
+it to the \c RC_FILE variable of your project. The .rc file needs to
+contain a version description like here:
+
+\quotefromfile grapher.rc
+\skipto VERSION
+\printuntil VarFileInfo
+\printuntil END
+\printuntil END
+
+\section3 Enabling ActiveX support
+
+To build a plugin project with ActiveX support, use ActiveQt's QAxServer
+module by adding the following line to your project:
+
+CONFIG += qaxserver
+
+Also, add the following line to your resource file
+
+\c{1 TYPELIB "thisfile.rc"}
+
+In your plugin code, use Q_CLASSINFO and the QAxFactory macros as
+usual; refer to the ActiveQt documentation.
+
+When you build the plugin, then ActiveQt will perform the build steps
+required to turn the plugin library into an ActiveX control server
+which provides your plugin classes not only to browsers supporting the
+npruntime API, but also to browsers supporting ActiveX controls
+(i.e. Internet Explorer).
+
+However, note that calling QtNPBindable APIs will not do anything when
+the browser does not support the npruntime API. In some cases,
+QAxBindable provides equivalent APIs (i.e. for reading incoming data).
+
+\section2 Unix specific notes
+
+On Unix/Linux, QtBrowserPlugin uses the XEmbed protocol. Hence,
+plugins will only work for browsers that support this protocol. This
+is true for the recent versions of all the most popular browsers. For
+Opera, it requires at least version 9.6, QtWebKit requires at least Qt
+version 4.5.
+
+\section3 Known Issues on Unix/Linux
+
+In some rare cases, symbol clash with other instances of the Qt
+libraries may occur. That is, if the browser itself uses Qt, or other
+plugins do, and these are loaded into the same address space, your
+plugin's calls to the Qt API may end up in a different version of the
+Qt library than what was intended, leading to undefined results.
+
+If you should hit this problem, it is easily worked around by linking
+your plugin to Qt libraries that are either statically built, or that
+is built to use a separate namespace (by adding the
+\c{-qtnamespace=SomeNamespace} option to Qt's \c configure command).
+
+\section2 Mac OSX specific notes
+
+NOTE: Mac support is experimental only! Expect failure with recent
+versions of Qt!
+
+To build a browser plugin on Mac, two plain-text resource files are
+needed: an \c Info.plist file and a \c .r file. To create these files,
+it is easiest to use the ones provided with the QtBrowserPlugin
+examples as templates, editing as necessary. Then add them to your
+project (\c .pro file) like this:
+
+\quotefromfile grapher.pro
+\skipto QMAKE_INFO_PLIST
+\printuntil QMAKE_BUNDLE_DATA
+
+\section3 Known Issues on Mac
+
+\list
+\o After navigating away from the webpage with the plugin, and then back
+again, the plugin no longer shows up or runs. No workaround currently
+known.
+\endlist
+
+\section1 Installing and using Plugins
+
+Most browsers provide a UI to display all loaded plugins, either as a
+menu choice, and/or by navigating to the url \c{about:plugins}. Use this
+functionality to diagnose problems.
+
+The plugin will need to load the Qt libraries at runtime (unless they
+are statically linked into the plugin). Hence, the required Qt dynamic
+libraries (at least QtCore, QtGui, and QtNetwork) must be located in a
+directory which the system searches for DLLs. This may or may not
+include the directory where the plugin itself is located, depending on
+the OS and browser.
+
+Windows, Netscape-style browsers: To install the plugin, copy the
+plugin library in the "plugins" directory of the browser. See
+\c{src/qtbrowserplugin.pri} for some typical paths. Typically, it is
+sufficient to install it for one browser, and the others will find
+it. Ref. \l http://developer.mozilla.org/en/Plugins/The_First_Install_Problem
+
+Windows, Internet Explorer: The Makefile generated by qmake by default
+runs the necessary commands to register the plugin as an ActiveX
+server (if \c CONFIG includes \c qaxserver). To unregister, use the
+following command:
+
+\code
+c:\Qt-x.y.z\bin\idc.exe path\to\myplugin.dll /unregserver
+\endcode
+
+Mac: The build will result in a directory called \c
+myplugin.plugin. To install, copy this directory with all contents to
+\c{/Library/Internet Plugins}.
+
+Unix: Copy the file \c myplugin.so to the browser or system plugin
+directory, typically \c /usr/lib/browser-plugins. The path to the Qt
+libraries may be set in the LD_LIBRARY_PATH environment variable of
+the browser process.
+
+\section2 Embedding the plugin on a web page.
+
+Browsers vary slightly in their support for different plugin-embedding
+HTML tags. The following should work for most popular browsers.
+
+\section3 Plugins with data:
+
+Plugins can be initialized with a data file, which will be delivered
+at some point after plugin creation to the plugin through the
+QtNPBindable::readData() virtual function. (This applies to
+ActiveQt-based plugins in IE as well).
+
+Assuming the MIME type is \c{application/x-graphable}, with the
+extension \c{g1n}:
+
+\code
+<object type="application/x-graphable" data="graph.g1n" width=50% height=300>
+Plugin not installed!
+</object>
+\endcode
+
+or
+
+\code
+<object data="http://qt.nokia.com/doc/3.3/graph.g1n" width=50% height=300>
+Plugin not installed!
+</object>
+\endcode
+
+Note that some browsers will not display or immediately unload the plugin
+if the data file does not exist, while other browsers will display the plugin
+without ever calling readData().
+
+If the plugin has declared a Q_PROPERTY called \c src, the setter
+function for this property will be called at instantiation time with
+the data URL as parameter.
+
+\section3 Plugins without data:
+
+Assuming the (dummy) MIME type is \c{trivial/very}:
+
+\code
+<embed type="trivial/very" [property]=[value]>
+\endcode
+
+\section3 Tags not working equally with all browsers
+
+\list
+\o \c{<object classid=...>} Only IE supports this.
+\o \c{<embed src=...>} IE will not call readData(), but the \c src property will be set, so manual data loading is possible.
+\o \c{<object type=... data=...><param ...>} Ditto.
+\o \c{<object type=...>} Some browsers do not display plugins without \c data attribute
+\endlist
+
+For additional information, see \l http://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics#Using_HTML_to_Display_Plug-ins
+
+
+\section2 Browser full-page view of a plugin
+
+If files viewed by a plugin are provided by an HTTP server
+(using a \c{http://...} URL) then the server must be configured to send
+the correct MIME type for the file, e.g. by editing Apache's
+\c{mime.types} file. (Not required for IE).
+
+If the files are viewed via a \c{file://...} URL (e.g. by the user
+opening the data file with \c{File->Open}), then the browser will use
+the filename extension to decide the file type (and hence the plugin
+to load).
+
+In the full-page case, IE will not call readData(), but the \c src
+property will be set, so manual data loading is possible. See the \c
+grapher example.
+
+\section2 Scripting
+
+Plugins embedded into browsers that support the respecive NPAPI extensions as
+well as ActiveX controls can be accessed from JavaScript in the HTML page.
+
+\quotefromfile ../examples/trivial/scripting.qdoc
+\skipto <object
+\printto var
+
+Before the object can be accessed, some browsers require it to be located
+based on the \c id in the \c object tag.
+
+\section3 JavaScript calling slots and properties
+
+\printto ScriptableObject.text
+
+Object properties and public slots can then be accessed as usual. The QtBrowserPlugin
+implementation supports properties and slots that have parameters and types that
+QVariant can be convert to and from strings, or that are QObjects. Only public slots
+and scriptable properties are exposed. If the QObject class sets a "ToSuperClass"
+Q_CLASSINFO, then only slots and properties up to the specified superclass are exposed.
+See the QAxServer documentation provided with Qt for more information.
+
+\section3 The plugin calling JavaScript
+
+JavaScript functions can be connected to Qt signals emitted by the Qt plugin object.
+
+\printuntil </script>
+
+Assign a function to a property of the object with the same name as the signal. Overloads
+(i.e. two signal with the same name, but different parameters) are not possible.
+
+\printuntil </script>
+
+Internet Explorer requires a special syntax that is not compatible with other browsers,
+but the IE-specific function can just call the other functions.
+
+\section3 Using plugins in forms
+
+Plugin objects can be embedded as form elements. To specify which property value
+the plugin should report to the form upon submission, specify the name of the
+property as the DefaultProperty using a Q_CLASSINFO entry:
+
+\code
+Q_OBJECT
+Q_CLASSINFO("MIME", "trivial/very:xxx:Trivial and useless")
+Q_CLASSINFO("DefaultProperty", "text")
+\endcode
+
+In the HTML page, embed the object as usual:
+
+\code
+<form method="get" action="http://www.server.com/search.asp">
+<table>
+<tr>
+ <td>Search:</td>
+ <td><object type="trivial/very" name="text" WIDTH=100 HEIGHT=20></object></td>
+ <td><input type="submit" value="Check"></td>
+</tr>
+</table>
+</form>
+\endcode
+
+Clicking the button will make the browser request a URL
+
+\c http://www.server.com/search.asp?text=[value from object]
+
+The property type needs to be convertible to a string.
+*/