// Author: Stefan Csomor, Francesco Montorsi
// Modified by:
// Created: 13/5/2007
-// RCS-ID: $Id: xti.cpp 48407 2007-08-26 23:17:23Z FM $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor, Francesco Montorsi
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// resources
// ----------------------------------------------------------------------------
-#if !defined(__WXMSW__) && !defined(__WXPM__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "../sample.xpm"
#endif
private:
// any class wishing to process wxWidgets events must use this macro
- wxDECLARE_EVENT_TABLE()
+ wxDECLARE_EVENT_TABLE();
};
// ----------------------------------------------------------------------------
EVT_MENU(Minimal_About, MyFrame::OnAbout)
END_EVENT_TABLE()
-wxIMPLEMENT_APP(MyApp)
+wxIMPLEMENT_APP(MyApp);
// ============================================================================
// implementation
RegisterFrameRTTI();
// create the main application window
- MyFrame *frame = new MyFrame(_T("Extended RTTI sample"));
+ MyFrame *frame = new MyFrame(wxT("Extended RTTI sample"));
// and show it (the frames, unlike simple controls, are not shown when
// created initially)
// the "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
- helpMenu->Append(Minimal_About, _T("&About...\tF1"), _T("Show about dialog"));
-
- fileMenu->Append(Minimal_Persist, _T("Persist a wxFrame to XML..."),
- _T("Creates a wxFrame using wxXTI and saves its description as XML"));
- fileMenu->Append(Minimal_Depersist, _T("Depersist XML file..."),
- _T("Loads the description of wxFrame from XML"));
- fileMenu->Append(Minimal_GenerateCode, _T("Generate code for a wxFrame saved to XML..."),
- _T("Generates the C++ code which belong to a persisted wxFrame"));
+ helpMenu->Append(Minimal_About, wxT("&About\tF1"), wxT("Show about dialog"));
+
+ fileMenu->Append(Minimal_Persist, wxT("Persist a wxFrame to XML..."),
+ wxT("Creates a wxFrame using wxXTI and saves its description as XML"));
+ fileMenu->Append(Minimal_Depersist, wxT("Depersist XML file..."),
+ wxT("Loads the description of wxFrame from XML"));
+ fileMenu->Append(Minimal_GenerateCode, wxT("Generate code for a wxFrame saved to XML..."),
+ wxT("Generates the C++ code which belong to a persisted wxFrame"));
fileMenu->AppendSeparator();
- fileMenu->Append(Minimal_DumpClasses, _T("Dump registered classes..."),
- _T("Dumps the description of all wxWidgets classes registered in XTI"));
+ fileMenu->Append(Minimal_DumpClasses, wxT("Dump registered classes..."),
+ wxT("Dumps the description of all wxWidgets classes registered in XTI"));
fileMenu->AppendSeparator();
- fileMenu->Append(Minimal_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
+ fileMenu->Append(Minimal_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar();
- menuBar->Append(fileMenu, _T("&File"));
- menuBar->Append(helpMenu, _T("&Help"));
+ menuBar->Append(fileMenu, wxT("&File"));
+ menuBar->Append(helpMenu, wxT("&Help"));
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
#if wxUSE_STATUSBAR
// create a status bar just for fun (by default with 1 pane only)
CreateStatusBar(2);
- SetStatusText(_T("Welcome to wxWidgets!"));
+ SetStatusText(wxT("Welcome to wxWidgets!"));
#endif // wxUSE_STATUSBAR
}
// the following class "persists" (i.e. saves) a wxFrame into a wxObjectWriter
-class MyDesignerPersister : public wxObjectReaderCallback
+class MyDesignerPersister : public wxObjectWriterCallback
{
public:
MyDesignerPersister( wxDynamicObject * frame)
const wxObject *&eventSink,
const wxHandlerInfo* &handlerInfo )
{
- // this approach would be used it the handler would not
+ // this approach would be used if the handler would not
// be connected really in the designer, so we have to supply
// the information
- if ( object == m_frame->GetProperty(wxT("Button")).GetAsObject() &&
- propInfo == wxCLASSINFO( wxButton )->FindPropertyInfo("OnClick") )
+ const wxObject* but = wxAnyGetAsObjectPtr( m_frame->GetProperty(wxT("Button")) );
+ if ( object == but &&
+ propInfo == wxCLASSINFO( wxButton )->FindPropertyInfo(wxT("OnClick")) )
{
eventSink = m_frame;
handlerInfo = m_frame->GetClassInfo()->
- FindHandlerInfo("ButtonClickHandler");
+ FindHandlerInfo(wxT("ButtonClickHandler"));
return true;
}
return false;
CLASSINFO(wxFrame) );
// this class has a property named "Button" and the relative handler:
- dyninfo->AddProperty("Button", wxGetTypeInfo((wxButton**) NULL));
- dyninfo->AddHandler("ButtonClickHandler",
+ dyninfo->AddProperty(wxT("Button"), wxGetTypeInfo((wxButton**) NULL));
+ dyninfo->AddHandler(wxT("ButtonClickHandler"),
NULL /* no instance of the handler method */, CLASSINFO( wxEvent ) );
}
}
wxDynamicObject* CreateFrameRTTI()
{
int baseID = 100;
- wxVariantBase Params[10];
+ wxAny Params[10];
// the class is now part of XTI internal table so that we can
// get a pointer to it just searching it like any other class:
wxASSERT( info );
wxDynamicObject* frameWrapper =
wx_dynamic_cast(wxDynamicObject*, info->CreateObject() );
- Params[0] = wxVariantBase((wxWindow*)(NULL));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("This is a frame created from XTI")));
- Params[3] = wxVariantBase(wxPoint(-1,-1));
- Params[4] = wxVariantBase(wxSize(400,300));
- Params[5] = wxVariantBase((long)wxDEFAULT_FRAME_STYLE);
+ Params[0] = wxAny((wxWindow*)(NULL));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("This is a frame created from XTI")));
+ Params[3] = wxAny(wxPoint(-1,-1));
+ Params[4] = wxAny(wxSize(400,300));
+ Params[5] = wxAny((long)wxDEFAULT_FRAME_STYLE);
wxASSERT( info->Create(frameWrapper, 6, Params ));
frame = wx_dynamic_cast(wxFrame*, frameWrapper->GetSuperClassInstance());
+#if 1
// now build a notebook inside it:
wxNotebook* notebook;
info = wxClassInfo::FindClass("wxNotebook");
wxASSERT( info );
notebook = wxDynamicCast( info->CreateObject(), wxNotebook );
- Params[0] = wxVariantBase((wxWindow*)frame);
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxPoint( 10, 10 ));
- Params[3] = wxVariantBase(wxDefaultSize);
- Params[4] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)frame);
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxPoint( 10, 10 ));
+ Params[3] = wxAny(wxDefaultSize);
+ Params[4] = wxAny((long)0);
wxASSERT( info->Create(notebook, 5, Params ));
// button page
info = wxClassInfo::FindClass("wxPanel");
wxASSERT( info );
panel = wxDynamicCast( info->CreateObject(), wxPanel );
- Params[0] = wxVariantBase((wxWindow*)(notebook));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxPoint(-1,-1));
- Params[3] = wxVariantBase(wxSize(-1,-1));
- Params[4] = wxVariantBase((long)0);
- Params[5] = wxVariantBase(wxString(wxT("Hello")));
+ Params[0] = wxAny((wxWindow*)(notebook));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxPoint(-1,-1));
+ Params[3] = wxAny(wxSize(-1,-1));
+ Params[4] = wxAny((long)0);
+ Params[5] = wxAny(wxString(wxT("Hello")));
wxASSERT( info->Create(panel, 6, Params ));
notebook->AddPage( panel, "Buttons" );
info = wxClassInfo::FindClass("wxButton");
wxASSERT( info );
button = wxDynamicCast( info->CreateObject(), wxButton );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("Click Me!")));
- Params[3] = wxVariantBase(wxPoint( 10, 10 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("Click Me!")));
+ Params[3] = wxAny(wxPoint( 10, 10 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(button, 6, Params ));
- frameWrapper->SetProperty( "Button", wxVariantBase( button ) );
+ frameWrapper->SetProperty( wxT("Button"), wxAny( button ) );
// other controls page
info = wxClassInfo::FindClass("wxPanel");
wxASSERT( info );
panel = wxDynamicCast( info->CreateObject(), wxPanel );
- Params[0] = wxVariantBase((wxWindow*)(notebook));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxPoint(-1,-1));
- Params[3] = wxVariantBase(wxSize(-1,-1));
- Params[4] = wxVariantBase((long)0);
- Params[5] = wxVariantBase(wxString(wxT("Hello")));
+ Params[0] = wxAny((wxWindow*)(notebook));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxPoint(-1,-1));
+ Params[3] = wxAny(wxSize(-1,-1));
+ Params[4] = wxAny((long)0);
+ Params[5] = wxAny(wxString(wxT("Hello")));
wxASSERT( info->Create(panel, 6, Params ));
notebook->AddPage( panel, "Other Standard controls" );
info = wxClassInfo::FindClass("wxCheckBox");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("A Checkbox")));
- Params[3] = wxVariantBase(wxPoint( 10, 10 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("A Checkbox")));
+ Params[3] = wxAny(wxPoint( 10, 10 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(control, 6, Params ));
info = wxClassInfo::FindClass("wxRadioButton");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("A Radiobutton")));
- Params[3] = wxVariantBase(wxPoint( 10, 30 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("A Radiobutton")));
+ Params[3] = wxAny(wxPoint( 10, 30 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(control, 6, Params ));
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("Another One")));
- Params[3] = wxVariantBase(wxPoint( 10, 50 ));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("Another One")));
+ Params[3] = wxAny(wxPoint( 10, 50 ));
wxASSERT( info->Create(control, 6, Params ));
info = wxClassInfo::FindClass("wxStaticText");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("A Static Text!")));
- Params[3] = wxVariantBase(wxPoint( 10, 70 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("A Static Text!")));
+ Params[3] = wxAny(wxPoint( 10, 70 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(control, 6, Params ));
info = wxClassInfo::FindClass("wxStaticBox");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("A Static Box")));
- Params[3] = wxVariantBase(wxPoint( 10, 90 ));
- Params[4] = wxVariantBase(wxSize(100,80));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("A Static Box")));
+ Params[3] = wxAny(wxPoint( 10, 90 ));
+ Params[4] = wxAny(wxSize(100,80));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(control, 6, Params ));
info = wxClassInfo::FindClass("wxTextCtrl");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString(wxT("A Text Control")));
- Params[3] = wxVariantBase(wxPoint( 10, 200 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long)0);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString(wxT("A Text Control")));
+ Params[3] = wxAny(wxPoint( 10, 200 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long)0);
wxASSERT( info->Create(control, 6, Params ));
// spins and gauges page
info = wxClassInfo::FindClass("wxPanel");
wxASSERT( info );
panel = wxDynamicCast( info->CreateObject(), wxPanel );
- Params[0] = wxVariantBase((wxWindow*)(notebook));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxPoint(-1,-1));
- Params[3] = wxVariantBase(wxSize(-1,-1));
- Params[4] = wxVariantBase((long)0);
- Params[5] = wxVariantBase(wxString(wxT("Hello")));
+ Params[0] = wxAny((wxWindow*)(notebook));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxPoint(-1,-1));
+ Params[3] = wxAny(wxSize(-1,-1));
+ Params[4] = wxAny((long)0);
+ Params[5] = wxAny(wxString(wxT("Hello")));
wxASSERT( info->Create(panel, 6, Params ));
notebook->AddPage( panel, "Spins and Sliders" );
info = wxClassInfo::FindClass("wxSpinButton");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxPoint( 10, 10 ));
- Params[3] = wxVariantBase(wxSize(-1,-1));
- Params[4] = wxVariantBase((long)wxSP_VERTICAL | wxSP_ARROW_KEYS);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxPoint( 10, 10 ));
+ Params[3] = wxAny(wxSize(-1,-1));
+ Params[4] = wxAny((long)wxSP_VERTICAL | wxSP_ARROW_KEYS);
wxASSERT( info->Create(control, 5, Params ));
wxENSURE_CLASS_IS_LINKED(wxSpinCtrl);
info = wxClassInfo::FindClass("wxSpinCtrl");
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase(wxString("20"));
- Params[3] = wxVariantBase(wxPoint( 40, 10 ));
- Params[4] = wxVariantBase(wxSize(40,-1));
- Params[5] = wxVariantBase((long) wxSP_ARROW_KEYS);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny(wxString("20"));
+ Params[3] = wxAny(wxPoint( 40, 10 ));
+ Params[4] = wxAny(wxSize(40,-1));
+ Params[5] = wxAny((long) wxSP_ARROW_KEYS);
wxASSERT( info->Create(control, 6, Params ));
// MSVC likes to exclude from link wxGauge...
wxENSURE_CLASS_IS_LINKED(wxCheckBox)
wxENSURE_CLASS_IS_LINKED(wxSpinCtrl)
-#ifdef __WXMSW__
- // under wxMSW wxGauge is simply #defined to wxGauge95
- info = wxClassInfo::FindClass("wxGauge95");
-#else
info = wxClassInfo::FindClass("wxGauge");
-#endif
+
wxASSERT( info );
control = wxDynamicCast( info->CreateObject(), wxControl );
- Params[0] = wxVariantBase((wxWindow*)(panel));
- Params[1] = wxVariantBase(wxWindowID(baseID++));
- Params[2] = wxVariantBase((int) 100);
- Params[3] = wxVariantBase(wxPoint( 10, 50 ));
- Params[4] = wxVariantBase(wxSize(-1,-1));
- Params[5] = wxVariantBase((long) wxGA_HORIZONTAL);
+ Params[0] = wxAny((wxWindow*)(panel));
+ Params[1] = wxAny(wxWindowID(baseID++));
+ Params[2] = wxAny((int) 100);
+ Params[3] = wxAny(wxPoint( 10, 50 ));
+ Params[4] = wxAny(wxSize(-1,-1));
+ Params[5] = wxAny((long) wxGA_HORIZONTAL);
wxASSERT( info->Create(control, 6, Params ));
wx_dynamic_cast(wxGauge*, control)->SetValue(20);
+#endif
return frameWrapper;
}
MyDesignerPersister persister(frame);
// write the given wxObject into the XML document
- wxVariantBaseArray empty;
+ wxStringToAnyHashMap empty;
writer.WriteObject( frame, frame->GetClassInfo(), &persister,
wxString("myTestFrame"), empty );
return false;
// read the XML file using the wxObjectCodeReaderCallback
- wxObjectCodeReaderCallback Callbacks(&tos);
+
+ wxString headerincludes;
+ wxString sourcecode;
+ wxObjectCodeReaderCallback Callbacks(headerincludes,sourcecode);
wxObjectXmlReader Reader(root);
// ReadObject will return the ID of the object read??
Reader.ReadObject( wxString("myTestFrame"), &Callbacks );
+ // header preamble
+ tos <<
+ "#include \"wx/wxprec.h\" \n#ifdef __BORLANDC__\n#pragma hdrstop\n#endif\n#ifndef WX_PRECOMP\n#include \"wx/wx.h\" \n#endif\n\n";
+ // add object includes
+ tos.WriteString( headerincludes );
+
+ tos << "\n\nvoid test()\n{";
+ tos.WriteString( sourcecode );
+ tos << "}";
return true;
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(wxString::Format(
- _T("Welcome to %s!\n")
- _T("\n")
- _T("This sample demonstrates wxWidgets eXtended RTTI (XTI) system."),
+ wxT("Welcome to %s!\n")
+ wxT("\n")
+ wxT("This sample demonstrates wxWidgets eXtended RTTI (XTI) system."),
wxVERSION_STRING
),
- _T("About wxWidgets XTI sample"),
+ wxT("About wxWidgets XTI sample"),
wxOK | wxICON_INFORMATION,
this);
}