• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KHTML

kjavaappletcontext.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE project
00002  *
00003  * Copyright (C) 2000 Richard Moore <rich@kde.org>
00004  *               2000 Wynn Wilkes <wynnw@caldera.com>
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Library General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Library General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Library General Public License
00017  * along with this library; see the file COPYING.LIB.  If not, write to
00018  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019  * Boston, MA 02110-1301, USA.
00020  */
00021 
00022 #include "kjavaappletcontext.h"
00023 #include "kjavaappletserver.h"
00024 #include "kjavaprocess.h"
00025 #include "kjavaapplet.h"
00026 #include <klocale.h>
00027 #include <kmessagebox.h>
00028 #include <kdebug.h>
00029 #include <qmap.h>
00030 #include <qguardedptr.h>
00031 #include <qstringlist.h>
00032 #include <qregexp.h>
00033 
00034 // This file was using 6002, but kdebug.areas didn't know about that number
00035 #define DEBUGAREA 6100
00036 
00037 typedef QMap< int, QGuardedPtr<KJavaApplet> > AppletMap;
00038 
00039 // For future expansion
00040 class KJavaAppletContextPrivate
00041 {
00042 friend class KJavaAppletContext;
00043 private:
00044     AppletMap applets;
00045 };
00046 
00047 //  Static Factory Functions
00048 int KJavaAppletContext::contextCount = 0;
00049 
00050 /*  Class Implementation
00051  */
00052 KJavaAppletContext::KJavaAppletContext()
00053     : QObject()
00054 {
00055     d = new KJavaAppletContextPrivate;
00056     server = KJavaAppletServer::allocateJavaServer();
00057     connect(server->javaProcess(), SIGNAL(exited(int)), this, SLOT(javaProcessExited(int)));
00058 
00059     id = contextCount;
00060     server->createContext( id, this );
00061 
00062     ++contextCount;
00063 }
00064 
00065 KJavaAppletContext::~KJavaAppletContext()
00066 {
00067     server->destroyContext( id );
00068     KJavaAppletServer::freeJavaServer();
00069     delete d;
00070 }
00071 
00072 int KJavaAppletContext::contextId()
00073 {
00074     return id;
00075 }
00076 
00077 void KJavaAppletContext::setContextId( int _id )
00078 {
00079     id = _id;
00080 }
00081 
00082 void KJavaAppletContext::registerApplet( KJavaApplet* applet )
00083 {
00084     static int appletId = 0;
00085 
00086     applet->setAppletId( ++appletId );
00087     d->applets.insert( appletId, applet );
00088 }
00089 
00090 bool KJavaAppletContext::create( KJavaApplet* applet )
00091 {
00092     return server->createApplet( id, applet->appletId(),
00093                                 applet->appletName(),
00094                                 applet->appletClass(),
00095                                 applet->baseURL(),
00096                                 applet->user(),
00097                                 applet->password(),
00098                                 applet->authName(),
00099                                 applet->codeBase(),
00100                                 applet->archives(),
00101                                 applet->size(),
00102                                 applet->getParams(),
00103                                 applet->getWindowName() );
00104 
00105 
00106 }
00107 
00108 void KJavaAppletContext::destroy( KJavaApplet* applet )
00109 {
00110     const int appletId = applet->appletId();
00111     d->applets.remove( appletId );
00112 
00113     server->destroyApplet( id, appletId );
00114 }
00115 
00116 void KJavaAppletContext::init( KJavaApplet* applet )
00117 {
00118     server->initApplet( id, applet->appletId() );
00119 }
00120 
00121 void KJavaAppletContext::start( KJavaApplet* applet )
00122 {
00123     server->startApplet( id, applet->appletId() );
00124 }
00125 
00126 void KJavaAppletContext::stop( KJavaApplet* applet )
00127 {
00128     server->stopApplet( id, applet->appletId() );
00129 }
00130 
00131 void KJavaAppletContext::processCmd( QString cmd, QStringList args )
00132 {
00133     received( cmd, args );
00134 }
00135 
00136 void KJavaAppletContext::received( const QString& cmd, const QStringList& arg )
00137 {
00138     kdDebug(6100) << "KJavaAppletContext::received, cmd = >>" << cmd << "<<" << endl;
00139     kdDebug(6100) << "arg count = " << arg.count() << endl;
00140 
00141     if ( cmd == QString::fromLatin1("showstatus")
00142      && !arg.empty() )
00143     {
00144         QString tmp = arg.first();
00145         tmp.replace(QRegExp("[\n\r]"), "");
00146         kdDebug(6100) << "status message = " << tmp << endl;
00147         emit showStatus( tmp );
00148     }
00149     else if ( cmd == QString::fromLatin1( "showurlinframe" )
00150               && arg.count() > 1 )
00151     {
00152         kdDebug(6100) << "url = " << arg[0] << ", frame = " << arg[1] << endl;
00153         emit showDocument( arg[0], arg[1] );
00154     }
00155     else if ( cmd == QString::fromLatin1( "showdocument" )
00156               && !arg.empty() )
00157     {
00158         kdDebug(6100) << "url = " << arg.first() << endl;
00159         emit showDocument( arg.first(), "_top" );
00160     }
00161     else if ( cmd == QString::fromLatin1( "resizeapplet" )
00162               && arg.count() > 2 )
00163     {
00164         //arg[1] should be appletID
00165         //arg[2] should be new width
00166         //arg[3] should be new height
00167         bool ok;
00168         const int appletID = arg[0].toInt( &ok );
00169         const int width = arg[1].toInt( &ok );
00170         const int height = arg[2].toInt( &ok );
00171 
00172         if( !ok )
00173         {
00174             kdError(DEBUGAREA) << "could not parse out parameters for resize" << endl;
00175         }
00176         else
00177         {
00178             KJavaApplet* const tmp = d->applets[appletID];
00179             if (tmp)
00180                 tmp->resizeAppletWidget( width, height );
00181         }
00182     }
00183     else if (cmd.startsWith(QString::fromLatin1("audioclip_"))) {
00184         kdDebug(DEBUGAREA) << "process Audio command (not yet implemented): " << cmd  << " " << arg[0] << endl;
00185     }
00186     else if ( cmd == QString::fromLatin1( "JS_Event" )
00187               && arg.count() > 2 )
00188     {
00189         bool ok;
00190         const int appletID = arg.first().toInt(&ok);
00191         KJavaApplet * applet;
00192         if (ok && (applet = d->applets[appletID]))
00193         {
00194             QStringList js_args(arg);
00195             js_args.pop_front();
00196             applet->jsData(js_args);
00197         }
00198         else
00199             kdError(DEBUGAREA) << "parse JS event " << arg[0] << " " << arg[1] << endl;
00200     }
00201     else if ( cmd == QString::fromLatin1( "AppletStateNotification" ) )
00202     {
00203         bool ok;
00204         const int appletID = arg.first().toInt(&ok);
00205         if (ok)
00206         {
00207             KJavaApplet* const applet = d->applets[appletID];
00208             if ( applet )
00209             {
00210                 const int newState   = arg[1].toInt(&ok);
00211                 if (ok)
00212                 {
00213                     applet->stateChange(newState);
00214                     if (newState == KJavaApplet::INITIALIZED) {
00215                         kdDebug(DEBUGAREA) << "emit appletLoaded" << endl;
00216                         emit appletLoaded();
00217                     }
00218                 } else
00219                     kdError(DEBUGAREA) << "AppletStateNotification: status is not numerical" << endl;
00220             } else
00221                 kdWarning(DEBUGAREA) << "AppletStateNotification:  No such Applet with ID=" << arg[0] << endl;
00222         } else
00223             kdError(DEBUGAREA) << "AppletStateNotification: Applet ID is not numerical" << endl;
00224     }
00225     else if ( cmd == QString::fromLatin1( "AppletFailed" ) ) {
00226         bool ok;
00227         const int appletID = arg.first().toInt(&ok);
00228         if (ok)
00229         {
00230             KJavaApplet* const applet = d->applets[appletID];
00231             /*
00232             QString errorDetail(arg[1]);
00233             errorDetail.replace(QRegExp(":\\s*"), ":\n");
00234             KMessageBox::detailedError(0L, i18n("Java error while loading applet."), errorDetail);
00235             */
00236             if (applet)
00237                 applet->setFailed();
00238             emit appletLoaded();
00239         }
00240     }
00241 }
00242 
00243 void KJavaAppletContext::javaProcessExited(int) {
00244     AppletMap::iterator it = d->applets.begin();
00245     const AppletMap::iterator itEnd = d->applets.end();
00246     for (; it != itEnd; ++it)
00247         if (!(*it).isNull() && (*it)->isCreated() && !(*it)->failed()) {
00248             (*it)->setFailed();
00249             if ((*it)->state() < KJavaApplet::INITIALIZED)
00250                 emit appletLoaded();
00251         }
00252 }
00253 
00254 bool KJavaAppletContext::getMember(QStringList & args, QStringList & ret_args) {
00255     args.push_front( QString::number(id) );
00256     return server->getMember( args, ret_args );
00257 }
00258 
00259 bool KJavaAppletContext::putMember( QStringList & args ) {
00260     args.push_front( QString::number(id) );
00261     return server->putMember( args );
00262 }
00263 
00264 bool KJavaAppletContext::callMember(QStringList & args, QStringList &ret_args) {
00265     args.push_front( QString::number(id) );
00266     return server->callMember( args, ret_args );
00267 }
00268 
00269 void KJavaAppletContext::derefObject( QStringList & args ) {
00270     args.push_front( QString::number(id) );
00271     server->derefObject( args );
00272 }
00273 
00274 #include <kjavaappletcontext.moc>

KHTML

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

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal