+++ /dev/null
-/*
- wxActiveX Library Licence, Version 3
- ====================================
-
- Copyright (C) 2003 Lindsay Mathieson [, ...]
-
- Everyone is permitted to copy and distribute verbatim copies
- of this licence document, but changing it is not allowed.
-
- wxActiveX LIBRARY LICENCE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public Licence as published by
- the Free Software Foundation; either version 2 of the Licence, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
- General Public Licence for more details.
-
- You should have received a copy of the GNU Library General Public Licence
- along with this software, usually in a file named COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA.
-
- EXCEPTION NOTICE
-
- 1. As a special exception, the copyright holders of this library give
- permission for additional uses of the text contained in this release of
- the library as licenced under the wxActiveX Library Licence, applying
- either version 3 of the Licence, or (at your option) any later version of
- the Licence as published by the copyright holders of version 3 of the
- Licence document.
-
- 2. The exception is that you may use, copy, link, modify and distribute
- under the user's own terms, binary object code versions of works based
- on the Library.
-
- 3. If you copy code from files distributed under the terms of the GNU
- General Public Licence or the GNU Library General Public Licence into a
- copy of this library, as this licence permits, the exception does not
- apply to the code that you add in this way. To avoid misleading anyone as
- to the status of such modified files, you must delete this exception
- notice from such code and/or adjust the licensing conditions notice
- accordingly.
-
- 4. If you write modifications of your own for this library, it is your
- choice whether to permit this exception to apply to your modifications.
- If you do not wish that, you must delete the exception notice from such
- code and/or adjust the licensing conditions notice accordingly.
-*/
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-// For compilers that support precompilation, includes "wx/wx.h".
-#if defined(__WXGTK__) || defined(__WXMOTIF__)
- #include "wx/wx.h"
-#endif
-#include "wx/wxprec.h"
-#include "wx/filedlg.h"
-#include "wx/textdlg.h"
-#include "wxActiveXFrame.h"
-#include <sstream>
-using namespace std;
-#include "wx/splitter.h"
-#include "wx/textctrl.h"
-#include "wx/clipbrd.h"
-#include <wx/msgdlg.h>
-
-enum
-{
- // menu items
- MENU_GETTYPEINFO = 700,
- MENU_INVOKEMETHOD,
- MENU_TEST
-};
-
-BEGIN_EVENT_TABLE(wxActiveXFrame, wxFrame)
- EVT_MENU(MENU_GETTYPEINFO, wxActiveXFrame::OnGetTypeInfo)
- EVT_MENU(MENU_INVOKEMETHOD, wxActiveXFrame::OnInvokeMethod)
- EVT_MENU(MENU_TEST, wxActiveXFrame::OnTest)
-END_EVENT_TABLE()
-
-
-wxActiveXFrame::wxActiveXFrame(wxWindow *parent, wxString title) :
- wxFrame(parent, -1, title)
-{
- // create a menu bar
- wxMenu *xMenu = new wxMenu("", wxMENU_TEAROFF);
-
- xMenu->Append(MENU_GETTYPEINFO, "Get Type Info", "");
- xMenu->Append(MENU_INVOKEMETHOD, "Invoke Method (no params)", "");
- xMenu->Append(MENU_TEST, "Test", "For debugging purposes");
-
- // now append the freshly created menu to the menu bar...
- wxMenuBar *menuBar = new wxMenuBar();
- menuBar->Append(xMenu, "&ActiveX");
-
- // ... and attach this menu bar to the frame
- SetMenuBar(menuBar);
-
- wxSplitterWindow *sp = new wxSplitterWindow(this);
- X = new wxActiveX(sp, title, 101);
-
- textLog = new wxTextCtrl(sp, -1, "", wxPoint(0,0), wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY);
-
- sp->SplitHorizontally(X, textLog, 0);
-
- // conenct all events
- for (int i = 0; i < X->GetEventCount(); i++)
- {
- const wxActiveX::FuncX& func = X->GetEventDesc(i);
- const wxEventType& ev = RegisterActiveXEvent((DISPID) func.memid);
- Connect(101, ev, (wxObjectEventFunction) OnActiveXEvent);
- };
-}
-
-wxString VarTypeAsString(VARTYPE vt)
-{
-#define VT(vtype, desc) case vtype : return desc
-
- if (vt & VT_BYREF)
- vt -= VT_BYREF;
-
- if (vt & VT_ARRAY)
- vt -= VT_ARRAY;
-
- switch (vt)
- {
- VT(VT_SAFEARRAY, "SafeArray");
- VT(VT_EMPTY, "empty");
- VT(VT_NULL, "null");
- VT(VT_UI1, "byte");
- VT(VT_I1, "char");
- VT(VT_I2, "short");
- VT(VT_I4, "long");
- VT(VT_UI2, "unsigned short");
- VT(VT_UI4, "unsigned long");
- VT(VT_INT, "int");
- VT(VT_UINT, "unsigned int");
- VT(VT_R4, "real(4)");
- VT(VT_R8, "real(8)");
- VT(VT_CY, "Currency");
- VT(VT_DATE, "wxDate");
- VT(VT_BSTR, "wxString");
- VT(VT_DISPATCH, "IDispatch");
- VT(VT_ERROR, "SCode Error");
- VT(VT_BOOL, "bool");
- VT(VT_VARIANT, "wxVariant");
- VT(VT_UNKNOWN, "IUknown");
- VT(VT_VOID, "void");
- VT(VT_PTR, "void *");
- VT(VT_USERDEFINED, "*user defined*");
-
- default:
- {
- wxString s;
- s << "Unknown(" << vt << ")";
- return s;
- };
- };
-
-#undef VT
-};
-
-#define ENDL "\r\n"
-
-
-void OutFunc(wxString& os, const wxActiveX::FuncX& func)
-{
- os << VarTypeAsString(func.retType.vt) << " " << func.name << "(";
- for (unsigned int p = 0; p < func.params.size(); p++)
- {
- const wxActiveX::ParamX& param = func.params[p];
- if (param.IsIn() && param.IsOut())
- os << "[IN OUT] ";
- else if (param.IsIn())
- os << "[IN] ";
- else if (param.IsIn())
- os << "[OUT] ";
- os << VarTypeAsString(param.vt) << " " << (param.isPtr ? "*" : "") << param.name;
- if (p < func.params.size() - 1)
- os << ", ";
- };
- os << ")" << ENDL;
-};
-
-void wxActiveXFrame::OnGetTypeInfo(wxCommandEvent& event)
-{
- wxString os;
-
- int i =0;
- os <<
- "Props" << ENDL <<
- "=====" << ENDL;
- for (i = 0; i < X->GetPropCount(); i++)
- {
- wxActiveX::PropX prop = X->GetPropDesc(i);
- os << VarTypeAsString(prop.type.vt) << " " << prop.name << "(";
- if (prop.CanSet())
- {
- os << VarTypeAsString(prop.arg.vt);
- };
- os << ")" << ENDL;
-
- };
- os << ENDL;
-
- os <<
- "Events" << ENDL <<
- "======" << ENDL;
- for (i = 0; i < X->GetEventCount(); i++)
- OutFunc(os, X->GetEventDesc(i));
- os << ENDL;
-
- os <<
- "Methods" << ENDL <<
- "=======" << ENDL;
- for (i = 0; i < X->GetMethodCount(); i++)
- OutFunc(os, X->GetMethodDesc(i));
- os << ENDL;
-
-
- if (wxTheClipboard->Open())
- {
- wxDataObjectSimple *wo = new wxTextDataObject(os);
- wxTheClipboard->SetData(wo);
- wxTheClipboard->Flush();
- wxTheClipboard->Close();
- };
-
- wxMessageBox(os, "Type Info", wxOK, this);
-};
-
-void wxActiveXFrame::OnInvokeMethod(wxCommandEvent& event)
-{
- //wxTextEntryDialog dlg(this, "Method");
- //if (dlg.ShowModal() == wxID_OK)
- // X->CallMethod(dlg.GetValue());
-};
-
-void wxActiveXFrame::OnTest(wxCommandEvent& event)
-{
- // flash testing
- wxVariant args[] = {0L, "http://www.macromedia.com/support/flash/ts/documents/java_script_comm/flash_to_javascript.swf"};
- X->CallMethod("LoadMovie", args);
- //X->Prop("Movie") = "http://www.macromedia.com/support/flash/ts/documents/java_script_comm/flash_to_javascript.swf";
-
- // mc cal testing
- //X->Prop("year") = 1964L;
- //X->Prop("Value") = wxDateTime::Now();
-
- // pdf testing
- //wxVariant file = "C:\\WINNT\\wx2\\docs\\pdf\\dialoged.pdf";
- //X->CallMethod("LoadFile", &file);
-};
-
-void wxActiveXFrame::OnActiveXEvent(wxActiveXEvent& event)
-{
-#ifdef UNICODE
- wostringstream os;
-#else
- ostringstream os;
-#endif
-
- os << (const wxChar *) event.EventName() << wxT("(");
-
- for (int p = 0; p < event.ParamCount(); p++)
- {
- os <<
- (const wxChar *) event.ParamType(p) << wxT(" ") <<
- (const wxChar *) event.ParamName(p) << wxT(" = ") <<
- (const wxChar *) (wxString) event[p];
- if (p < event.ParamCount() - 1)
- os << wxT(", ");
- };
- os << wxT(")") << endl;
- wxString data = os.str().c_str();
- textLog->AppendText(data);
-};
-