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>
57 s_iconLoader =
new KIconLoader(s_componentData->componentName(), s_componentData->dirs());
62 delete s_componentData;
66 const QVariantList & args,
const QString &) {
68 for (
int i = 0; i < args.size(); ++i)
69 argsStrings.append(args[i].toString());
75 class KJavaServerMaintainer;
77 class KJavaServerMaintainer {
79 KJavaServerMaintainer () { }
80 ~KJavaServerMaintainer ();
85 QPointer <KJavaAppletServer> server;
89 ContextMap m_contextmap;
93 KJavaServerMaintainer::~KJavaServerMaintainer () {
99 ContextMap::iterator it = m_contextmap.find (key);
100 if (it != m_contextmap.end ()) {
105 m_contextmap.insert (key, qMakePair(context, 1));
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);
126 :
KDialog(parent), m_appletWidget (parent)
128 setObjectName(
"paramdialog" );
129 setCaption(
i18n (
"Applet Parameters") );
130 setButtons( KDialog::Close );
131 setDefaultButton( KDialog::Close );
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);
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);
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);
171 setMainWidget (table);
172 connect(
this,SIGNAL(closeClicked()),
this,SLOT(
slotClose()));
176 table->setRangeSelected(QTableWidgetSelectionRange(0, 0, 0, 0),
true);
179 applet->
setBaseURL (table->item (1, 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 ())
185 table->item (i, 1)->text ());
191 class CoverWidget :
public QWidget {
198 void resizeEvent (QResizeEvent * e);
201 inline CoverWidget::CoverWidget (
QWidget * parent)
204 setObjectName(
"KJavaAppletViewer Widget");
206 setFocusProxy (m_appletwidget);
210 return m_appletwidget;
213 void CoverWidget::resizeEvent (QResizeEvent * e) {
214 m_appletwidget->
resize (e->size().width(), e->size().height());
219 class StatusBarIcon :
public QLabel {
225 void mousePressEvent (QMouseEvent *) {
226 serverMaintainer->server->showConsole ();
234 : KParts::ReadOnlyPart (parent),
237 m_statusbar (new KParts::StatusBarExtension (this)),
238 m_statusbar_icon (0L),
241 m_view =
new CoverWidget (wparent);
242 QString classname, classid, codebase, khtml_codebase, src_param;
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(
"=");
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" ||
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 ())
270 }
else if (name ==
"__KHTML__CLASSID")
273 else if (name_lower == QLatin1String(
"code") ||
274 name_lower == QLatin1String(
"java_code"))
276 else if (name_lower == QLatin1String(
"src"))
278 else if (name_lower == QLatin1String(
"archive") ||
279 name_lower == QLatin1String(
"java_archive") ||
280 name_lower.startsWith(QLatin1String(
"cache_archive")))
282 else if (name_lower == QLatin1String(
"name"))
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__"))) {
294 if (!classid.isEmpty ()) {
296 kDebug(6100) <<
"classid=" << classid << classid.startsWith(
"clsid:");
297 if (classid.startsWith(QLatin1String(
"clsid:")))
299 khtml_codebase = baseurl;
300 else if (classname.isEmpty () && classid.startsWith(QLatin1String(
"java:")))
301 classname = classid.mid(5);
303 if (classname.isEmpty ())
304 classname = src_param;
305 else if (!src_param.isEmpty ())
307 if (codebase.isEmpty ())
308 codebase = khtml_codebase;
309 if (baseurl.isEmpty ()) {
311 QString pwd = QDir().absolutePath ();
312 if (!pwd.endsWith (
QString(QDir::separator ())))
313 pwd += QDir::separator ();
316 if (width > 0 && height > 0) {
317 m_view->resize (width, height);
320 if (appletname.isEmpty())
321 appletname = classname;
325 const KUrl kbaseURL( baseurl );
326 const KUrl newURL(kbaseURL, codebase);
327 if (KAuthorized::authorizeUrlAction(
"redirect",
KUrl(baseurl), newURL))
335 serverMaintainer->setServer (server);
343 { QDataStream stream(¶ms, QIODevice::WriteOnly); stream << info; }
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()));
349 if (!reply.isValid()) {
350 kWarning() <<
"checkAuthInfo DBUS call failed: " << reply.error().message();
353 QDataStream stream2(reply.value());
354 stream2 >> authResult;
355 applet->
setUser (authResult.username);
363 wparent->topLevelWidget ()->installEventFilter (
this);
383 case QEvent::Destroy:
391 return KParts::ReadOnlyPart::eventFilter(o,e);
396 serverMaintainer->releaseContext (parent(), baseurl);
397 if (m_statusbar_icon) {
399 delete m_statusbar_icon;
404 if (!m_view)
return false;
412 if (applet->
baseURL ().isEmpty ()) {
420 if (!m_statusbar_icon) {
423 m_statusbar_icon =
new StatusBarIcon (sb);
428 if (applet->
size().width() > 0 || m_view->isVisible())
431 QTimer::singleShot (10,
this, SLOT (delayedCreateTimeOut()));
434 return url.isValid ();
438 kDebug(6100) <<
"closeUrl";
440 KJavaApplet*
const applet = m_view->appletWidget ()->applet ();
448 return !m_closed && m_view &&
449 m_view->appletWidget ()->applet () &&
450 m_view->appletWidget ()->applet ()->isAlive ();
457 void KJavaAppletViewer::delayedCreateTimeOut () {
465 KJavaApplet*
const applet = m_view->appletWidget ()->applet ();
475 return new KAboutData(
"KJavaAppletViewer", 0,
ki18n(
"KDE Java Applet Plugin"),
"1.0");
481 : KParts::BrowserExtension (parent )
483 setObjectName(
"KJavaAppletViewer Browser Extension" );
505 for ( ; it != itEnd; ++it) {
507 stream << it.value ();
522 stream >> paramcount;
523 for (
int i = 0; i < paramcount; ++i) {
527 kDebug(6100) <<
"restoreState key:" << key <<
" val:" << val;
536 const KUrl url (doc);
545 : KParts::LiveConnectExtension (parent ), m_viewer (parent)
547 setObjectName(
"KJavaAppletViewer LiveConnect Extension" );
551 const unsigned long objid,
const QString & name,
553 unsigned long & rid,
QString & value)
558 KJavaApplet*
const applet = m_viewer->
view ()->appletWidget ()->applet ();
559 args.append (QString::number (applet->
appletId ()));
560 args.append (QString::number ((
int) objid));
565 if (!ret || ret_args.count() != 3)
return false;
567 int itype = ret_args[0].toInt (&ok);
568 if (!ok || itype < 0)
return false;
570 rid = ret_args[1].toInt (&ok);
571 if (!ok)
return false;
581 KJavaApplet*
const applet = m_viewer->
view ()->appletWidget ()->applet ();
582 args.append (QString::number (applet->
appletId ()));
583 args.append (QString::number ((
int) objid));
596 KJavaApplet*
const applet = m_viewer->
view ()->appletWidget ()->applet ();
598 args.append (QString::number (applet->
appletId ()));
599 args.append (QString::number ((
int) objid));
602 QStringList::const_iterator it = fargs.begin();
603 const QStringList::const_iterator itEnd = fargs.end();
604 for ( ; it != itEnd; ++it)
611 if (!ret || ret_args.count () != 3)
return false;
613 const int itype = ret_args[0].toInt (&ok);
614 if (!ok || itype < 0)
return false;
616 retobjid = ret_args[1].toInt (&ok);
617 if (!ok)
return false;
624 if (!m_viewer->
view () || !m_viewer->
view ())
626 KJavaApplet*
const applet = m_viewer->
view ()->appletWidget ()->applet ();
627 if (!applet || objid == 0) {
633 args.append (QString::number (applet->
appletId ()));
634 args.append (QString::number ((
int) objid));
639 if (args.count () < 2 || !m_viewer->
appletAlive ())
642 QStringList::ConstIterator it = args.begin();
643 const QStringList::ConstIterator itEnd = args.end();
644 const unsigned long objid = (*it).toInt(&ok);
650 for (; it != itEnd; ++it) {
652 const QStringList::ConstIterator prev = it++;
658 int KJavaAppletViewerLiveConnectExtension::m_jssessions = 0;
662 #include "kjavaappletviewer.moc"