X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/716cd4107bb8a5f37dea34507453be6870aaef3a..edb89f7e356761b4fbdaebb8b5ebd5c7a7643da7:/contrib/src/applet/appletwindow.cpp?ds=sidebyside diff --git a/contrib/src/applet/appletwindow.cpp b/contrib/src/applet/appletwindow.cpp index 82c5f851ba..6c6d5895da 100644 --- a/contrib/src/applet/appletwindow.cpp +++ b/contrib/src/applet/appletwindow.cpp @@ -5,19 +5,23 @@ * Copyright (C) 1991-2001 SciTech Software, Inc. * All rights reserved. * -* ======================================================================== -* -* The contents of this file are subject to the wxWindows License -* Version 3.0 (the "License"); you may not use this file except in -* compliance with the License. You may obtain a copy of the License at -* http://www.wxwindows.org/licence3.txt -* -* Software distributed under the License is distributed on an -* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -* implied. See the License for the specific language governing -* rights and limitations under the License. -* -* ======================================================================== +* ====================================================================== +* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| +* | | +* |This copyrighted computer code is a proprietary trade secret of | +* |SciTech Software, Inc., located at 505 Wall Street, Chico, CA 95928 | +* |USA (www.scitechsoft.com). ANY UNAUTHORIZED POSSESSION, USE, | +* |VIEWING, COPYING, MODIFICATION OR DISSEMINATION OF THIS CODE IS | +* |STRICTLY PROHIBITED BY LAW. Unless you have current, express | +* |written authorization from SciTech to possess or use this code, you | +* |may be subject to civil and/or criminal penalties. | +* | | +* |If you received this code in error or you would like to report | +* |improper use, please immediately contact SciTech Software, Inc. at | +* |530-894-8400. | +* | | +* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| +* ====================================================================== * * Language: ANSI C++ * Environment: Any @@ -28,19 +32,27 @@ // For compilers that support precompilation #include "wx/wxprec.h" +#include "wx/utils.h" +#include "wx/process.h" +#include "wx/spawnbrowser.h" #include "wx/html/forcelnk.h" +// crt +#ifdef __WXMSW__ +#include // spawnl() +#endif + // Include private headers #include "wx/applet/applet.h" #include "wx/applet/window.h" #include "wx/applet/loadpage.h" +#include "wx/applet/plugin.h" // Preprocessor Stuff #include "wx/applet/prepinclude.h" #include "wx/applet/prepecho.h" #include "wx/applet/prepifelse.h" - /*---------------------------- Global variables ---------------------------*/ wxHashTable wxHtmlAppletWindow::m_Cookies; @@ -75,7 +87,8 @@ wxHtmlAppletWindow::wxHtmlAppletWindow( const wxPoint& pos, const wxSize& size, long style, - const wxString& name) + const wxString& name, + const wxString& docroot ) : wxHtmlWindow(parent,id,pos,size,style,name) { // Init our locks @@ -91,10 +104,18 @@ wxHtmlAppletWindow::wxHtmlAppletWindow( m_NavBar = NULL; } + // Set up docroot + m_DocRoot = docroot; + + // Set the key_type for applets + m_AppletList = wxAppletList(wxKEY_STRING); + // Add HTML preprocessors // deleting preprocessors is done by the code within the window incPreprocessor = new wxIncludePrep(); // #include preprocessor + incPreprocessor->ChangeDirectory(m_DocRoot); + wxEchoPrep * echoPreprocessor = new wxEchoPrep(); // #echo preprocessor wxIfElsePrep * ifPreprocessor = new wxIfElsePrep(); @@ -145,10 +166,51 @@ wxApplet *wxHtmlAppletWindow::CreateApplet( delete applet; return NULL; } - m_AppletList.Append(iName,applet); + else { + // do some fixups on the size if its screwed up + wxSize nsize = applet->GetBestSize(); + if (nsize.x < size.x) nsize.x = size.x; + if (nsize.y < size.y) nsize.y = size.y; + applet->SetSize(nsize); + } + + m_AppletList.Append(iName,(wxObject*)applet); return applet; } +/**************************************************************************** +PARAMETERS: +classId - Name of the Plugin class to create an object for + +RETURNS: +Pointer to the wxplugIn created, or NULL if unable to create the PlugIn. + +REMARKS: +This function is used to create new wxPlugIn objects dynamically based on the +class name as a string. This allows instances of wxPlugIn classes to be +created dynamically based on string values embedded in the custom tags of an +HTML page. +****************************************************************************/ +bool wxHtmlAppletWindow::CreatePlugIn( + const wxString& classId ) +{ + // Dynamically create the class instance at runtime + wxClassInfo *info = wxClassInfo::FindClass(classId.c_str()); + if (!info) + return false; + wxObject *obj = info->CreateObject(); + if (!obj) + return false; + wxPlugIn *plugIn = wxDynamicCast(obj,wxPlugIn); + if (!plugIn) + return false; + if (!plugIn->Create(this)) { + delete plugIn; + return false; + } + return true; +} + /**************************************************************************** PARAMETERS: appletName - Name of the applet class to find @@ -201,28 +263,41 @@ True if page loaded successfully, false if not REMARKS: Remove an applet from the manager. Called during applet destruction ****************************************************************************/ +#include "scitech" bool wxHtmlAppletWindow::LoadPage( const wxString& link) { - wxString href(link); + wxString href(link); + + // TODO: technically we allow no relative paths + + // Check to see if it is a real url, if not it is a file + if (link.Mid(0, 5).CmpNoCase("http:") != 0) { + + // Check for abs path. If it is not then tack on the path + // supplied at creation. + // TODO: Abs paths are only used in testing (remove this) + if (link.GetChar(1) != ':') + href = m_DocRoot + href; + } - // TODO: This needs to be made platform inde if possible. if (link.GetChar(0) == '?'){ wxString cmd = link.BeforeFirst('='); wxString cmdValue = link.AfterFirst('='); + // Launches the default Internet browser for the system. if(!(cmd.CmpNoCase("?EXTERNAL"))){ -#ifdef __WINDOWS__ - ShellExecute(this ? (HWND)this->GetHWND() : NULL,NULL,cmdValue.c_str(),NULL,"",SW_SHOWNORMAL); -#else - #error Platform not implemented yet! -#endif - return true; + return wxSpawnBrowser(this, cmdValue.c_str()); } + + // Launches an external program on the system. if (!(cmd.CmpNoCase("?EXECUTE"))){ - wxMessageBox(cmdValue); - return true; + int code = spawnl( P_NOWAIT, cmdValue , NULL ); + return (!code); } + + // Looks for a href in a variable stored as a cookie. The href can be + // changed on the fly. if (!(cmd.CmpNoCase("?VIRTUAL"))){ VirtualData& temp = *((VirtualData*)FindCookie(cmdValue)); if (&temp) { @@ -230,27 +305,32 @@ bool wxHtmlAppletWindow::LoadPage( } else { #ifdef CHECKED - wxMessageBox("VIRTUAL LINK ERROR: " + cmdValue + " does not exist."); + wxLogError(_T("VIRTUAL LINK ERROR: '%s' does not exist."), cmdValue.c_str()); #endif return true; } } - } - // Make a copy of the current path the translate for