packages feed

wxcore-0.10.4: wxc/src/eljrc.cpp

#include "wrapper.h"
#include <wx/xrc/xmlres.h>

#ifdef wxUSE_STC
# include "wx/stc/stc.h"
#endif

class wxMDIParentFrameXmlHandler : public wxXmlResourceHandler
{
public:
    wxMDIParentFrameXmlHandler();
    virtual wxObject *DoCreateResource();
    virtual bool CanHandle(wxXmlNode *node);
};

class wxMDIChildFrameXmlHandler : public wxXmlResourceHandler
{
public:
    wxMDIChildFrameXmlHandler();
    virtual wxObject *DoCreateResource();
    virtual bool CanHandle(wxXmlNode *node);
};

class wxSplitterWindowXmlHandler : public wxXmlResourceHandler
{
public:
    wxSplitterWindowXmlHandler();
    virtual wxObject *DoCreateResource();
    virtual bool CanHandle(wxXmlNode *node);
};

#ifdef wxUSE_STC
class wxStyledTextCtrlXmlHandler : public wxXmlResourceHandler
{
public:
    wxStyledTextCtrlXmlHandler();
    virtual wxObject *DoCreateResource();
    virtual bool CanHandle(wxXmlNode *node);
};
#endif

class wxGridXmlHandler : public wxXmlResourceHandler
{
public:
    wxGridXmlHandler();
    virtual wxObject *DoCreateResource();
    virtual bool CanHandle(wxXmlNode *node);
};

wxMDIParentFrameXmlHandler::wxMDIParentFrameXmlHandler() : wxXmlResourceHandler()
{
    XRC_ADD_STYLE(wxSTAY_ON_TOP);
    XRC_ADD_STYLE(wxCAPTION);
    XRC_ADD_STYLE(wxDEFAULT_DIALOG_STYLE);
    XRC_ADD_STYLE(wxDEFAULT_FRAME_STYLE);
    XRC_ADD_STYLE(wxSYSTEM_MENU);
    XRC_ADD_STYLE(wxRESIZE_BORDER);

    XRC_ADD_STYLE(wxFRAME_TOOL_WINDOW);
    XRC_ADD_STYLE(wxFRAME_FLOAT_ON_PARENT);
    XRC_ADD_STYLE(wxMAXIMIZE_BOX);
    XRC_ADD_STYLE(wxMINIMIZE_BOX);
    XRC_ADD_STYLE(wxSTAY_ON_TOP);

    XRC_ADD_STYLE(wxTAB_TRAVERSAL);
    XRC_ADD_STYLE(wxWS_EX_VALIDATE_RECURSIVELY);
    XRC_ADD_STYLE(wxCLIP_CHILDREN);

    AddWindowStyles();
}

wxObject *wxMDIParentFrameXmlHandler::DoCreateResource()
{
    XRC_MAKE_INSTANCE(frame, wxMDIParentFrame);

    frame->Create(m_parentAsWindow,
                  GetID(),
                  GetText(wxT("title")),
                  wxDefaultPosition, wxDefaultSize,
                  GetStyle(wxT("style"), wxDEFAULT_FRAME_STYLE),
                  GetName());

    if (HasParam(wxT("size")))
        frame->SetClientSize(GetSize());
    if (HasParam(wxT("pos")))
        frame->Move(GetPosition());

    SetupWindow(frame);

    CreateChildren(frame);

    if (GetBool(wxT("centered"), FALSE))
        frame->Centre();

    return frame;
}

bool wxMDIParentFrameXmlHandler::CanHandle(wxXmlNode *node)
{
    return IsOfClass(node, wxT("wxMDIParentFrame"));
}

wxMDIChildFrameXmlHandler::wxMDIChildFrameXmlHandler() : wxXmlResourceHandler()
{
    XRC_ADD_STYLE(wxSTAY_ON_TOP);
    XRC_ADD_STYLE(wxCAPTION);
    XRC_ADD_STYLE(wxDEFAULT_DIALOG_STYLE);
    XRC_ADD_STYLE(wxDEFAULT_FRAME_STYLE);
    XRC_ADD_STYLE(wxSYSTEM_MENU);
    XRC_ADD_STYLE(wxRESIZE_BORDER);

    XRC_ADD_STYLE(wxFRAME_TOOL_WINDOW);
    XRC_ADD_STYLE(wxFRAME_FLOAT_ON_PARENT);
    XRC_ADD_STYLE(wxMAXIMIZE_BOX);
    XRC_ADD_STYLE(wxMINIMIZE_BOX);
    XRC_ADD_STYLE(wxSTAY_ON_TOP);

    XRC_ADD_STYLE(wxTAB_TRAVERSAL);
    XRC_ADD_STYLE(wxWS_EX_VALIDATE_RECURSIVELY);
    XRC_ADD_STYLE(wxCLIP_CHILDREN);

    AddWindowStyles();
}

wxObject *wxMDIChildFrameXmlHandler::DoCreateResource()
{
    XRC_MAKE_INSTANCE(frame, wxMDIChildFrame);
	
	wxMDIParentFrame* prt = wxDynamicCast (m_parentAsWindow, wxMDIParentFrame);

	if (prt == NULL)
	{
		wxLogError(wxT("Error in resource: wxMDIChildFrame has no wxMDIParentFrame."));
		return NULL;
	}

    frame->Create(prt,
                  GetID(),
                  GetText(wxT("title")),
                  wxDefaultPosition, wxDefaultSize,
                  GetStyle(wxT("style"), wxDEFAULT_FRAME_STYLE),
                  GetName());

    SetupWindow(frame);

    CreateChildren(frame);

    if (GetBool(wxT("centered"), FALSE))
        frame->Centre();

    return frame;
}

bool wxMDIChildFrameXmlHandler::CanHandle(wxXmlNode *node)
{
    return IsOfClass(node, wxT("wxMDIChildFrame"));
}

wxSplitterWindowXmlHandler::wxSplitterWindowXmlHandler() : wxXmlResourceHandler()
{
    XRC_ADD_STYLE(wxSP_3D);
    XRC_ADD_STYLE(wxSP_3DSASH);
    XRC_ADD_STYLE(wxSP_BORDER);
    XRC_ADD_STYLE(wxSP_NOBORDER);
    XRC_ADD_STYLE(wxSP_PERMIT_UNSPLIT);
    XRC_ADD_STYLE(wxSP_LIVE_UPDATE);

    XRC_ADD_STYLE(wxTAB_TRAVERSAL);
    XRC_ADD_STYLE(wxCLIP_CHILDREN);

    AddWindowStyles();
}

wxObject *wxSplitterWindowXmlHandler::DoCreateResource()
{
    XRC_MAKE_INSTANCE(frame, wxSplitterWindow);

    frame->Create(m_parentAsWindow,
                  GetID(),
                  wxDefaultPosition, wxDefaultSize,
                  GetStyle(wxT("style"), wxSP_3D),
                  GetName());

    SetupWindow(frame);

    CreateChildren(frame);
	
	if (frame->GetChildren().GetCount() != 2)
	{
		wxLogError(wxT("Error in resource: Splitter window needs exactly two children."));
		return NULL;
	}
	
	frame->SetSplitMode(GetLong (wxT("splitmode"), wxSPLIT_VERTICAL));
	long sashpos = GetLong (wxT("sashposition"), 100);
	
	wxWindowList::Node* node = frame->GetChildren().GetFirst();
	wxWindow* wnd1 = node->GetData();
	wxWindow* wnd2 = node->GetNext()->GetData();

	if (frame->GetSplitMode() == wxSPLIT_VERTICAL)
		frame->SplitVertically (wnd1, wnd2, sashpos);
	else
		frame->SplitHorizontally (wnd1, wnd2, sashpos);
	
    return frame;
}

bool wxSplitterWindowXmlHandler::CanHandle(wxXmlNode *node)
{
    return IsOfClass(node, wxT("wxSplitterWindow"));
}

#ifdef wxUSE_STC
wxStyledTextCtrlXmlHandler::wxStyledTextCtrlXmlHandler() : wxXmlResourceHandler()
{
    AddWindowStyles();
}

wxObject *wxStyledTextCtrlXmlHandler::DoCreateResource()
{
    XRC_MAKE_INSTANCE(frame, wxStyledTextCtrl);
	
    frame->Create(m_parentAsWindow,
                  GetID(),
                  wxDefaultPosition, wxDefaultSize,
                  GetStyle(wxT("style"), 0),
                  GetName());

    if (HasParam(wxT("size")))
        frame->SetSize(GetSize());
    if (HasParam(wxT("pos")))
        frame->Move(GetPosition());

    SetupWindow(frame);

    return frame;
}

bool wxStyledTextCtrlXmlHandler::CanHandle(wxXmlNode *node)
{
    return IsOfClass(node, wxT("wxStyledTextCtrl"));
}
#endif

wxGridXmlHandler::wxGridXmlHandler() : wxXmlResourceHandler()
{
    XRC_ADD_STYLE(wxTAB_TRAVERSAL);
    XRC_ADD_STYLE(wxCLIP_CHILDREN);

    AddWindowStyles();
}

wxObject *wxGridXmlHandler::DoCreateResource()
{
	wxGrid* grid = new wxGrid(m_parentAsWindow,
                              GetID(),
                              wxDefaultPosition, wxDefaultSize,
                              GetStyle(wxT("style"), wxWANTS_CHARS),
                              GetName());

	long cols = GetLong (wxT("numcols"), 0);
	long rows = GetLong (wxT("numrows"), 0);
	
	if (cols && rows)
		grid->CreateGrid(cols, rows, (wxGrid::wxGridSelectionModes)GetLong (wxT("selmode"), 0));
	
    if (HasParam(wxT("size")))
        grid->SetSize(GetSize());
    if (HasParam(wxT("pos")))
        grid->Move(GetPosition());

	SetupWindow(grid);

	return grid;
}

bool wxGridXmlHandler::CanHandle(wxXmlNode *node)
{
    return IsOfClass(node, wxT("wxGrid"));
}

extern "C"
{

EWXWEXPORT(wxXmlResource*,wxXmlResource_Create)(int flags)
{
	return new wxXmlResource(flags);
}
	
EWXWEXPORT(wxXmlResource*,wxXmlResource_CreateFromFile)(wxString* filemask, int flags)
{
	return new wxXmlResource(*filemask, flags);
}
	
EWXWEXPORT(void,wxXmlResource_Delete)(wxXmlResource* self)
{
	delete self;
}
	
EWXWEXPORT(bool,wxXmlResource_Load)(wxXmlResource* self, wxString* filemask)
{
	wxGetApp().InitZipFileSystem();
	return self->Load(*filemask);
}
	
EWXWEXPORT(void,wxXmlResource_InitAllHandlers)(wxXmlResource* self)
{
	self->InitAllHandlers();
	self->AddHandler(new wxMDIParentFrameXmlHandler());
	self->AddHandler(new wxMDIChildFrameXmlHandler());
	self->AddHandler(new wxSplitterWindowXmlHandler());
#ifdef wxUSE_STC
	self->AddHandler(new wxStyledTextCtrlXmlHandler());
#endif
	self->AddHandler(new wxGridXmlHandler());
}
	
EWXWEXPORT(void,wxXmlResource_AddHandler)(wxXmlResource* self, wxXmlResourceHandler* handler)
{
	self->AddHandler(handler);
}
	
EWXWEXPORT(void,wxXmlResource_InsertHandler)(wxXmlResource* self, wxXmlResourceHandler* handler)
{
	self->InsertHandler(handler);
}
	
EWXWEXPORT(void,wxXmlResource_ClearHandlers)(wxXmlResource* self)
{
	self->ClearHandlers();
}
	
EWXWEXPORT(void,wxXmlResource_AddSubclassFactory)(wxXmlResource* self, wxXmlSubclassFactory* factory)
{
	self->AddSubclassFactory(factory);
}
	
EWXWEXPORT(wxMenu*,wxXmlResource_LoadMenu)(wxXmlResource* self, wxString* name)
{
	return self->LoadMenu(*name);
}
	
EWXWEXPORT(wxMenuBar*,wxXmlResource_LoadMenuBar)(wxXmlResource* self, wxWindow* parent, wxString* name)
{
	return self->LoadMenuBar(parent, *name);
}
	
EWXWEXPORT(wxToolBar*,wxXmlResource_LoadToolBar)(wxXmlResource* self, wxWindow* parent, wxString* name)
{
	return self->LoadToolBar(parent, *name);
}
	
EWXWEXPORT(wxDialog*,wxXmlResource_LoadDialog)(wxXmlResource* self, wxWindow* parent, wxString* name)
{
	return self->LoadDialog(parent, *name);
}
	
EWXWEXPORT(wxPanel*,wxXmlResource_LoadPanel)(wxXmlResource* self, wxWindow* parent, wxString* name)
{
	return self->LoadPanel(parent, *name);
}
	
EWXWEXPORT(wxFrame*,wxXmlResource_LoadFrame)(wxXmlResource* self, wxWindow* parent, wxString* name)
{
	return self->LoadFrame(parent, *name);
}
	
EWXWEXPORT(wxObject*,wxXmlResource_LoadObject)(wxXmlResource* self, wxWindow* parent, wxString* name, wxString* classname)
{
	return self->LoadObject(parent, *name, *classname);
}
	
EWXWEXPORT(bool,wxXmlResource_InitializeObject)( wxXmlResource* self, wxObject* _inst, wxWindow* parent,
                                                 wxString* name, wxString* classname)
{
	return self->LoadObject(_inst, (wxWindow*)parent, *name, *classname);
}
	
EWXWEXPORT(void,wxXmlResource_LoadBitmap)(wxXmlResource* self, wxString* name, void* _ref)
{
	*((wxBitmap*)_ref) = self->LoadBitmap(*name);
}
	
EWXWEXPORT(void,wxXmlResource_LoadIcon)(wxXmlResource* self, wxString* name, void* _ref)
{
	*((wxIcon*)_ref) = self->LoadIcon(*name);
}
	
EWXWEXPORT(bool,wxXmlResource_Unload)(wxXmlResource* self, wxString* name)
{
	return self->Unload(*name);
}
	
EWXWEXPORT(bool,wxXmlResource_AttachUnknownControl)(wxXmlResource* self, wxString* name, wxWindow* control, wxWindow* parent)
{
	return self->AttachUnknownControl(*name, control, parent);
}
	
EWXWEXPORT(int,wxXmlResource_GetXRCID)(wxXmlResource* self, wxChar* str_id)
{
	return self->GetXRCID(str_id);
}
	
EWXWEXPORT(long,wxXmlResource_GetVersion)(wxXmlResource* self)
{
	return self->GetVersion();
}
	
EWXWEXPORT(int,wxXmlResource_CompareVersion)(wxXmlResource* self, int major, int minor, int release, int revision)
{
	return self->CompareVersion(major, minor, release, revision);
}
	
EWXWEXPORT(wxXmlResource*,wxXmlResource_Get)(wxXmlResource* self)
{
	return self->Get();
}
	
EWXWEXPORT(wxXmlResource*,wxXmlResource_Set)(wxXmlResource* self, wxXmlResource* res)
{
	return self->Set(res);
}

EWXWEXPORT(int,wxXmlResource_GetDomain)(wxXmlResource* self, wxChar* buf)
{
	buf = self->GetDomain();
	return wxStrlen(buf);
}

EWXWEXPORT(void,wxXmlResource_SetDomain)(wxXmlResource* self, wxChar* domain)
{
	self->SetDomain(domain);
}

EWXWEXPORT(int,wxXmlResource_GetFlags)(wxXmlResource* self)
{
	return self->GetFlags();
}
	
EWXWEXPORT(void,wxXmlResource_SetFlags)(wxXmlResource* self, int flags)
{
	self->SetFlags(flags);
}
	
}