khtml Library API Documentation

kjavaappletcontext.cpp

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., 59 Temple Place - Suite 330, 00019 * Boston, MA 02111-1307, 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 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.count() > 0 ) 00143 { 00144 QString tmp = arg[0]; 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.count() > 0 ) 00157 { 00158 kdDebug(6100) << "url = " << arg[0] << endl; 00159 emit showDocument( arg[0], "_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 int appletID = arg[0].toInt( &ok ); 00169 int width = arg[1].toInt( &ok ); 00170 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* 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 int appletID = arg[0].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 int appletID = arg[0].toInt(&ok); 00205 if (ok) 00206 { 00207 KJavaApplet * applet = d->applets[appletID]; 00208 if ( applet ) 00209 { 00210 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 int appletID = arg[0].toInt(&ok); 00228 if (ok) 00229 { 00230 KJavaApplet * 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 for (; it != d->applets.end(); it++) 00246 if (!(*it).isNull() && (*it)->isCreated() && !(*it)->failed()) { 00247 (*it)->setFailed(); 00248 if ((*it)->state() < KJavaApplet::INITIALIZED) 00249 emit appletLoaded(); 00250 } 00251 } 00252 00253 bool KJavaAppletContext::getMember(QStringList & args, QStringList & ret_args) { 00254 args.push_front( QString::number(id) ); 00255 return server->getMember( args, ret_args ); 00256 } 00257 00258 bool KJavaAppletContext::putMember( QStringList & args ) { 00259 args.push_front( QString::number(id) ); 00260 return server->putMember( args ); 00261 } 00262 00263 bool KJavaAppletContext::callMember(QStringList & args, QStringList &ret_args) { 00264 args.push_front( QString::number(id) ); 00265 return server->callMember( args, ret_args ); 00266 } 00267 00268 void KJavaAppletContext::derefObject( QStringList & args ) { 00269 args.push_front( QString::number(id) ); 00270 server->derefObject( args ); 00271 } 00272 00273 #include <kjavaappletcontext.moc>
KDE Logo
This file is part of the documentation for khtml Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Sep 29 09:42:28 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003