• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KHTML

  • sources
  • kde-4.12
  • kdelibs
  • khtml
  • java
kjavaappletviewer.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2  *
3  * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB. If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 #include "kjavaappletviewer.h"
22 
23 #include "kjavaappletwidget.h"
24 #include "kjavaappletserver.h"
25 
26 #include <stdio.h>
27 
28 #ifdef KDE_USE_FINAL
29 #undef Always
30 #endif
31 #include <QtCore/QDir>
32 #include <QtCore/QPair>
33 #include <QtCore/QTimer>
34 #include <QtCore/QPointer>
35 #include <QtGui/QLabel>
36 #include <QtGui/QTableWidget>
37 #include <QtDBus/QtDBus>
38 
39 #include <kapplication.h>
40 #include <kauthorized.h>
41 #include <kaboutdata.h>
42 #include <klocale.h>
43 #include <kstatusbar.h>
44 #include <kiconloader.h>
45 #include <kdebug.h>
46 #include <kconfig.h>
47 #include <kio/authinfo.h>
48 
49 
50 K_EXPORT_PLUGIN( KJavaAppletViewerFactory )
51 
52 KComponentData *KJavaAppletViewerFactory::s_componentData = 0;
53 KIconLoader *KJavaAppletViewerFactory::s_iconLoader = 0;
54 
55 KJavaAppletViewerFactory::KJavaAppletViewerFactory () {
56  s_componentData = new KComponentData("kjava");
57  s_iconLoader = new KIconLoader(s_componentData->componentName(), s_componentData->dirs());
58 }
59 
60 KJavaAppletViewerFactory::~KJavaAppletViewerFactory () {
61  delete s_iconLoader;
62  delete s_componentData;
63 }
64 
65 QObject *KJavaAppletViewerFactory::create(const char *, QWidget *wparent, QObject *parent,
66  const QVariantList & args, const QString &) {
67  QStringList argsStrings;
68  for (int i = 0; i < args.size(); ++i)
69  argsStrings.append(args[i].toString());
70  return new KJavaAppletViewer (wparent, parent, argsStrings);
71 }
72 
73 //-----------------------------------------------------------------------------
74 
75 class KJavaServerMaintainer;
76 
77 class KJavaServerMaintainer {
78 public:
79  KJavaServerMaintainer () { }
80  ~KJavaServerMaintainer ();
81 
82  KJavaAppletContext * getContext (QObject*, const QString &);
83  void releaseContext (QObject*, const QString &);
84  void setServer (KJavaAppletServer * s);
85  QPointer <KJavaAppletServer> server;
86 private:
87  typedef QMap <QPair <QObject*, QString>, QPair <KJavaAppletContext*, int> >
88  ContextMap;
89  ContextMap m_contextmap;
90 };
91 K_GLOBAL_STATIC(KJavaServerMaintainer, serverMaintainer)
92 
93 KJavaServerMaintainer::~KJavaServerMaintainer () {
94  delete server;
95 }
96 
97 KJavaAppletContext * KJavaServerMaintainer::getContext (QObject * w, const QString & doc) {
98  QPair<QObject*,QString> key = qMakePair (w, doc);
99  ContextMap::iterator it = m_contextmap.find (key);
100  if (it != m_contextmap.end ()) {
101  ++((*it).second);
102  return (*it).first;
103  }
104  KJavaAppletContext* const context = new KJavaAppletContext ();
105  m_contextmap.insert (key, qMakePair(context, 1));
106  return context;
107 }
108 
109 void KJavaServerMaintainer::releaseContext (QObject * w, const QString & doc) {
110  ContextMap::iterator it = m_contextmap.find (qMakePair (w, doc));
111  if (it != m_contextmap.end () && --(*it).second <= 0) {
112  kDebug(6100) << "KJavaServerMaintainer::releaseContext";
113  (*it).first->deleteLater ();
114  m_contextmap.erase (it);
115  }
116 }
117 
118 inline void KJavaServerMaintainer::setServer (KJavaAppletServer * s) {
119  if (!server)
120  server = s;
121 }
122 
123 //-----------------------------------------------------------------------------
124 
125 AppletParameterDialog::AppletParameterDialog (KJavaAppletWidget * parent)
126  : KDialog(parent), m_appletWidget (parent)
127 {
128  setObjectName( "paramdialog" );
129  setCaption( i18n ("Applet Parameters") );
130  setButtons( KDialog::Close );
131  setDefaultButton( KDialog::Close );
132  setModal( true );
133 
134  KJavaApplet* const applet = parent->applet ();
135  table = new QTableWidget (30, 2, this);
136  table->setMinimumSize (QSize (600, 400));
137  table->setColumnWidth (0, 200);
138  table->setColumnWidth (1, 340);
139  QTableWidgetItem* const header1 = new QTableWidgetItem(i18n ("Parameter"));
140  QTableWidgetItem* const header2 = new QTableWidgetItem(i18n ("Value"));
141  table->setHorizontalHeaderItem(1, header1);
142  table->setHorizontalHeaderItem(2, header2);
143  QTableWidgetItem * tit = new QTableWidgetItem(i18n("Class"));
144  tit->setFlags( tit->flags()^Qt::ItemIsEditable );
145  table->setItem (0, 0, tit);
146  tit = new QTableWidgetItem(applet->appletClass());
147  tit->setFlags( tit->flags()|Qt::ItemIsEditable );
148  table->setItem (0, 1, tit);
149  tit = new QTableWidgetItem (i18n ("Base URL"));
150  tit->setFlags( tit->flags()^Qt::ItemIsEditable );
151  table->setItem (1, 0, tit);
152  tit = new QTableWidgetItem(applet->baseURL());
153  tit->setFlags( tit->flags()|Qt::ItemIsEditable );
154  table->setItem (1, 1, tit);
155  tit = new QTableWidgetItem(i18n ("Archives"));
156  tit->setFlags( tit->flags()^Qt::ItemIsEditable );
157  table->setItem (2, 0, tit);
158  tit = new QTableWidgetItem(applet->archives());
159  tit->setFlags( tit->flags()|Qt::ItemIsEditable );
160  table->setItem (2, 1, tit);
161  QMap<QString,QString>::const_iterator it = applet->getParams().constBegin();
162  const QMap<QString,QString>::const_iterator itEnd = applet->getParams().constEnd();
163  for (int count = 2; it != itEnd; ++it) {
164  tit = new QTableWidgetItem (it.key ());
165  tit->setFlags( tit->flags()|Qt::ItemIsEditable );
166  table->setItem (++count, 0, tit);
167  tit = new QTableWidgetItem(it.value());
168  tit->setFlags( tit->flags()|Qt::ItemIsEditable );
169  table->setItem (count, 1, tit);
170  }
171  setMainWidget (table);
172  connect(this,SIGNAL(closeClicked()),this,SLOT(slotClose()));
173 }
174 
175 void AppletParameterDialog::slotClose () {
176  table->setRangeSelected(QTableWidgetSelectionRange(0, 0, 0, 0), true);
177  KJavaApplet* const applet = m_appletWidget->applet ();
178  applet->setAppletClass (table->item (0, 1)->text ());
179  applet->setBaseURL (table->item (1, 1)->text ());
180  applet->setArchives (table->item (2, 1)->text ());
181  const int lim = table->rowCount();
182  for (int i = 3; i < lim; ++i) {
183  if (table->item (i, 0) && table->item (i, 1) && !table->item (i, 0)->text ().isEmpty ())
184  applet->setParameter (table->item (i, 0)->text (),
185  table->item (i, 1)->text ());
186  }
187  hide ();
188 }
189 //-----------------------------------------------------------------------------
190 
191 class CoverWidget : public QWidget {
192  KJavaAppletWidget * m_appletwidget;
193 public:
194  CoverWidget (QWidget *);
195  ~CoverWidget () {}
196  KJavaAppletWidget * appletWidget () const;
197 protected:
198  void resizeEvent (QResizeEvent * e);
199 };
200 
201 inline CoverWidget::CoverWidget (QWidget * parent)
202  : QWidget (parent )
203 {
204  setObjectName( "KJavaAppletViewer Widget");
205  m_appletwidget = new KJavaAppletWidget (this);
206  setFocusProxy (m_appletwidget);
207 }
208 
209 inline KJavaAppletWidget * CoverWidget::appletWidget () const {
210  return m_appletwidget;
211 }
212 
213 void CoverWidget::resizeEvent (QResizeEvent * e) {
214  m_appletwidget->resize (e->size().width(), e->size().height());
215 }
216 
217 //-----------------------------------------------------------------------------
218 
219 class StatusBarIcon : public QLabel {
220 public:
221  StatusBarIcon (QWidget * parent) : QLabel (parent) {
222  setPixmap ( KJavaAppletViewerFactory::iconLoader()->loadIcon("java", KIconLoader::Small) );
223  }
224 protected:
225  void mousePressEvent (QMouseEvent *) {
226  serverMaintainer->server->showConsole ();
227  }
228 };
229 
230 //-----------------------------------------------------------------------------
231 
232 KJavaAppletViewer::KJavaAppletViewer (QWidget * wparent,
233  QObject * parent, const QStringList & args)
234  : KParts::ReadOnlyPart (parent),
235  m_browserextension (new KJavaAppletViewerBrowserExtension (this)),
236  m_liveconnect (new KJavaAppletViewerLiveConnectExtension (this)),
237  m_statusbar (new KParts::StatusBarExtension (this)),
238  m_statusbar_icon (0L),
239  m_closed (true)
240 {
241  m_view = new CoverWidget (wparent);
242  QString classname, classid, codebase, khtml_codebase, src_param;
243  QString appletname;
244  int width = -1;
245  int height = -1;
246  KJavaApplet* const applet = m_view->appletWidget()->applet ();
247  QStringList::const_iterator it = args.begin();
248  const QStringList::const_iterator itEnd = args.end();
249  for ( ; it != itEnd; ++it) {
250  const int equalPos = (*it).indexOf("=");
251  if (equalPos > 0) {
252  const QString name = (*it).left (equalPos).toUpper ();
253  QString value = (*it).right ((*it).length () - equalPos - 1);
254  if (value.at(0)=='\"')
255  value = value.right (value.length () - 1);
256  if (value.at (value.length () - 1) == '\"')
257  value.truncate (value.length () - 1);
258  kDebug(6100) << "name=" << name << " value=" << value;
259  if (!name.isEmpty()) {
260  const QString name_lower = name.toLower ();
261  if (name == "__KHTML__PLUGINBASEURL" ||
262  name == "BASEURL") {
263  baseurl = KUrl (KUrl (value), QString (".")).url ();
264  } else if (name == "__KHTML__CODEBASE")
265  khtml_codebase = value;
266  else if (name_lower == QLatin1String("codebase") ||
267  name_lower == QLatin1String("java_codebase")) {
268  if (!value.isEmpty ())
269  codebase = value;
270  } else if (name == "__KHTML__CLASSID")
271  //else if (name.toLower()==QLatin1String("classid"))
272  classid = value;
273  else if (name_lower == QLatin1String("code") ||
274  name_lower == QLatin1String("java_code"))
275  classname = value;
276  else if (name_lower == QLatin1String("src"))
277  src_param = value;
278  else if (name_lower == QLatin1String("archive") ||
279  name_lower == QLatin1String("java_archive") ||
280  name_lower.startsWith(QLatin1String("cache_archive")))
281  applet->setArchives (value);
282  else if (name_lower == QLatin1String("name"))
283  appletname = value;
284  else if (name_lower == QLatin1String("width"))
285  width = value.toInt();
286  else if (name_lower == QLatin1String("height"))
287  height = value.toInt();
288  if (!name.startsWith(QLatin1String("__KHTML__"))) {
289  applet->setParameter (name, value);
290  }
291  }
292  }
293  }
294  if (!classid.isEmpty ()) {
295  applet->setParameter ("CLSID", classid);
296  kDebug(6100) << "classid=" << classid << classid.startsWith("clsid:");
297  if (classid.startsWith(QLatin1String("clsid:")))
298  // codeBase contains the URL to the plugin page
299  khtml_codebase = baseurl;
300  else if (classname.isEmpty () && classid.startsWith(QLatin1String("java:")))
301  classname = classid.mid(5);
302  }
303  if (classname.isEmpty ())
304  classname = src_param;
305  else if (!src_param.isEmpty ())
306  applet->setParameter (QString ("SRC"), src_param);
307  if (codebase.isEmpty ())
308  codebase = khtml_codebase;
309  if (baseurl.isEmpty ()) {
310  // not embedded in khtml
311  QString pwd = QDir().absolutePath ();
312  if (!pwd.endsWith ( QString(QDir::separator ())))
313  pwd += QDir::separator ();
314  baseurl = KUrl (KUrl (pwd), codebase).url ();
315  }
316  if (width > 0 && height > 0) {
317  m_view->resize (width, height);
318  applet->setSize( QSize( width, height ) );
319  }
320  if (appletname.isEmpty())
321  appletname = classname;
322  applet->setAppletName (appletname);
323  applet->setBaseURL (baseurl);
324  // check codebase first
325  const KUrl kbaseURL( baseurl );
326  const KUrl newURL(kbaseURL, codebase);
327  if (KAuthorized::authorizeUrlAction("redirect", KUrl(baseurl), newURL))
328  applet->setCodeBase (newURL.url());
329  applet->setAppletClass (classname);
330  KJavaAppletContext* const cxt = serverMaintainer->getContext (parent, baseurl);
331  applet->setAppletContext (cxt);
332 
333  KJavaAppletServer* const server = cxt->getServer ();
334 
335  serverMaintainer->setServer (server);
336 
337  if (!server->usingKIO ()) {
338  /* if this page needs authentication */
339  KIO::AuthInfo info;
340  info.url = baseurl;
341  info.verifyPath = true;
342  QByteArray params;
343  { QDataStream stream(&params, QIODevice::WriteOnly); stream << info; }
344 
345  // make the call
346  QDBusInterface kpasswdserver("org.kde.kded", "/modules/kpasswdserver", "org.kde.KPasswdServer");
347  QDBusReply<QByteArray> reply = kpasswdserver.call ("checkAuthInfo", params, qlonglong(m_view->topLevelWidget()->winId()), qlonglong(kapp->userTimestamp()));
348 
349  if (!reply.isValid()) {
350  kWarning() << "checkAuthInfo DBUS call failed: " << reply.error().message();
351  } else {
352  KIO::AuthInfo authResult;
353  QDataStream stream2(reply.value());
354  stream2 >> authResult;
355  applet->setUser (authResult.username);
356  applet->setPassword (authResult.password);
357  applet->setAuthName (authResult.realmValue);
358  }
359  }
360 
361  /* install event filter for close events */
362  if (wparent)
363  wparent->topLevelWidget ()->installEventFilter (this);
364 
365  setComponentData (KJavaAppletViewerFactory::componentData());
366  KParts::Part::setWidget (m_view);
367 
368  connect (applet->getContext(), SIGNAL(appletLoaded()), this, SLOT(appletLoaded()));
369  connect (applet->getContext(), SIGNAL(showDocument(QString,QString)), m_browserextension, SLOT(showDocument(QString,QString)));
370  connect (applet->getContext(), SIGNAL(showStatus(QString)), this, SLOT(infoMessage(QString)));
371  connect (applet, SIGNAL(jsEvent(QStringList)), m_liveconnect, SLOT(jsEvent(QStringList)));
372 }
373 
374 CoverWidget * KJavaAppletViewer::view () const
375 {
376  return m_view;
377 }
378 
379 
380 bool KJavaAppletViewer::eventFilter (QObject *o, QEvent *e) {
381  if (m_liveconnect->jsSessions () > 0) {
382  switch (e->type()) {
383  case QEvent::Destroy:
384  case QEvent::Close:
385  case QEvent::Quit:
386  return true;
387  default:
388  break;
389  }
390  }
391  return KParts::ReadOnlyPart::eventFilter(o,e);
392 }
393 
394 KJavaAppletViewer::~KJavaAppletViewer () {
395  m_view = 0L;
396  serverMaintainer->releaseContext (parent(), baseurl);
397  if (m_statusbar_icon) {
398  m_statusbar->removeStatusBarItem (m_statusbar_icon);
399  delete m_statusbar_icon;
400  }
401 }
402 
403 bool KJavaAppletViewer::openUrl (const KUrl & url) {
404  if (!m_view) return false;
405  m_closed = false;
406  KJavaAppletWidget* const w = m_view->appletWidget ();
407  KJavaApplet* const applet = w->applet ();
408  if (applet->isCreated ())
409  applet->stop ();
410  if (applet->appletClass ().isEmpty ()) {
411  // preview without setting a class?
412  if (applet->baseURL ().isEmpty ()) {
413  applet->setAppletClass (url.fileName ());
414  applet->setBaseURL (url.upUrl ().url ());
415  } else
416  applet->setAppletClass (url.url ());
417  AppletParameterDialog (w).exec ();
418  applet->setSize (w->sizeHint());
419  }
420  if (!m_statusbar_icon) {
421  KStatusBar *sb = m_statusbar->statusBar();
422  if (sb) {
423  m_statusbar_icon = new StatusBarIcon (sb);
424  m_statusbar->addStatusBarItem (m_statusbar_icon, 0, false);
425  }
426  }
427  // delay showApplet if size is unknown and m_view not shown
428  if (applet->size().width() > 0 || m_view->isVisible())
429  w->showApplet ();
430  else
431  QTimer::singleShot (10, this, SLOT (delayedCreateTimeOut()));
432  if (!applet->failed ())
433  emit started (0L);
434  return url.isValid ();
435 }
436 
437 bool KJavaAppletViewer::closeUrl () {
438  kDebug(6100) << "closeUrl";
439  m_closed = true;
440  KJavaApplet* const applet = m_view->appletWidget ()->applet ();
441  if (applet->isCreated ())
442  applet->stop ();
443  applet->getContext()->getServer()->endWaitForReturnData();
444  return true;
445 }
446 
447 bool KJavaAppletViewer::appletAlive () const {
448  return !m_closed && m_view &&
449  m_view->appletWidget ()->applet () &&
450  m_view->appletWidget ()->applet ()->isAlive ();
451 }
452 
453 bool KJavaAppletViewer::openFile () {
454  return false;
455 }
456 
457 void KJavaAppletViewer::delayedCreateTimeOut () {
458  KJavaAppletWidget* const w = m_view->appletWidget ();
459  if (!w->applet ()->isCreated () && !m_closed)
460  w->showApplet ();
461 }
462 
463 void KJavaAppletViewer::appletLoaded () {
464  if (!m_view) return;
465  KJavaApplet* const applet = m_view->appletWidget ()->applet ();
466  if (applet->isAlive() || applet->failed())
467  emit completed();
468 }
469 
470 void KJavaAppletViewer::infoMessage (const QString & msg) {
471  m_browserextension->infoMessage(msg);
472 }
473 
474 KAboutData* KJavaAppletViewer::createAboutData () {
475  return new KAboutData("KJavaAppletViewer", 0, ki18n("KDE Java Applet Plugin"), "1.0");
476 }
477 
478 //---------------------------------------------------------------------
479 
480 KJavaAppletViewerBrowserExtension::KJavaAppletViewerBrowserExtension (KJavaAppletViewer * parent)
481  : KParts::BrowserExtension (parent )
482 {
483  setObjectName( "KJavaAppletViewer Browser Extension" );
484 }
485 
486 void KJavaAppletViewerBrowserExtension::urlChanged (const QString & url) {
487  emit setLocationBarUrl (url);
488 }
489 
490 void KJavaAppletViewerBrowserExtension::setLoadingProgress (int percentage) {
491  emit loadingProgress (percentage);
492 }
493 
494 void KJavaAppletViewerBrowserExtension::setBrowserArguments (const KParts::BrowserArguments & /*args*/) {
495 }
496 
497 void KJavaAppletViewerBrowserExtension::saveState (QDataStream & stream) {
498  KJavaApplet* const applet = static_cast<KJavaAppletViewer*>(parent())->view()->appletWidget ()->applet ();
499  stream << applet->appletClass();
500  stream << applet->baseURL();
501  stream << applet->archives();
502  stream << applet->getParams().size ();
503  QMap<QString,QString>::const_iterator it = applet->getParams().constBegin();
504  const QMap<QString,QString>::const_iterator itEnd = applet->getParams().constEnd();
505  for ( ; it != itEnd; ++it) {
506  stream << it.key ();
507  stream << it.value ();
508  }
509 }
510 
511 void KJavaAppletViewerBrowserExtension::restoreState (QDataStream & stream) {
512  KJavaAppletWidget* const w = static_cast<KJavaAppletViewer*>(parent())->view()->appletWidget();
513  KJavaApplet* const applet = w->applet ();
514  QString key, val;
515  int paramcount;
516  stream >> val;
517  applet->setAppletClass (val);
518  stream >> val;
519  applet->setBaseURL (val);
520  stream >> val;
521  applet->setArchives (val);
522  stream >> paramcount;
523  for (int i = 0; i < paramcount; ++i) {
524  stream >> key;
525  stream >> val;
526  applet->setParameter (key, val);
527  kDebug(6100) << "restoreState key:" << key << " val:" << val;
528  }
529  applet->setSize (w->sizeHint ());
530  if (w->isVisible())
531  w->showApplet ();
532 }
533 
534 void KJavaAppletViewerBrowserExtension::showDocument (const QString & doc,
535  const QString & frame) {
536  const KUrl url (doc);
537  KParts::BrowserArguments browserArgs;
538  browserArgs.frameName = frame;
539  emit openUrlRequest(url, KParts::OpenUrlArguments(), browserArgs);
540 }
541 
542 //-----------------------------------------------------------------------------
543 
544 KJavaAppletViewerLiveConnectExtension::KJavaAppletViewerLiveConnectExtension(KJavaAppletViewer * parent)
545  : KParts::LiveConnectExtension (parent ), m_viewer (parent)
546 {
547  setObjectName( "KJavaAppletViewer LiveConnect Extension" );
548 }
549 
550 bool KJavaAppletViewerLiveConnectExtension::get (
551  const unsigned long objid, const QString & name,
552  KParts::LiveConnectExtension::Type & type,
553  unsigned long & rid, QString & value)
554 {
555  if (!m_viewer->appletAlive ())
556  return false;
557  QStringList args, ret_args;
558  KJavaApplet* const applet = m_viewer->view ()->appletWidget ()->applet ();
559  args.append (QString::number (applet->appletId ()));
560  args.append (QString::number ((int) objid));
561  args.append (name);
562  m_jssessions++;
563  const bool ret = applet->getContext()->getMember (args, ret_args);
564  m_jssessions--;
565  if (!ret || ret_args.count() != 3) return false;
566  bool ok;
567  int itype = ret_args[0].toInt (&ok);
568  if (!ok || itype < 0) return false;
569  type = (KParts::LiveConnectExtension::Type) itype;
570  rid = ret_args[1].toInt (&ok);
571  if (!ok) return false;
572  value = ret_args[2];
573  return true;
574 }
575 
576 bool KJavaAppletViewerLiveConnectExtension::put(const unsigned long objid, const QString & name, const QString & value)
577 {
578  if (!m_viewer->appletAlive ())
579  return false;
580  QStringList args;
581  KJavaApplet* const applet = m_viewer->view ()->appletWidget ()->applet ();
582  args.append (QString::number (applet->appletId ()));
583  args.append (QString::number ((int) objid));
584  args.append (name);
585  args.append (value);
586  ++m_jssessions;
587  const bool ret = applet->getContext()->putMember (args);
588  --m_jssessions;
589  return ret;
590 }
591 
592 bool KJavaAppletViewerLiveConnectExtension::call( const unsigned long objid, const QString & func, const QStringList & fargs, KParts::LiveConnectExtension::Type & type, unsigned long & retobjid, QString & value )
593 {
594  if (!m_viewer->appletAlive ())
595  return false;
596  KJavaApplet* const applet = m_viewer->view ()->appletWidget ()->applet ();
597  QStringList args, ret_args;
598  args.append (QString::number (applet->appletId ()));
599  args.append (QString::number ((int) objid));
600  args.append (func);
601  {
602  QStringList::const_iterator it = fargs.begin();
603  const QStringList::const_iterator itEnd = fargs.end();
604  for ( ; it != itEnd; ++it)
605  args.append(*it);
606  }
607 
608  ++m_jssessions;
609  const bool ret = applet->getContext()->callMember (args, ret_args);
610  --m_jssessions;
611  if (!ret || ret_args.count () != 3) return false;
612  bool ok;
613  const int itype = ret_args[0].toInt (&ok);
614  if (!ok || itype < 0) return false;
615  type = (KParts::LiveConnectExtension::Type) itype;
616  retobjid = ret_args[1].toInt (&ok);
617  if (!ok) return false;
618  value = ret_args[2];
619  return true;
620 }
621 
622 void KJavaAppletViewerLiveConnectExtension::unregister(const unsigned long objid)
623 {
624  if (!m_viewer->view () || !m_viewer->view ())
625  return;
626  KJavaApplet* const applet = m_viewer->view ()->appletWidget ()->applet ();
627  if (!applet || objid == 0) {
628  // typically a gc after a function call on the applet,
629  // no need to send to the jvm
630  return;
631  }
632  QStringList args;
633  args.append (QString::number (applet->appletId ()));
634  args.append (QString::number ((int) objid));
635  applet->getContext()->derefObject (args);
636 }
637 
638 void KJavaAppletViewerLiveConnectExtension::jsEvent (const QStringList & args) {
639  if (args.count () < 2 || !m_viewer->appletAlive ())
640  return;
641  bool ok;
642  QStringList::ConstIterator it = args.begin();
643  const QStringList::ConstIterator itEnd = args.end();
644  const unsigned long objid = (*it).toInt(&ok);
645  ++it;
646  const QString event = (*it);
647  ++it;
648  KParts::LiveConnectExtension::ArgList arglist;
649 
650  for (; it != itEnd; ++it) {
651  // take a deep breath here
652  const QStringList::ConstIterator prev = it++;
653  arglist.push_back(KParts::LiveConnectExtension::ArgList::value_type((KParts::LiveConnectExtension::Type) (*prev).toInt(), (*it)));
654  }
655  emit partEvent (objid, event, arglist);
656 }
657 
658 int KJavaAppletViewerLiveConnectExtension::m_jssessions = 0;
659 
660 //-----------------------------------------------------------------------------
661 
662 #include "kjavaappletviewer.moc"
KJavaAppletViewerBrowserExtension::showDocument
void showDocument(const QString &doc, const QString &frame)
Definition: kjavaappletviewer.cpp:534
KJavaAppletViewerBrowserExtension
Definition: kjavaappletviewer.h:47
KJavaAppletViewerFactory
Definition: kjavaappletviewer.h:119
i18n
QString i18n(const char *text)
AppletParameterDialog::slotClose
void slotClose()
Definition: kjavaappletviewer.cpp:175
kapp
#define kapp
KJavaAppletViewerBrowserExtension::KJavaAppletViewerBrowserExtension
KJavaAppletViewerBrowserExtension(KJavaAppletViewer *parent)
Definition: kjavaappletviewer.cpp:480
kjavaappletserver.h
KJavaAppletViewer::~KJavaAppletViewer
~KJavaAppletViewer()
Definition: kjavaappletviewer.cpp:394
KJavaAppletViewerBrowserExtension::setBrowserArguments
void setBrowserArguments(const KParts::BrowserArguments &args)
Definition: kjavaappletviewer.cpp:494
KIO::AuthInfo::url
KUrl url
kdebug.h
KJavaAppletContext::getServer
KJavaAppletServer * getServer() const
Definition: kjavaappletcontext.h:107
KJavaAppletViewerLiveConnectExtension::get
bool get(const unsigned long objid, const QString &field, KParts::LiveConnectExtension::Type &type, unsigned long &retobjid, QString &value)
Definition: kjavaappletviewer.cpp:550
KJavaAppletViewer::openUrl
virtual bool openUrl(const KUrl &url)
Definition: kjavaappletviewer.cpp:403
kapplication.h
KJavaAppletViewerFactory::iconLoader
static KIconLoader * iconLoader()
Definition: kjavaappletviewer.h:127
KJavaAppletViewerLiveConnectExtension::unregister
void unregister(const unsigned long objid)
Definition: kjavaappletviewer.cpp:622
KJavaAppletWidget::sizeHint
QSize sizeHint() const
Definition: kjavaappletwidget.cpp:108
KJavaAppletServer::usingKIO
bool usingKIO()
Definition: kjavaappletserver.cpp:777
KParts::LiveConnectExtension::Type
Type
kauthorized.h
ki18n
KLocalizedString ki18n(const char *msg)
KJavaAppletWidget::resize
void resize(int, int)
Definition: kjavaappletwidget.cpp:126
KParts::StatusBarExtension::statusBar
KStatusBar * statusBar() const
KParts::ReadOnlyPart::completed
void completed()
KJavaApplet::appletClass
QString & appletClass()
Get the name of the Class file the applet should run.
Definition: kjavaapplet.cpp:88
K_GLOBAL_STATIC
#define K_GLOBAL_STATIC(TYPE, NAME)
QTableWidget
kconfig.h
KParts::BrowserArguments
QWidget
kjavaappletviewer.h
KJavaApplet::appletId
int appletId()
Returns the unique ID this applet is given.
Definition: kjavaapplet.cpp:202
name
const char * name(StandardAction id)
KJavaAppletViewerLiveConnectExtension::call
bool call(const unsigned long, const QString &func, const QStringList &args, KParts::LiveConnectExtension::Type &type, unsigned long &retobjid, QString &value)
Definition: kjavaappletviewer.cpp:592
KIO::AuthInfo
KJavaApplet::isCreated
bool isCreated()
Returns status of applet- whether it's been created or not.
Definition: kjavaapplet.cpp:72
kiconloader.h
KDialog
KJavaAppletViewerBrowserExtension::urlChanged
void urlChanged(const QString &url)
Definition: kjavaappletviewer.cpp:486
KJavaApplet::setAppletContext
void setAppletContext(KJavaAppletContext *_context)
Set the applet context'.
Definition: kjavaapplet.cpp:77
QString
KJavaAppletWidget
Definition: kjavaappletwidget.h:82
K_EXPORT_PLUGIN
K_EXPORT_PLUGIN(KMultiPartFactory(kmultipartAboutData())) class KLineParser
Definition: kmultipart.cpp:50
kstatusbar.h
QObject
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
klocale.h
KStatusBar
KParts::ReadOnlyPart::started
void started(KIO::Job *)
KJavaAppletViewerBrowserExtension::saveState
void saveState(QDataStream &stream)
Definition: kjavaappletviewer.cpp:497
KUrl
KJavaAppletViewerLiveConnectExtension
Definition: kjavaappletviewer.h:61
KJavaAppletViewer::view
CoverWidget * view() const
Definition: kjavaappletviewer.cpp:374
KJavaApplet::setAppletName
void setAppletName(const QString &name)
Set the name the applet should be called in its context.
Definition: kjavaapplet.cpp:160
KJavaApplet::failed
bool failed() const
Definition: kjavaapplet.cpp:283
KJavaApplet
Definition: kjavaapplet.h:50
KJavaAppletContext::putMember
bool putMember(QStringList &args)
Definition: kjavaappletcontext.cpp:259
KParts::StatusBarExtension::removeStatusBarItem
void removeStatusBarItem(QWidget *widget)
KIconLoader::Small
KIO::AuthInfo::verifyPath
bool verifyPath
KAuthorized::authorizeUrlAction
bool authorizeUrlAction(const QString &action, const KUrl &baseUrl, const KUrl &destUrl)
KUrl::upUrl
KUrl upUrl() const
KJavaApplet::setUser
void setUser(const QString &_user)
Get/Set the user name.
Definition: kjavaapplet.h:209
QStringList
KJavaAppletViewerFactory::~KJavaAppletViewerFactory
virtual ~KJavaAppletViewerFactory()
Definition: kjavaappletviewer.cpp:60
KJavaApplet::archives
QString & archives()
Get the list of Archives that should be searched for class files and other resources.
Definition: kjavaapplet.cpp:143
KJavaAppletViewer::appletAlive
bool appletAlive() const
Definition: kjavaappletviewer.cpp:447
KJavaApplet::isAlive
bool isAlive() const
Definition: kjavaapplet.cpp:271
KAboutData
KJavaAppletViewerBrowserExtension::restoreState
void restoreState(QDataStream &stream)
Definition: kjavaappletviewer.cpp:511
KJavaAppletViewer::infoMessage
void infoMessage(const QString &)
Definition: kjavaappletviewer.cpp:470
KJavaAppletServer
Definition: kjavaappletserver.h:42
KJavaAppletViewerFactory::componentData
static const KComponentData & componentData()
Definition: kjavaappletviewer.h:126
KParts::BrowserExtension::openUrlRequest
void openUrlRequest(const KUrl &url, const KParts::OpenUrlArguments &arguments=KParts::OpenUrlArguments(), const KParts::BrowserArguments &browserArguments=KParts::BrowserArguments())
KJavaAppletViewer::appletLoaded
void appletLoaded()
Definition: kjavaappletviewer.cpp:463
KJavaAppletContext::derefObject
void derefObject(QStringList &args)
Definition: kjavaappletcontext.cpp:269
KXMLGUIClient::setComponentData
virtual void setComponentData(const KComponentData &componentData)
KJavaAppletViewer::openFile
bool openFile()
Definition: kjavaappletviewer.cpp:453
KJavaApplet::getContext
KJavaAppletContext * getContext() const
Definition: kjavaapplet.h:204
KParts::BrowserExtension::infoMessage
void infoMessage(const QString &)
authinfo.h
KParts::BrowserExtension::loadingProgress
void loadingProgress(int percent)
KJavaApplet::setSize
void setSize(QSize size)
Set the size of the applet.
Definition: kjavaapplet.cpp:128
KJavaAppletViewerLiveConnectExtension::put
bool put(const unsigned long, const QString &field, const QString &value)
Definition: kjavaappletviewer.cpp:576
KJavaAppletViewerBrowserExtension::setLoadingProgress
void setLoadingProgress(int percentage)
Definition: kjavaappletviewer.cpp:490
kjavaappletwidget.h
KJavaApplet::baseURL
QString & baseURL()
get the Base URL of the document embedding the applet
Definition: kjavaapplet.cpp:113
KJavaAppletViewerLiveConnectExtension::jsEvent
void jsEvent(const QStringList &args)
Definition: kjavaappletviewer.cpp:638
ok
KGuiItem ok()
KParts::Part::setWidget
virtual void setWidget(QWidget *widget)
KParts::StatusBarExtension::addStatusBarItem
void addStatusBarItem(QWidget *widget, int stretch, bool permanent)
KJavaAppletViewer::eventFilter
bool eventFilter(QObject *o, QEvent *e)
Definition: kjavaappletviewer.cpp:380
KParts::BrowserArguments::frameName
QString frameName
KJavaAppletWidget::showApplet
void showApplet()
Tells the AppletServer to create, initialize, and show the Applet.
Definition: kjavaappletwidget.cpp:70
KJavaAppletViewer::createAboutData
static KAboutData * createAboutData()
Definition: kjavaappletviewer.cpp:474
AppletParameterDialog::AppletParameterDialog
AppletParameterDialog(KJavaAppletWidget *parent)
Definition: kjavaappletviewer.cpp:125
KJavaAppletServer::endWaitForReturnData
void endWaitForReturnData()
Definition: kjavaappletserver.cpp:716
KJavaAppletViewer
Definition: kjavaappletviewer.h:82
KJavaApplet::size
QSize size()
Get the size of the applet.
Definition: kjavaapplet.cpp:133
KJavaAppletViewerLiveConnectExtension::KJavaAppletViewerLiveConnectExtension
KJavaAppletViewerLiveConnectExtension(KJavaAppletViewer *parent)
Definition: kjavaappletviewer.cpp:544
KJavaAppletViewerLiveConnectExtension::partEvent
void partEvent(const unsigned long objid, const QString &event, const KParts::LiveConnectExtension::ArgList &args)
KJavaAppletContext::getMember
bool getMember(QStringList &args, QStringList &ret_args)
LiveConnect functions.
Definition: kjavaappletcontext.cpp:254
KJavaApplet::setBaseURL
void setBaseURL(const QString &base)
Set the URL of the document embedding the applet.
Definition: kjavaapplet.cpp:108
KUrl::fileName
QString fileName(const DirectoryOptions &options=IgnoreTrailingSlash) const
KJavaAppletViewer::KJavaAppletViewer
KJavaAppletViewer(QWidget *wparent, QObject *parent, const QStringList &args)
Definition: kjavaappletviewer.cpp:232
KJavaAppletWidget::applet
KJavaApplet * applet()
Returns a pointer to the KJavaApplet.
Definition: kjavaappletwidget.h:95
QLabel
AppletParameterDialog
Definition: kjavaappletviewer.h:133
kWarning
static QDebug kWarning(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KJavaAppletViewerFactory::create
virtual QObject * create(const char *, QWidget *wparent, QObject *parent, const QVariantList &args, const QString &)
Definition: kjavaappletviewer.cpp:65
QPair
QSize
KJavaApplet::setAppletClass
void setAppletClass(const QString &clazzName)
Specify the name of the class file to run.
Definition: kjavaapplet.cpp:83
KJavaAppletContext::callMember
bool callMember(QStringList &args, QStringList &ret_args)
Definition: kjavaappletcontext.cpp:264
KJavaApplet::setPassword
void setPassword(const QString &_password)
Get/Set the user password.
Definition: kjavaapplet.h:215
KJavaAppletContext
Definition: kjavaappletcontext.h:45
KUrl::url
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
kaboutdata.h
KJavaApplet::setArchives
void setArchives(const QString &_archives)
Set the list of archives at the Applet's codebase to search in for class files and other resources...
Definition: kjavaapplet.cpp:138
KJavaApplet::stop
void stop()
Pause the applet.
Definition: kjavaapplet.cpp:197
KJavaAppletViewer::closeUrl
virtual bool closeUrl()
Definition: kjavaappletviewer.cpp:437
KJavaApplet::setCodeBase
void setCodeBase(const QString &codeBase)
Set the codebase of the applet classes.
Definition: kjavaapplet.cpp:118
KParts::BrowserExtension::setLocationBarUrl
void setLocationBarUrl(const QString &url)
KJavaApplet::setParameter
void setParameter(const QString &name, const QString &value)
Specify a parameter to be passed to the applet.
Definition: kjavaapplet.cpp:98
KJavaApplet::setAuthName
void setAuthName(const QString &_auth)
Get/Set the auth name.
Definition: kjavaapplet.h:221
QEvent
KJavaApplet::getParams
QMap< QString, QString > & getParams()
Get a reference to the Parameters and their values.
Definition: kjavaapplet.cpp:103
KComponentData
QMap
KJavaAppletViewerLiveConnectExtension::jsSessions
int jsSessions() const
Definition: kjavaappletviewer.h:71
KParts::OpenUrlArguments
KIconLoader
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:51:22 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KHTML

Skip menu "KHTML"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal