switched wxXML to expat parser ; some minor formatting mods
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9979 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2,7 +2,10 @@
|
|||||||
|
|
||||||
top_srcdir = @top_srcdir@/..
|
top_srcdir = @top_srcdir@/..
|
||||||
top_builddir = ../../..
|
top_builddir = ../../..
|
||||||
libsrc_dir = contrib/src/xml
|
|
||||||
|
expat_dir = $(top_srcdir)/contrib/src/xml/expat
|
||||||
|
libsrc_dir = contrib/src/xml@PATH_IFS@$(expat_dir)/xmlparse@PATH_IFS@$(expat_dir)/xmltok
|
||||||
|
|
||||||
|
|
||||||
TARGET_LIBNAME=libwxxml
|
TARGET_LIBNAME=libwxxml
|
||||||
|
|
||||||
@@ -13,6 +16,9 @@ LIBVERSION_AGE=0
|
|||||||
HEADER_PATH=$(top_srcdir)/contrib/include/wx
|
HEADER_PATH=$(top_srcdir)/contrib/include/wx
|
||||||
HEADER_SUBDIR=xml
|
HEADER_SUBDIR=xml
|
||||||
|
|
||||||
|
EXPAT_DEFS=-I$(expat_dir)/xmlparse -I$(expat_dir)/xmltok
|
||||||
|
EXPAT_OBJECTS=xmltok.o xmlrole.o xmlparse.o
|
||||||
|
|
||||||
HEADERS=xh_all.h xh_bttn.h xh_chckb.h xh_chckl.h xh_choic.h xh_combo.h \
|
HEADERS=xh_all.h xh_bttn.h xh_chckb.h xh_chckl.h xh_choic.h xh_combo.h \
|
||||||
xh_dlg.h xh_gauge.h xh_html.h xh_menu.h xh_notbk.h xh_panel.h \
|
xh_dlg.h xh_gauge.h xh_html.h xh_menu.h xh_notbk.h xh_panel.h \
|
||||||
xh_radbt.h xh_radbx.h xh_sizer.h xh_slidr.h xh_spin.h xh_stbmp.h \
|
xh_radbt.h xh_radbx.h xh_sizer.h xh_slidr.h xh_spin.h xh_stbmp.h \
|
||||||
@@ -20,15 +26,16 @@ HEADERS=xh_all.h xh_bttn.h xh_chckb.h xh_chckl.h xh_choic.h xh_combo.h \
|
|||||||
xh_bmpbt.h xh_cald.h xh_listc.h xh_scrol.h xh_stbox.h xh_tree.h \
|
xh_bmpbt.h xh_cald.h xh_listc.h xh_scrol.h xh_stbox.h xh_tree.h \
|
||||||
xh_stlin.h xh_bmp.h xh_unkwn.h xh_frame.h
|
xh_stlin.h xh_bmp.h xh_unkwn.h xh_frame.h
|
||||||
|
|
||||||
|
OBJECTS=$(EXPAT_OBJECTS) \
|
||||||
OBJECTS=xml.o xmlbin.o xmlbinz.o xmlpars.o xmlres.o xmlrsall.o \
|
xml.o xmlbin.o xmlbinz.o xmlexpat.o xmlwrite.o xmlres.o xmlrsall.o \
|
||||||
xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
|
xh_bttn.o xh_chckb.o xh_chckl.o xh_choic.o xh_combo.o xh_dlg.o \
|
||||||
xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
|
xh_gauge.o xh_html.o xh_menu.o xh_notbk.o xh_panel.o xh_radbt.o \
|
||||||
xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
|
xh_radbx.o xh_sizer.o xh_slidr.o xh_spin.o xh_stbmp.o xh_sttxt.o \
|
||||||
xh_text.o xh_listb.o xh_toolb.o xh_stlin.o xh_bmp.o xh_unkwn.o \
|
xh_text.o xh_listb.o xh_toolb.o xh_stlin.o xh_bmp.o xh_unkwn.o \
|
||||||
xh_bmpbt.o xh_cald.o xh_listc.o xh_scrol.o xh_stbox.o xh_tree.o
|
xh_bmpbt.o xh_cald.o xh_listc.o xh_scrol.o xh_stbox.o xh_tree.o \
|
||||||
|
xh_frame.o
|
||||||
|
|
||||||
APPEXTRADEFS=-I$(top_srcdir)/contrib/include
|
APPEXTRADEFS=-I$(top_srcdir)/contrib/include $(EXPAT_DEFS)
|
||||||
|
|
||||||
include $(top_builddir)/src/makelib.env
|
include $(top_builddir)/src/makelib.env
|
||||||
|
|
||||||
|
39
contrib/src/xml/README.EXPAT
Normal file
39
contrib/src/xml/README.EXPAT
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
./expat directory contains stripped-down version of Expat parser distribution
|
||||||
|
by J. Clark. I removed stuff not neccessary for wxXML (docs, samples), if you
|
||||||
|
are interested in it, please download full distribution from Clark's site
|
||||||
|
(http://www.jclark.com).
|
||||||
|
|
||||||
|
Version used is expat-1.2.
|
||||||
|
|
||||||
|
The Expat parser is available is licensed under the MIT license as follows:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
In other words, there shouldn't be any legal issues with using Expat in
|
||||||
|
your application.
|
||||||
|
|
||||||
|
Vaclav Slavik <v.slavik@volny.cz>
|
@@ -36,7 +36,7 @@ wxBitmapButtonXmlHandler::wxBitmapButtonXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxBitmapButtonXmlHandler::DoCreateResource()
|
wxObject *wxBitmapButtonXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxBitmapButton *button = new wxBitmapButton(m_ParentAsWindow,
|
wxBitmapButton *button = new wxBitmapButton(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetBitmap(wxT("bitmap")),
|
GetBitmap(wxT("bitmap")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -32,7 +32,7 @@ wxButtonXmlHandler::wxButtonXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxButtonXmlHandler::DoCreateResource()
|
wxObject *wxButtonXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxButton *button = new wxButton(m_ParentAsWindow,
|
wxButton *button = new wxButton(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -37,7 +37,7 @@ wxCalendarCtrlXmlHandler::wxCalendarCtrlXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxCalendarCtrlXmlHandler::DoCreateResource()
|
wxObject *wxCalendarCtrlXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxCalendarCtrl *calendar = new wxCalendarCtrl(m_ParentAsWindow,
|
wxCalendarCtrl *calendar = new wxCalendarCtrl(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
wxDefaultDateTime,
|
wxDefaultDateTime,
|
||||||
/*TODO: take it from resource*/
|
/*TODO: take it from resource*/
|
||||||
|
@@ -32,7 +32,7 @@ wxCheckBoxXmlHandler::wxCheckBoxXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxCheckBoxXmlHandler::DoCreateResource()
|
wxObject *wxCheckBoxXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxCheckBox *control = new wxCheckBox(m_ParentAsWindow,
|
wxCheckBox *control = new wxCheckBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "wx/checklst.h"
|
#include "wx/checklst.h"
|
||||||
|
|
||||||
wxCheckListXmlHandler::wxCheckListXmlHandler()
|
wxCheckListXmlHandler::wxCheckListXmlHandler()
|
||||||
: wxXmlResourceHandler(), m_InsideBox(FALSE)
|
: wxXmlResourceHandler(), m_insideBox(FALSE)
|
||||||
{
|
{
|
||||||
// no styles
|
// no styles
|
||||||
AddWindowStyles();
|
AddWindowStyles();
|
||||||
@@ -31,10 +31,10 @@ wxCheckListXmlHandler::wxCheckListXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxCheckListXmlHandler::DoCreateResource()
|
wxObject *wxCheckListXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if (m_Class == wxT("wxCheckList"))
|
if (m_class == wxT("wxCheckList"))
|
||||||
{
|
{
|
||||||
// need to build the list of strings from children
|
// need to build the list of strings from children
|
||||||
m_InsideBox = TRUE;
|
m_insideBox = TRUE;
|
||||||
CreateChildrenPrivately(NULL, GetParamNode(wxT("content")));
|
CreateChildrenPrivately(NULL, GetParamNode(wxT("content")));
|
||||||
wxString *strings = (wxString *) NULL;
|
wxString *strings = (wxString *) NULL;
|
||||||
if( strList.GetCount() > 0 )
|
if( strList.GetCount() > 0 )
|
||||||
@@ -46,7 +46,7 @@ wxObject *wxCheckListXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxCheckListBox *control = new wxCheckListBox(m_ParentAsWindow,
|
wxCheckListBox *control = new wxCheckListBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
strList.GetCount(),
|
strList.GetCount(),
|
||||||
@@ -90,7 +90,7 @@ wxObject *wxCheckListXmlHandler::DoCreateResource()
|
|||||||
// handle <item checked="boolean">Label</item>
|
// handle <item checked="boolean">Label</item>
|
||||||
|
|
||||||
// add to the list
|
// add to the list
|
||||||
strList.Add( GetNodeContent(m_Node) );
|
strList.Add( GetNodeContent(m_node) );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ wxObject *wxCheckListXmlHandler::DoCreateResource()
|
|||||||
bool wxCheckListXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxCheckListXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return (IsOfClass(node, wxT("wxCheckList")) ||
|
return (IsOfClass(node, wxT("wxCheckList")) ||
|
||||||
(m_InsideBox && node->GetName() == wxT("item"))
|
(m_insideBox && node->GetName() == wxT("item"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "wx/choice.h"
|
#include "wx/choice.h"
|
||||||
|
|
||||||
wxChoiceXmlHandler::wxChoiceXmlHandler()
|
wxChoiceXmlHandler::wxChoiceXmlHandler()
|
||||||
: wxXmlResourceHandler() , m_InsideBox(FALSE)
|
: wxXmlResourceHandler() , m_insideBox(FALSE)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxCB_SORT);
|
ADD_STYLE(wxCB_SORT);
|
||||||
AddWindowStyles();
|
AddWindowStyles();
|
||||||
@@ -31,13 +31,13 @@ wxChoiceXmlHandler::wxChoiceXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxChoiceXmlHandler::DoCreateResource()
|
wxObject *wxChoiceXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if( m_Class == wxT("wxChoice"))
|
if( m_class == wxT("wxChoice"))
|
||||||
{
|
{
|
||||||
// find the selection
|
// find the selection
|
||||||
long selection = GetLong( wxT("selection"), -1 );
|
long selection = GetLong( wxT("selection"), -1 );
|
||||||
|
|
||||||
// need to build the list of strings from children
|
// need to build the list of strings from children
|
||||||
m_InsideBox = TRUE;
|
m_insideBox = TRUE;
|
||||||
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
||||||
wxString *strings = (wxString *) NULL;
|
wxString *strings = (wxString *) NULL;
|
||||||
if( strList.GetCount() > 0 )
|
if( strList.GetCount() > 0 )
|
||||||
@@ -49,7 +49,7 @@ wxObject *wxChoiceXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxChoice *control = new wxChoice(m_ParentAsWindow,
|
wxChoice *control = new wxChoice(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
strList.GetCount(),
|
strList.GetCount(),
|
||||||
@@ -76,7 +76,7 @@ wxObject *wxChoiceXmlHandler::DoCreateResource()
|
|||||||
// handle <item>Label</item>
|
// handle <item>Label</item>
|
||||||
|
|
||||||
// add to the list
|
// add to the list
|
||||||
strList.Add( GetNodeContent(m_Node) );
|
strList.Add( GetNodeContent(m_node) );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ wxObject *wxChoiceXmlHandler::DoCreateResource()
|
|||||||
bool wxChoiceXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxChoiceXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return (IsOfClass(node, wxT("wxChoice")) ||
|
return (IsOfClass(node, wxT("wxChoice")) ||
|
||||||
(m_InsideBox && node->GetName() == wxT("item"))
|
(m_insideBox && node->GetName() == wxT("item"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
#if wxUSE_COMBOBOX
|
#if wxUSE_COMBOBOX
|
||||||
|
|
||||||
wxComboBoxXmlHandler::wxComboBoxXmlHandler()
|
wxComboBoxXmlHandler::wxComboBoxXmlHandler()
|
||||||
: wxXmlResourceHandler() , m_InsideBox(FALSE)
|
: wxXmlResourceHandler() , m_insideBox(FALSE)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxCB_SIMPLE);
|
ADD_STYLE(wxCB_SIMPLE);
|
||||||
ADD_STYLE(wxCB_SORT);
|
ADD_STYLE(wxCB_SORT);
|
||||||
@@ -36,13 +36,13 @@ wxComboBoxXmlHandler::wxComboBoxXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxComboBoxXmlHandler::DoCreateResource()
|
wxObject *wxComboBoxXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if( m_Class == wxT("wxComboBox"))
|
if( m_class == wxT("wxComboBox"))
|
||||||
{
|
{
|
||||||
// find the selection
|
// find the selection
|
||||||
long selection = GetLong( wxT("selection"), -1 );
|
long selection = GetLong( wxT("selection"), -1 );
|
||||||
|
|
||||||
// need to build the list of strings from children
|
// need to build the list of strings from children
|
||||||
m_InsideBox = TRUE;
|
m_insideBox = TRUE;
|
||||||
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
||||||
wxString *strings = (wxString *) NULL;
|
wxString *strings = (wxString *) NULL;
|
||||||
if( strList.GetCount() > 0 )
|
if( strList.GetCount() > 0 )
|
||||||
@@ -54,7 +54,7 @@ wxObject *wxComboBoxXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxComboBox *control = new wxComboBox(m_ParentAsWindow,
|
wxComboBox *control = new wxComboBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("value")),
|
GetText(wxT("value")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
@@ -82,7 +82,7 @@ wxObject *wxComboBoxXmlHandler::DoCreateResource()
|
|||||||
// handle <item>Label</item>
|
// handle <item>Label</item>
|
||||||
|
|
||||||
// add to the list
|
// add to the list
|
||||||
strList.Add( GetNodeContent(m_Node) );
|
strList.Add( GetNodeContent(m_node) );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -94,7 +94,7 @@ wxObject *wxComboBoxXmlHandler::DoCreateResource()
|
|||||||
bool wxComboBoxXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxComboBoxXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return (IsOfClass(node, wxT("wxComboBox")) ||
|
return (IsOfClass(node, wxT("wxComboBox")) ||
|
||||||
(m_InsideBox && node->GetName() == wxT("item"))
|
(m_insideBox && node->GetName() == wxT("item"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,11 +48,11 @@ wxDialogXmlHandler::wxDialogXmlHandler() : wxXmlResourceHandler()
|
|||||||
|
|
||||||
wxObject *wxDialogXmlHandler::DoCreateResource()
|
wxObject *wxDialogXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxDialog *dlg = wxDynamicCast(m_Instance, wxDialog);
|
wxDialog *dlg = wxDynamicCast(m_instance, wxDialog);
|
||||||
|
|
||||||
wxASSERT_MSG(dlg, _("XML resource: Cannot create dialog without instance."));
|
wxASSERT_MSG(dlg, _("XML resource: Cannot create dialog without instance."));
|
||||||
|
|
||||||
dlg->Create(m_ParentAsWindow,
|
dlg->Create(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("title")),
|
GetText(wxT("title")),
|
||||||
wxDefaultPosition, wxDefaultSize,
|
wxDefaultPosition, wxDefaultSize,
|
||||||
|
@@ -52,11 +52,11 @@ wxFrameXmlHandler::wxFrameXmlHandler() : wxXmlResourceHandler()
|
|||||||
|
|
||||||
wxObject *wxFrameXmlHandler::DoCreateResource()
|
wxObject *wxFrameXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxFrame *frame = wxDynamicCast(m_Instance, wxFrame);
|
wxFrame *frame = wxDynamicCast(m_instance, wxFrame);
|
||||||
|
|
||||||
wxASSERT_MSG(frame, _("XML resource: Cannot create dialog without instance."));
|
wxASSERT_MSG(frame, _("XML resource: Cannot create dialog without instance."));
|
||||||
|
|
||||||
frame->Create(m_ParentAsWindow,
|
frame->Create(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(_T("title")),
|
GetText(_T("title")),
|
||||||
wxDefaultPosition, wxDefaultSize,
|
wxDefaultPosition, wxDefaultSize,
|
||||||
|
@@ -36,7 +36,7 @@ wxGaugeXmlHandler::wxGaugeXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxGaugeXmlHandler::DoCreateResource()
|
wxObject *wxGaugeXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxGauge *control = new wxGauge(m_ParentAsWindow,
|
wxGauge *control = new wxGauge(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetLong( wxT("range"), wxGAUGE_DEFAULT_RANGE),
|
GetLong( wxT("range"), wxGAUGE_DEFAULT_RANGE),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -36,7 +36,7 @@ wxHtmlWindowXmlHandler::wxHtmlWindowXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxHtmlWindowXmlHandler::DoCreateResource()
|
wxObject *wxHtmlWindowXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxHtmlWindow *control = new wxHtmlWindow(m_ParentAsWindow,
|
wxHtmlWindow *control = new wxHtmlWindow(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle( wxT("style" ), wxHW_SCROLLBAR_AUTO),
|
GetStyle( wxT("style" ), wxHW_SCROLLBAR_AUTO),
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "wx/listbox.h"
|
#include "wx/listbox.h"
|
||||||
|
|
||||||
wxListBoxXmlHandler::wxListBoxXmlHandler()
|
wxListBoxXmlHandler::wxListBoxXmlHandler()
|
||||||
: wxXmlResourceHandler() , m_InsideBox(FALSE)
|
: wxXmlResourceHandler() , m_insideBox(FALSE)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxLB_SINGLE);
|
ADD_STYLE(wxLB_SINGLE);
|
||||||
ADD_STYLE(wxLB_MULTIPLE);
|
ADD_STYLE(wxLB_MULTIPLE);
|
||||||
@@ -37,13 +37,13 @@ wxListBoxXmlHandler::wxListBoxXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxListBoxXmlHandler::DoCreateResource()
|
wxObject *wxListBoxXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if( m_Class == wxT("wxListBox"))
|
if( m_class == wxT("wxListBox"))
|
||||||
{
|
{
|
||||||
// find the selection
|
// find the selection
|
||||||
long selection = GetLong( wxT("selection"), -1 );
|
long selection = GetLong( wxT("selection"), -1 );
|
||||||
|
|
||||||
// need to build the list of strings from children
|
// need to build the list of strings from children
|
||||||
m_InsideBox = TRUE;
|
m_insideBox = TRUE;
|
||||||
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
||||||
wxString *strings = (wxString *) NULL;
|
wxString *strings = (wxString *) NULL;
|
||||||
if( strList.GetCount() > 0 )
|
if( strList.GetCount() > 0 )
|
||||||
@@ -55,7 +55,7 @@ wxObject *wxListBoxXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxListBox *control = new wxListBox(m_ParentAsWindow,
|
wxListBox *control = new wxListBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
strList.GetCount(),
|
strList.GetCount(),
|
||||||
@@ -82,7 +82,7 @@ wxObject *wxListBoxXmlHandler::DoCreateResource()
|
|||||||
// handle <item>Label</item>
|
// handle <item>Label</item>
|
||||||
|
|
||||||
// add to the list
|
// add to the list
|
||||||
strList.Add( GetNodeContent(m_Node) );
|
strList.Add( GetNodeContent(m_node) );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -94,7 +94,7 @@ wxObject *wxListBoxXmlHandler::DoCreateResource()
|
|||||||
bool wxListBoxXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxListBoxXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return (IsOfClass(node, wxT("wxListBox")) ||
|
return (IsOfClass(node, wxT("wxListBox")) ||
|
||||||
(m_InsideBox && node->GetName() == wxT("item"))
|
(m_insideBox && node->GetName() == wxT("item"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,7 +46,7 @@ wxListCtrlXmlHandler::wxListCtrlXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxListCtrlXmlHandler::DoCreateResource()
|
wxObject *wxListCtrlXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxListCtrl *list = new wxListCtrl(m_ParentAsWindow,
|
wxListCtrl *list = new wxListCtrl(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(),
|
GetStyle(),
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
|
|
||||||
wxMenuXmlHandler::wxMenuXmlHandler() :
|
wxMenuXmlHandler::wxMenuXmlHandler() :
|
||||||
wxXmlResourceHandler(), m_InsideMenu(FALSE)
|
wxXmlResourceHandler(), m_insideMenu(FALSE)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxMENU_TEAROFF);
|
ADD_STYLE(wxMENU_TEAROFF);
|
||||||
}
|
}
|
||||||
@@ -33,23 +33,23 @@ wxMenuXmlHandler::wxMenuXmlHandler() :
|
|||||||
|
|
||||||
wxObject *wxMenuXmlHandler::DoCreateResource()
|
wxObject *wxMenuXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if (m_Class == wxT("wxMenu"))
|
if (m_class == wxT("wxMenu"))
|
||||||
{
|
{
|
||||||
wxMenu *menu = new wxMenu(GetStyle());
|
wxMenu *menu = new wxMenu(GetStyle());
|
||||||
wxString title = GetText(wxT("label"));
|
wxString title = GetText(wxT("label"));
|
||||||
wxString help = GetText(wxT("help"));
|
wxString help = GetText(wxT("help"));
|
||||||
|
|
||||||
bool oldins = m_InsideMenu;
|
bool oldins = m_insideMenu;
|
||||||
m_InsideMenu = TRUE;
|
m_insideMenu = TRUE;
|
||||||
CreateChildren(menu, TRUE/*only this handler*/);
|
CreateChildren(menu, TRUE/*only this handler*/);
|
||||||
m_InsideMenu = oldins;
|
m_insideMenu = oldins;
|
||||||
|
|
||||||
wxMenuBar *p_bar = wxDynamicCast(m_Parent, wxMenuBar);
|
wxMenuBar *p_bar = wxDynamicCast(m_parent, wxMenuBar);
|
||||||
if (p_bar)
|
if (p_bar)
|
||||||
p_bar->Append(menu, title);
|
p_bar->Append(menu, title);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxMenu *p_menu = wxDynamicCast(m_Parent, wxMenu);
|
wxMenu *p_menu = wxDynamicCast(m_parent, wxMenu);
|
||||||
if (p_menu)
|
if (p_menu)
|
||||||
p_menu->Append(GetID(), title, menu, help);
|
p_menu->Append(GetID(), title, menu, help);
|
||||||
}
|
}
|
||||||
@@ -59,11 +59,11 @@ wxObject *wxMenuXmlHandler::DoCreateResource()
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxMenu *p_menu = wxDynamicCast(m_Parent, wxMenu);
|
wxMenu *p_menu = wxDynamicCast(m_parent, wxMenu);
|
||||||
|
|
||||||
if (m_Class == wxT("separator"))
|
if (m_class == wxT("separator"))
|
||||||
p_menu->AppendSeparator();
|
p_menu->AppendSeparator();
|
||||||
else if (m_Class == wxT("break"))
|
else if (m_class == wxT("break"))
|
||||||
p_menu->Break();
|
p_menu->Break();
|
||||||
else /*wxMenuItem*/
|
else /*wxMenuItem*/
|
||||||
{
|
{
|
||||||
@@ -90,7 +90,7 @@ wxObject *wxMenuXmlHandler::DoCreateResource()
|
|||||||
bool wxMenuXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxMenuXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return IsOfClass(node, wxT("wxMenu")) ||
|
return IsOfClass(node, wxT("wxMenu")) ||
|
||||||
(m_InsideMenu &&
|
(m_insideMenu &&
|
||||||
(IsOfClass(node, wxT("wxMenuItem")) ||
|
(IsOfClass(node, wxT("wxMenuItem")) ||
|
||||||
IsOfClass(node, wxT("break")) ||
|
IsOfClass(node, wxT("break")) ||
|
||||||
IsOfClass(node, wxT("separator")))
|
IsOfClass(node, wxT("separator")))
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
#include "wx/sizer.h"
|
#include "wx/sizer.h"
|
||||||
|
|
||||||
wxNotebookXmlHandler::wxNotebookXmlHandler()
|
wxNotebookXmlHandler::wxNotebookXmlHandler()
|
||||||
: wxXmlResourceHandler(), m_IsInside(FALSE), m_Notebook(NULL)
|
: wxXmlResourceHandler(), m_isInside(FALSE), m_notebook(NULL)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxNB_FIXEDWIDTH);
|
ADD_STYLE(wxNB_FIXEDWIDTH);
|
||||||
ADD_STYLE(wxNB_LEFT);
|
ADD_STYLE(wxNB_LEFT);
|
||||||
@@ -41,20 +41,20 @@ wxNotebookXmlHandler::wxNotebookXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxNotebookXmlHandler::DoCreateResource()
|
wxObject *wxNotebookXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if (m_Class == wxT("notebookpage"))
|
if (m_class == wxT("notebookpage"))
|
||||||
{
|
{
|
||||||
wxXmlNode *n = GetParamNode(wxT("object"));
|
wxXmlNode *n = GetParamNode(wxT("object"));
|
||||||
|
|
||||||
if (n)
|
if (n)
|
||||||
{
|
{
|
||||||
bool old_ins = m_IsInside;
|
bool old_ins = m_isInside;
|
||||||
m_IsInside = FALSE;
|
m_isInside = FALSE;
|
||||||
m_IsInside = old_ins;
|
m_isInside = old_ins;
|
||||||
wxObject *item = CreateResFromNode(n, m_Notebook, NULL);
|
wxObject *item = CreateResFromNode(n, m_notebook, NULL);
|
||||||
wxWindow *wnd = wxDynamicCast(item, wxWindow);
|
wxWindow *wnd = wxDynamicCast(item, wxWindow);
|
||||||
|
|
||||||
if (wnd)
|
if (wnd)
|
||||||
m_Notebook->AddPage(wnd, GetText(wxT("label")),
|
m_notebook->AddPage(wnd, GetText(wxT("label")),
|
||||||
GetBool(wxT("selected"), 0));
|
GetBool(wxT("selected"), 0));
|
||||||
else
|
else
|
||||||
wxLogError(wxT("Error in resource."));
|
wxLogError(wxT("Error in resource."));
|
||||||
@@ -68,19 +68,19 @@ wxObject *wxNotebookXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
wxNotebook *nb = new wxNotebook(m_ParentAsWindow,
|
wxNotebook *nb = new wxNotebook(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle( wxT("style" )),
|
GetStyle( wxT("style" )),
|
||||||
GetName());
|
GetName());
|
||||||
|
|
||||||
wxNotebook *old_par = m_Notebook;
|
wxNotebook *old_par = m_notebook;
|
||||||
m_Notebook = nb;
|
m_notebook = nb;
|
||||||
bool old_ins = m_IsInside;
|
bool old_ins = m_isInside;
|
||||||
m_IsInside = TRUE;
|
m_isInside = TRUE;
|
||||||
CreateChildren(m_Notebook, TRUE/*only this handler*/);
|
CreateChildren(m_notebook, TRUE/*only this handler*/);
|
||||||
m_IsInside = old_ins;
|
m_isInside = old_ins;
|
||||||
m_Notebook = old_par;
|
m_notebook = old_par;
|
||||||
|
|
||||||
if (GetBool(wxT("usenotebooksizer"), FALSE))
|
if (GetBool(wxT("usenotebooksizer"), FALSE))
|
||||||
return new wxNotebookSizer(nb);
|
return new wxNotebookSizer(nb);
|
||||||
@@ -93,8 +93,8 @@ wxObject *wxNotebookXmlHandler::DoCreateResource()
|
|||||||
|
|
||||||
bool wxNotebookXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxNotebookXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return ((!m_IsInside && IsOfClass(node, wxT("wxNotebook"))) ||
|
return ((!m_isInside && IsOfClass(node, wxT("wxNotebook"))) ||
|
||||||
(m_IsInside && IsOfClass(node, wxT("notebookpage"))));
|
(m_isInside && IsOfClass(node, wxT("notebookpage"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -36,16 +36,16 @@ wxPanelXmlHandler::wxPanelXmlHandler() : wxXmlResourceHandler()
|
|||||||
|
|
||||||
wxObject *wxPanelXmlHandler::DoCreateResource()
|
wxObject *wxPanelXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxPanel *panel = wxDynamicCast(m_Instance, wxPanel);
|
wxPanel *panel = wxDynamicCast(m_instance, wxPanel);
|
||||||
|
|
||||||
if (panel == NULL)
|
if (panel == NULL)
|
||||||
panel = new wxPanel(m_ParentAsWindow,
|
panel = new wxPanel(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(wxT("style"), 0),
|
GetStyle(wxT("style"), 0),
|
||||||
GetName());
|
GetName());
|
||||||
else
|
else
|
||||||
panel->Create(m_ParentAsWindow,
|
panel->Create(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(wxT("style"), 0),
|
GetStyle(wxT("style"), 0),
|
||||||
|
@@ -40,7 +40,7 @@ wxObject *wxRadioButtonXmlHandler::DoCreateResource()
|
|||||||
* normal radio button.
|
* normal radio button.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
wxRadioButton *control = new wxRadioButton(m_ParentAsWindow,
|
wxRadioButton *control = new wxRadioButton(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
#if wxUSE_RADIOBOX
|
#if wxUSE_RADIOBOX
|
||||||
|
|
||||||
wxRadioBoxXmlHandler::wxRadioBoxXmlHandler()
|
wxRadioBoxXmlHandler::wxRadioBoxXmlHandler()
|
||||||
: wxXmlResourceHandler() , m_InsideBox(FALSE)
|
: wxXmlResourceHandler() , m_insideBox(FALSE)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxRA_SPECIFY_COLS);
|
ADD_STYLE(wxRA_SPECIFY_COLS);
|
||||||
ADD_STYLE(wxRA_HORIZONTAL);
|
ADD_STYLE(wxRA_HORIZONTAL);
|
||||||
@@ -36,13 +36,13 @@ wxRadioBoxXmlHandler::wxRadioBoxXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxRadioBoxXmlHandler::DoCreateResource()
|
wxObject *wxRadioBoxXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if( m_Class == wxT("wxRadioBox"))
|
if( m_class == wxT("wxRadioBox"))
|
||||||
{
|
{
|
||||||
// find the selection
|
// find the selection
|
||||||
long selection = GetLong( wxT("selection"), -1 );
|
long selection = GetLong( wxT("selection"), -1 );
|
||||||
|
|
||||||
// need to build the list of strings from children
|
// need to build the list of strings from children
|
||||||
m_InsideBox = TRUE;
|
m_insideBox = TRUE;
|
||||||
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
CreateChildrenPrivately( NULL, GetParamNode(wxT("content")));
|
||||||
wxString *strings = (wxString *) NULL;
|
wxString *strings = (wxString *) NULL;
|
||||||
if( strList.GetCount() > 0 )
|
if( strList.GetCount() > 0 )
|
||||||
@@ -54,7 +54,7 @@ wxObject *wxRadioBoxXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxRadioBox *control = new wxRadioBox(m_ParentAsWindow,
|
wxRadioBox *control = new wxRadioBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
@@ -83,7 +83,7 @@ wxObject *wxRadioBoxXmlHandler::DoCreateResource()
|
|||||||
// handle <item selected="boolean">Label</item>
|
// handle <item selected="boolean">Label</item>
|
||||||
|
|
||||||
// add to the list
|
// add to the list
|
||||||
strList.Add( GetNodeContent(m_Node) );
|
strList.Add( GetNodeContent(m_node) );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ wxObject *wxRadioBoxXmlHandler::DoCreateResource()
|
|||||||
bool wxRadioBoxXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxRadioBoxXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return (IsOfClass(node, wxT("wxRadioBox")) ||
|
return (IsOfClass(node, wxT("wxRadioBox")) ||
|
||||||
(m_InsideBox && node->GetName() == wxT("item"))
|
(m_insideBox && node->GetName() == wxT("item"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,7 +33,7 @@ wxScrollBarXmlHandler::wxScrollBarXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxScrollBarXmlHandler::DoCreateResource()
|
wxObject *wxScrollBarXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxScrollBar *control = new wxScrollBar(m_ParentAsWindow,
|
wxScrollBar *control = new wxScrollBar(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(),
|
GetStyle(),
|
||||||
|
@@ -37,7 +37,7 @@ bool wxSizerXmlHandler::IsSizerNode(wxXmlNode *node)
|
|||||||
|
|
||||||
|
|
||||||
wxSizerXmlHandler::wxSizerXmlHandler()
|
wxSizerXmlHandler::wxSizerXmlHandler()
|
||||||
: wxXmlResourceHandler(), m_IsInside(FALSE), m_ParentSizer(NULL)
|
: wxXmlResourceHandler(), m_isInside(FALSE), m_parentSizer(NULL)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxHORIZONTAL);
|
ADD_STYLE(wxHORIZONTAL);
|
||||||
ADD_STYLE(wxVERTICAL);
|
ADD_STYLE(wxVERTICAL);
|
||||||
@@ -74,36 +74,36 @@ wxSizerXmlHandler::wxSizerXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxSizerXmlHandler::DoCreateResource()
|
wxObject *wxSizerXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if (m_Class == wxT("sizeritem"))
|
if (m_class == wxT("sizeritem"))
|
||||||
{
|
{
|
||||||
wxXmlNode *n = GetParamNode(wxT("object"));
|
wxXmlNode *n = GetParamNode(wxT("object"));
|
||||||
|
|
||||||
if (n)
|
if (n)
|
||||||
{
|
{
|
||||||
bool old_ins = m_IsInside;
|
bool old_ins = m_isInside;
|
||||||
wxSizer *old_par = m_ParentSizer;
|
wxSizer *old_par = m_parentSizer;
|
||||||
m_IsInside = FALSE;
|
m_isInside = FALSE;
|
||||||
if (!IsSizerNode(n)) m_ParentSizer = NULL;
|
if (!IsSizerNode(n)) m_parentSizer = NULL;
|
||||||
wxObject *item = CreateResFromNode(n, m_Parent, NULL);
|
wxObject *item = CreateResFromNode(n, m_parent, NULL);
|
||||||
m_IsInside = old_ins;
|
m_isInside = old_ins;
|
||||||
m_ParentSizer = old_par;
|
m_parentSizer = old_par;
|
||||||
wxSizer *sizer = wxDynamicCast(item, wxSizer);
|
wxSizer *sizer = wxDynamicCast(item, wxSizer);
|
||||||
wxWindow *wnd = wxDynamicCast(item, wxWindow);
|
wxWindow *wnd = wxDynamicCast(item, wxWindow);
|
||||||
wxSize minsize = GetSize(wxT("minsize"));
|
wxSize minsize = GetSize(wxT("minsize"));
|
||||||
|
|
||||||
if (sizer)
|
if (sizer)
|
||||||
{
|
{
|
||||||
m_ParentSizer->Add(sizer, GetLong(wxT("option")),
|
m_parentSizer->Add(sizer, GetLong(wxT("option")),
|
||||||
GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
||||||
if (!(minsize == wxDefaultSize))
|
if (!(minsize == wxDefaultSize))
|
||||||
m_ParentSizer->SetItemMinSize(sizer, minsize.x, minsize.y);
|
m_parentSizer->SetItemMinSize(sizer, minsize.x, minsize.y);
|
||||||
}
|
}
|
||||||
else if (wnd)
|
else if (wnd)
|
||||||
{
|
{
|
||||||
m_ParentSizer->Add(wnd, GetLong(wxT("option")),
|
m_parentSizer->Add(wnd, GetLong(wxT("option")),
|
||||||
GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
||||||
if (!(minsize == wxDefaultSize))
|
if (!(minsize == wxDefaultSize))
|
||||||
m_ParentSizer->SetItemMinSize(wnd, minsize.x, minsize.y);
|
m_parentSizer->SetItemMinSize(wnd, minsize.x, minsize.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
wxLogError(wxT("Error in resource."));
|
wxLogError(wxT("Error in resource."));
|
||||||
@@ -117,11 +117,11 @@ wxObject *wxSizerXmlHandler::DoCreateResource()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (m_Class == wxT("spacer"))
|
else if (m_class == wxT("spacer"))
|
||||||
{
|
{
|
||||||
wxCHECK_MSG(m_ParentSizer, NULL, wxT("Incorrect syntax of XML resource: spacer not within sizer!"));
|
wxCHECK_MSG(m_parentSizer, NULL, wxT("Incorrect syntax of XML resource: spacer not within sizer!"));
|
||||||
wxSize sz = GetSize();
|
wxSize sz = GetSize();
|
||||||
m_ParentSizer->Add(sz.x, sz.y,
|
m_parentSizer->Add(sz.x, sz.y,
|
||||||
GetLong(wxT("option")), GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
GetLong(wxT("option")), GetStyle(wxT("flag")), GetDimension(wxT("border")));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -130,29 +130,29 @@ wxObject *wxSizerXmlHandler::DoCreateResource()
|
|||||||
else {
|
else {
|
||||||
wxSizer *sizer = NULL;
|
wxSizer *sizer = NULL;
|
||||||
|
|
||||||
wxXmlNode *parentNode = m_Node->GetParent();
|
wxXmlNode *parentNode = m_node->GetParent();
|
||||||
|
|
||||||
wxCHECK_MSG(m_ParentSizer != NULL ||
|
wxCHECK_MSG(m_parentSizer != NULL ||
|
||||||
((IsOfClass(parentNode, wxT("wxPanel")) ||
|
((IsOfClass(parentNode, wxT("wxPanel")) ||
|
||||||
IsOfClass(parentNode, wxT("wxDialog"))) &&
|
IsOfClass(parentNode, wxT("wxDialog"))) &&
|
||||||
parentNode->GetType() == wxXML_ELEMENT_NODE), NULL,
|
parentNode->GetType() == wxXML_ELEMENT_NODE), NULL,
|
||||||
wxT("Incorrect use of sizer: parent is not 'wxDialog' or 'wxPanel'."));
|
wxT("Incorrect use of sizer: parent is not 'wxDialog' or 'wxPanel'."));
|
||||||
|
|
||||||
if (m_Class == wxT("wxBoxSizer"))
|
if (m_class == wxT("wxBoxSizer"))
|
||||||
sizer = new wxBoxSizer(GetStyle(wxT("orient"), wxHORIZONTAL));
|
sizer = new wxBoxSizer(GetStyle(wxT("orient"), wxHORIZONTAL));
|
||||||
|
|
||||||
else if (m_Class == wxT("wxStaticBoxSizer"))
|
else if (m_class == wxT("wxStaticBoxSizer"))
|
||||||
{
|
{
|
||||||
sizer = new wxStaticBoxSizer(
|
sizer = new wxStaticBoxSizer(
|
||||||
new wxStaticBox(m_ParentAsWindow, -1, GetText(wxT("label"))),
|
new wxStaticBox(m_parentAsWindow, -1, GetText(wxT("label"))),
|
||||||
GetStyle(wxT("orient"), wxHORIZONTAL));
|
GetStyle(wxT("orient"), wxHORIZONTAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (m_Class == wxT("wxGridSizer"))
|
else if (m_class == wxT("wxGridSizer"))
|
||||||
sizer = new wxGridSizer(GetLong(wxT("rows")), GetLong(wxT("cols")),
|
sizer = new wxGridSizer(GetLong(wxT("rows")), GetLong(wxT("cols")),
|
||||||
GetDimension(wxT("vgap")), GetDimension(wxT("hgap")));
|
GetDimension(wxT("vgap")), GetDimension(wxT("hgap")));
|
||||||
|
|
||||||
else if (m_Class == wxT("wxFlexGridSizer"))
|
else if (m_class == wxT("wxFlexGridSizer"))
|
||||||
{
|
{
|
||||||
wxFlexGridSizer *fsizer =
|
wxFlexGridSizer *fsizer =
|
||||||
new wxFlexGridSizer(GetLong(wxT("rows")), GetLong(wxT("cols")),
|
new wxFlexGridSizer(GetLong(wxT("rows")), GetLong(wxT("cols")),
|
||||||
@@ -182,27 +182,27 @@ wxObject *wxSizerXmlHandler::DoCreateResource()
|
|||||||
if (!(minsize == wxDefaultSize))
|
if (!(minsize == wxDefaultSize))
|
||||||
sizer->SetMinSize(minsize);
|
sizer->SetMinSize(minsize);
|
||||||
|
|
||||||
wxSizer *old_par = m_ParentSizer;
|
wxSizer *old_par = m_parentSizer;
|
||||||
m_ParentSizer = sizer;
|
m_parentSizer = sizer;
|
||||||
bool old_ins = m_IsInside;
|
bool old_ins = m_isInside;
|
||||||
m_IsInside = TRUE;
|
m_isInside = TRUE;
|
||||||
CreateChildren(m_Parent, TRUE/*only this handler*/);
|
CreateChildren(m_parent, TRUE/*only this handler*/);
|
||||||
m_IsInside = old_ins;
|
m_isInside = old_ins;
|
||||||
m_ParentSizer = old_par;
|
m_parentSizer = old_par;
|
||||||
|
|
||||||
if (m_ParentSizer == NULL) // setup window:
|
if (m_parentSizer == NULL) // setup window:
|
||||||
{
|
{
|
||||||
m_ParentAsWindow->SetAutoLayout(TRUE);
|
m_parentAsWindow->SetAutoLayout(TRUE);
|
||||||
m_ParentAsWindow->SetSizer(sizer);
|
m_parentAsWindow->SetSizer(sizer);
|
||||||
|
|
||||||
wxXmlNode *nd = m_Node;
|
wxXmlNode *nd = m_node;
|
||||||
m_Node = parentNode;
|
m_node = parentNode;
|
||||||
if (GetSize() == wxDefaultSize)
|
if (GetSize() == wxDefaultSize)
|
||||||
sizer->Fit(m_ParentAsWindow);
|
sizer->Fit(m_parentAsWindow);
|
||||||
m_Node = nd;
|
m_node = nd;
|
||||||
|
|
||||||
if (m_ParentAsWindow->GetWindowStyle() & (wxRESIZE_BOX | wxRESIZE_BORDER))
|
if (m_parentAsWindow->GetWindowStyle() & (wxRESIZE_BOX | wxRESIZE_BORDER))
|
||||||
sizer->SetSizeHints(m_ParentAsWindow);
|
sizer->SetSizeHints(m_parentAsWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
return sizer;
|
return sizer;
|
||||||
@@ -213,7 +213,7 @@ wxObject *wxSizerXmlHandler::DoCreateResource()
|
|||||||
|
|
||||||
bool wxSizerXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxSizerXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return ((!m_IsInside && IsSizerNode(node)) ||
|
return ((!m_isInside && IsSizerNode(node)) ||
|
||||||
(m_IsInside && IsOfClass(node, wxT("sizeritem"))) ||
|
(m_isInside && IsOfClass(node, wxT("sizeritem"))) ||
|
||||||
(m_IsInside && IsOfClass(node, wxT("spacer"))));
|
(m_isInside && IsOfClass(node, wxT("spacer"))));
|
||||||
}
|
}
|
||||||
|
@@ -42,7 +42,7 @@ wxSliderXmlHandler::wxSliderXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxSliderXmlHandler::DoCreateResource()
|
wxObject *wxSliderXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxSlider *control = new wxSlider(m_ParentAsWindow,
|
wxSlider *control = new wxSlider(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetLong( wxT("value"), wxSL_DEFAULT_VALUE),
|
GetLong( wxT("value"), wxSL_DEFAULT_VALUE),
|
||||||
GetLong( wxT("min"), wxSL_DEFAULT_MIN),
|
GetLong( wxT("min"), wxSL_DEFAULT_MIN),
|
||||||
|
@@ -36,7 +36,7 @@ wxSpinButtonXmlHandler::wxSpinButtonXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxSpinButtonXmlHandler::DoCreateResource()
|
wxObject *wxSpinButtonXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxSpinButton *control = new wxSpinButton(m_ParentAsWindow,
|
wxSpinButton *control = new wxSpinButton(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle( wxT("style"), wxSP_VERTICAL | wxSP_ARROW_KEYS ),
|
GetStyle( wxT("style"), wxSP_VERTICAL | wxSP_ARROW_KEYS ),
|
||||||
@@ -73,7 +73,7 @@ wxSpinCtrlXmlHandler::wxSpinCtrlXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxSpinCtrlXmlHandler::DoCreateResource()
|
wxObject *wxSpinCtrlXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxSpinCtrl *control = new wxSpinCtrl(m_ParentAsWindow,
|
wxSpinCtrl *control = new wxSpinCtrl(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("value")),
|
GetText(wxT("value")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -30,7 +30,7 @@ wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxStaticBitmapXmlHandler::DoCreateResource()
|
wxObject *wxStaticBitmapXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxStaticBitmap *bmp = new wxStaticBitmap(m_ParentAsWindow,
|
wxStaticBitmap *bmp = new wxStaticBitmap(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetBitmap(wxT("bitmap"), GetSize()),
|
GetBitmap(wxT("bitmap"), GetSize()),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -30,7 +30,7 @@ wxStaticBoxXmlHandler::wxStaticBoxXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxStaticBoxXmlHandler::DoCreateResource()
|
wxObject *wxStaticBoxXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxStaticBox *box = new wxStaticBox(m_ParentAsWindow,
|
wxStaticBox *box = new wxStaticBox(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -34,7 +34,7 @@ wxStaticLineXmlHandler::wxStaticLineXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxStaticLineXmlHandler::DoCreateResource()
|
wxObject *wxStaticLineXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxStaticLine *line = new wxStaticLine(m_ParentAsWindow,
|
wxStaticLine *line = new wxStaticLine(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(wxT("style"), wxLI_HORIZONTAL),
|
GetStyle(wxT("style"), wxLI_HORIZONTAL),
|
||||||
|
@@ -31,7 +31,7 @@ wxStaticTextXmlHandler::wxStaticTextXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxStaticTextXmlHandler::DoCreateResource()
|
wxObject *wxStaticTextXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxStaticText *text = new wxStaticText(m_ParentAsWindow,
|
wxStaticText *text = new wxStaticText(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("label")),
|
GetText(wxT("label")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -35,7 +35,7 @@ wxTextCtrlXmlHandler::wxTextCtrlXmlHandler() : wxXmlResourceHandler()
|
|||||||
|
|
||||||
wxObject *wxTextCtrlXmlHandler::DoCreateResource()
|
wxObject *wxTextCtrlXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxTextCtrl *text = new wxTextCtrl(m_ParentAsWindow,
|
wxTextCtrl *text = new wxTextCtrl(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetText(wxT("value")),
|
GetText(wxT("value")),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
#if wxUSE_TOOLBAR
|
#if wxUSE_TOOLBAR
|
||||||
|
|
||||||
wxToolBarXmlHandler::wxToolBarXmlHandler()
|
wxToolBarXmlHandler::wxToolBarXmlHandler()
|
||||||
: wxXmlResourceHandler(), m_IsInside(FALSE), m_Toolbar(NULL)
|
: wxXmlResourceHandler(), m_isInside(FALSE), m_toolbar(NULL)
|
||||||
{
|
{
|
||||||
ADD_STYLE(wxTB_FLAT);
|
ADD_STYLE(wxTB_FLAT);
|
||||||
ADD_STYLE(wxTB_DOCKABLE);
|
ADD_STYLE(wxTB_DOCKABLE);
|
||||||
@@ -38,10 +38,10 @@ wxToolBarXmlHandler::wxToolBarXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxToolBarXmlHandler::DoCreateResource()
|
wxObject *wxToolBarXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
if (m_Class == wxT("tool"))
|
if (m_class == wxT("tool"))
|
||||||
{
|
{
|
||||||
wxCHECK_MSG(m_Toolbar, NULL, wxT("Incorrect syntax of XML resource: tool not within a toolbar!"));
|
wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XML resource: tool not within a toolbar!"));
|
||||||
m_Toolbar->AddTool(GetID(),
|
m_toolbar->AddTool(GetID(),
|
||||||
GetBitmap(wxT("bitmap")),
|
GetBitmap(wxT("bitmap")),
|
||||||
GetBitmap(wxT("bitmap2")),
|
GetBitmap(wxT("bitmap2")),
|
||||||
GetBool(wxT("toggle")),
|
GetBool(wxT("toggle")),
|
||||||
@@ -50,14 +50,14 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
|
|||||||
NULL,
|
NULL,
|
||||||
GetText(wxT("tooltip")),
|
GetText(wxT("tooltip")),
|
||||||
GetText(wxT("longhelp")));
|
GetText(wxT("longhelp")));
|
||||||
return m_Toolbar; // must return non-NULL
|
return m_toolbar; // must return non-NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (m_Class == wxT("separator"))
|
else if (m_class == wxT("separator"))
|
||||||
{
|
{
|
||||||
wxCHECK_MSG(m_Toolbar, NULL, wxT("Incorrect syntax of XML resource: separator not within a toolbar!"));
|
wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XML resource: separator not within a toolbar!"));
|
||||||
m_Toolbar->AddSeparator();
|
m_toolbar->AddSeparator();
|
||||||
return m_Toolbar; // must return non-NULL
|
return m_toolbar; // must return non-NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
else /*<object class="wxToolBar">*/
|
else /*<object class="wxToolBar">*/
|
||||||
@@ -66,7 +66,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
|
|||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
if (!(style & wxNO_BORDER)) style |= wxNO_BORDER;
|
if (!(style & wxNO_BORDER)) style |= wxNO_BORDER;
|
||||||
#endif
|
#endif
|
||||||
wxToolBar *toolbar = new wxToolBar(m_ParentAsWindow,
|
wxToolBar *toolbar = new wxToolBar(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(),
|
GetPosition(),
|
||||||
GetSize(),
|
GetSize(),
|
||||||
@@ -89,8 +89,8 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
|
|||||||
wxXmlNode *children_node = GetParamNode(wxT("object"));
|
wxXmlNode *children_node = GetParamNode(wxT("object"));
|
||||||
if (children_node == NULL) return toolbar;
|
if (children_node == NULL) return toolbar;
|
||||||
|
|
||||||
m_IsInside = TRUE;
|
m_isInside = TRUE;
|
||||||
m_Toolbar = toolbar;
|
m_toolbar = toolbar;
|
||||||
|
|
||||||
wxXmlNode *n = children_node;
|
wxXmlNode *n = children_node;
|
||||||
|
|
||||||
@@ -109,8 +109,8 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
|
|||||||
n = n->GetNext();
|
n = n->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_IsInside = FALSE;
|
m_isInside = FALSE;
|
||||||
m_Toolbar = NULL;
|
m_toolbar = NULL;
|
||||||
|
|
||||||
toolbar->Realize();
|
toolbar->Realize();
|
||||||
return toolbar;
|
return toolbar;
|
||||||
@@ -121,9 +121,9 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
|
|||||||
|
|
||||||
bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node)
|
bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node)
|
||||||
{
|
{
|
||||||
return ((!m_IsInside && IsOfClass(node, wxT("wxToolBar"))) ||
|
return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) ||
|
||||||
(m_IsInside && IsOfClass(node, wxT("tool"))) ||
|
(m_isInside && IsOfClass(node, wxT("tool"))) ||
|
||||||
(m_IsInside && IsOfClass(node, wxT("separator"))));
|
(m_isInside && IsOfClass(node, wxT("separator"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -35,7 +35,7 @@ wxTreeCtrlXmlHandler::wxTreeCtrlXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxTreeCtrlXmlHandler::DoCreateResource()
|
wxObject *wxTreeCtrlXmlHandler::DoCreateResource()
|
||||||
{
|
{
|
||||||
wxTreeCtrl *tree = new wxTreeCtrl(m_ParentAsWindow,
|
wxTreeCtrl *tree = new wxTreeCtrl(m_parentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(),
|
GetStyle(),
|
||||||
|
@@ -38,16 +38,16 @@ wxObject *wxUnknownWidgetXmlHandler::DoCreateResource()
|
|||||||
wxWindow *wnd = NULL;
|
wxWindow *wnd = NULL;
|
||||||
|
|
||||||
if (id != -1)
|
if (id != -1)
|
||||||
wnd = m_ParentAsWindow->FindWindow(id);
|
wnd = m_parentAsWindow->FindWindow(id);
|
||||||
if (wnd == NULL && !name.IsEmpty())
|
if (wnd == NULL && !name.IsEmpty())
|
||||||
wnd = m_ParentAsWindow->FindWindow(name);
|
wnd = m_parentAsWindow->FindWindow(name);
|
||||||
|
|
||||||
if (wnd == NULL)
|
if (wnd == NULL)
|
||||||
wxLogError(wxT("Cannot find specified window for class 'unknown' (id=%li, name='%s')."), id, name.mb_str());
|
wxLogError(wxT("Cannot find specified window for class 'unknown' (id=%li, name='%s')."), id, name.mb_str());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (wnd->GetParent() != m_ParentAsWindow)
|
if (wnd->GetParent() != m_parentAsWindow)
|
||||||
wnd->Reparent(m_ParentAsWindow);
|
wnd->Reparent(m_parentAsWindow);
|
||||||
SetupWindow(wnd);
|
SetupWindow(wnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,19 +35,19 @@
|
|||||||
wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
|
wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
|
||||||
const wxString& name, const wxString& content,
|
const wxString& name, const wxString& content,
|
||||||
wxXmlProperty *props, wxXmlNode *next)
|
wxXmlProperty *props, wxXmlNode *next)
|
||||||
: m_Type(type), m_Name(name), m_Content(content),
|
: m_type(type), m_name(name), m_content(content),
|
||||||
m_Properties(props), m_Parent(parent),
|
m_properties(props), m_parent(parent),
|
||||||
m_Children(NULL), m_Next(next)
|
m_children(NULL), m_next(next)
|
||||||
{
|
{
|
||||||
if (m_Parent)
|
if (m_parent)
|
||||||
{
|
{
|
||||||
if (m_Parent->m_Children)
|
if (m_parent->m_children)
|
||||||
{
|
{
|
||||||
m_Next = m_Parent->m_Children;
|
m_next = m_parent->m_children;
|
||||||
m_Parent->m_Children = this;
|
m_parent->m_children = this;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_Parent->m_Children = this;
|
m_parent->m_children = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,17 +55,17 @@ wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
|
|||||||
|
|
||||||
wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
|
wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
|
||||||
const wxString& content)
|
const wxString& content)
|
||||||
: m_Type(type), m_Name(name), m_Content(content),
|
: m_type(type), m_name(name), m_content(content),
|
||||||
m_Properties(NULL), m_Parent(NULL),
|
m_properties(NULL), m_parent(NULL),
|
||||||
m_Children(NULL), m_Next(NULL)
|
m_children(NULL), m_next(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxXmlNode::wxXmlNode(const wxXmlNode& node)
|
wxXmlNode::wxXmlNode(const wxXmlNode& node)
|
||||||
{
|
{
|
||||||
m_Next = NULL;
|
m_next = NULL;
|
||||||
m_Parent = NULL;
|
m_parent = NULL;
|
||||||
DoCopy(node);
|
DoCopy(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,8 +73,8 @@ wxXmlNode::wxXmlNode(const wxXmlNode& node)
|
|||||||
|
|
||||||
wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
|
wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
|
||||||
{
|
{
|
||||||
delete m_Properties;
|
delete m_properties;
|
||||||
delete m_Children;
|
delete m_children;
|
||||||
DoCopy(node);
|
DoCopy(node);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@@ -83,20 +83,20 @@ wxXmlNode& wxXmlNode::operator=(const wxXmlNode& node)
|
|||||||
|
|
||||||
void wxXmlNode::DoCopy(const wxXmlNode& node)
|
void wxXmlNode::DoCopy(const wxXmlNode& node)
|
||||||
{
|
{
|
||||||
m_Type = node.m_Type;
|
m_type = node.m_type;
|
||||||
m_Name = node.m_Name;
|
m_name = node.m_name;
|
||||||
m_Content = node.m_Content;
|
m_content = node.m_content;
|
||||||
m_Children = NULL;
|
m_children = NULL;
|
||||||
|
|
||||||
wxXmlNode *n = node.m_Children;
|
wxXmlNode *n = node.m_children;
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
AddChild(new wxXmlNode(*n));
|
AddChild(new wxXmlNode(*n));
|
||||||
n = n->GetNext();
|
n = n->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Properties = NULL;
|
m_properties = NULL;
|
||||||
wxXmlProperty *p = node.m_Properties;
|
wxXmlProperty *p = node.m_properties;
|
||||||
while (p)
|
while (p)
|
||||||
{
|
{
|
||||||
AddProperty(p->GetName(), p->GetValue());
|
AddProperty(p->GetName(), p->GetValue());
|
||||||
@@ -152,16 +152,16 @@ wxString wxXmlNode::GetPropVal(const wxString& propName, const wxString& default
|
|||||||
|
|
||||||
void wxXmlNode::AddChild(wxXmlNode *child)
|
void wxXmlNode::AddChild(wxXmlNode *child)
|
||||||
{
|
{
|
||||||
if (m_Children == NULL)
|
if (m_children == NULL)
|
||||||
m_Children = child;
|
m_children = child;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxXmlNode *ch = m_Children;
|
wxXmlNode *ch = m_children;
|
||||||
while (ch->m_Next) ch = ch->m_Next;
|
while (ch->m_next) ch = ch->m_next;
|
||||||
ch->m_Next = child;
|
ch->m_next = child;
|
||||||
}
|
}
|
||||||
child->m_Next = NULL;
|
child->m_next = NULL;
|
||||||
child->m_Parent = this;
|
child->m_parent = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -170,45 +170,45 @@ void wxXmlNode::InsertChild(wxXmlNode *child, wxXmlNode *before_node)
|
|||||||
{
|
{
|
||||||
wxASSERT_MSG(before_node->GetParent() == this, wxT("wxXmlNode::InsertChild - the node has incorrect parent"));
|
wxASSERT_MSG(before_node->GetParent() == this, wxT("wxXmlNode::InsertChild - the node has incorrect parent"));
|
||||||
|
|
||||||
if (m_Children == before_node)
|
if (m_children == before_node)
|
||||||
m_Children = child;
|
m_children = child;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxXmlNode *ch = m_Children;
|
wxXmlNode *ch = m_children;
|
||||||
while (ch->m_Next != before_node) ch = ch->m_Next;
|
while (ch->m_next != before_node) ch = ch->m_next;
|
||||||
ch->m_Next = child;
|
ch->m_next = child;
|
||||||
}
|
}
|
||||||
|
|
||||||
child->m_Parent = this;
|
child->m_parent = this;
|
||||||
child->m_Next = before_node;
|
child->m_next = before_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wxXmlNode::RemoveChild(wxXmlNode *child)
|
bool wxXmlNode::RemoveChild(wxXmlNode *child)
|
||||||
{
|
{
|
||||||
if (m_Children == NULL)
|
if (m_children == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else if (m_Children == child)
|
else if (m_children == child)
|
||||||
{
|
{
|
||||||
m_Children = child->m_Next;
|
m_children = child->m_next;
|
||||||
child->m_Parent = NULL;
|
child->m_parent = NULL;
|
||||||
child->m_Next = NULL;
|
child->m_next = NULL;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxXmlNode *ch = m_Children;
|
wxXmlNode *ch = m_children;
|
||||||
while (ch->m_Next)
|
while (ch->m_next)
|
||||||
{
|
{
|
||||||
if (ch->m_Next == child)
|
if (ch->m_next == child)
|
||||||
{
|
{
|
||||||
ch->m_Next = child->m_Next;
|
ch->m_next = child->m_next;
|
||||||
child->m_Parent = NULL;
|
child->m_parent = NULL;
|
||||||
child->m_Next = NULL;
|
child->m_next = NULL;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
ch = ch->m_Next;
|
ch = ch->m_next;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -223,11 +223,11 @@ void wxXmlNode::AddProperty(const wxString& name, const wxString& value)
|
|||||||
|
|
||||||
void wxXmlNode::AddProperty(wxXmlProperty *prop)
|
void wxXmlNode::AddProperty(wxXmlProperty *prop)
|
||||||
{
|
{
|
||||||
if (m_Properties == NULL)
|
if (m_properties == NULL)
|
||||||
m_Properties = prop;
|
m_properties = prop;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxXmlProperty *p = m_Properties;
|
wxXmlProperty *p = m_properties;
|
||||||
while (p->GetNext()) p = p->GetNext();
|
while (p->GetNext()) p = p->GetNext();
|
||||||
p->SetNext(prop);
|
p->SetNext(prop);
|
||||||
}
|
}
|
||||||
@@ -237,13 +237,13 @@ void wxXmlNode::AddProperty(wxXmlProperty *prop)
|
|||||||
|
|
||||||
bool wxXmlNode::DeleteProperty(const wxString& name)
|
bool wxXmlNode::DeleteProperty(const wxString& name)
|
||||||
{
|
{
|
||||||
if (m_Properties == NULL)
|
if (m_properties == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
else if (m_Properties->GetName() == name)
|
else if (m_properties->GetName() == name)
|
||||||
{
|
{
|
||||||
wxXmlProperty *prop = m_Properties;
|
wxXmlProperty *prop = m_properties;
|
||||||
m_Properties = prop->GetNext();
|
m_properties = prop->GetNext();
|
||||||
prop->SetNext(NULL);
|
prop->SetNext(NULL);
|
||||||
delete prop;
|
delete prop;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -251,7 +251,7 @@ bool wxXmlNode::DeleteProperty(const wxString& name)
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxXmlProperty *p = m_Properties;
|
wxXmlProperty *p = m_properties;
|
||||||
while (p->GetNext())
|
while (p->GetNext())
|
||||||
{
|
{
|
||||||
if (p->GetNext()->GetName() == name)
|
if (p->GetNext()->GetName() == name)
|
||||||
@@ -275,29 +275,29 @@ bool wxXmlNode::DeleteProperty(const wxString& name)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxList *wxXmlDocument::sm_Handlers = NULL;
|
wxList *wxXmlDocument::sm_handlers = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxXmlDocument::wxXmlDocument(const wxString& filename, wxXmlIOType io_type)
|
wxXmlDocument::wxXmlDocument(const wxString& filename, wxXmlIOType io_type)
|
||||||
: wxObject(), m_Root(NULL)
|
: wxObject(), m_root(NULL)
|
||||||
{
|
{
|
||||||
if (!Load(filename, io_type))
|
if (!Load(filename, io_type))
|
||||||
{
|
{
|
||||||
delete m_Root;
|
delete m_root;
|
||||||
m_Root = NULL;
|
m_root = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxXmlDocument::wxXmlDocument(wxInputStream& stream, wxXmlIOType io_type)
|
wxXmlDocument::wxXmlDocument(wxInputStream& stream, wxXmlIOType io_type)
|
||||||
: wxObject(), m_Root(NULL)
|
: wxObject(), m_root(NULL)
|
||||||
{
|
{
|
||||||
if (!Load(stream, io_type))
|
if (!Load(stream, io_type))
|
||||||
{
|
{
|
||||||
delete m_Root;
|
delete m_root;
|
||||||
m_Root = NULL;
|
m_root = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ wxXmlDocument::wxXmlDocument(const wxXmlDocument& doc)
|
|||||||
|
|
||||||
wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
|
wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
|
||||||
{
|
{
|
||||||
delete m_Root;
|
delete m_root;
|
||||||
DoCopy(doc);
|
DoCopy(doc);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@@ -321,9 +321,9 @@ wxXmlDocument& wxXmlDocument::operator=(const wxXmlDocument& doc)
|
|||||||
|
|
||||||
void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
|
void wxXmlDocument::DoCopy(const wxXmlDocument& doc)
|
||||||
{
|
{
|
||||||
m_Version = doc.m_Version;
|
m_version = doc.m_version;
|
||||||
m_Encoding = doc.m_Encoding;
|
m_encoding = doc.m_encoding;
|
||||||
m_Root = new wxXmlNode(*doc.m_Root);
|
m_root = new wxXmlNode(*doc.m_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -338,7 +338,7 @@ bool wxXmlDocument::Load(const wxString& filename, wxXmlIOType io_type)
|
|||||||
|
|
||||||
bool wxXmlDocument::Load(wxInputStream& stream, wxXmlIOType io_type)
|
bool wxXmlDocument::Load(wxInputStream& stream, wxXmlIOType io_type)
|
||||||
{
|
{
|
||||||
wxNode *n = sm_Handlers->GetFirst();
|
wxNode *n = sm_handlers->GetFirst();
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
|
wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
|
||||||
@@ -366,7 +366,7 @@ bool wxXmlDocument::Save(const wxString& filename, wxXmlIOType io_type) const
|
|||||||
|
|
||||||
bool wxXmlDocument::Save(wxOutputStream& stream, wxXmlIOType io_type) const
|
bool wxXmlDocument::Save(wxOutputStream& stream, wxXmlIOType io_type) const
|
||||||
{
|
{
|
||||||
wxNode *n = sm_Handlers->GetFirst();
|
wxNode *n = sm_handlers->GetFirst();
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
|
wxXmlIOHandler *h = (wxXmlIOHandler*) n->GetData();
|
||||||
@@ -387,19 +387,19 @@ bool wxXmlDocument::Save(wxOutputStream& stream, wxXmlIOType io_type) const
|
|||||||
|
|
||||||
void wxXmlDocument::AddHandler(wxXmlIOHandler *handler)
|
void wxXmlDocument::AddHandler(wxXmlIOHandler *handler)
|
||||||
{
|
{
|
||||||
if (sm_Handlers == NULL)
|
if (sm_handlers == NULL)
|
||||||
{
|
{
|
||||||
sm_Handlers = new wxList;
|
sm_handlers = new wxList;
|
||||||
sm_Handlers->DeleteContents(TRUE);
|
sm_handlers->DeleteContents(TRUE);
|
||||||
}
|
}
|
||||||
sm_Handlers->Append(handler);
|
sm_handlers->Append(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxXmlDocument::CleanUpHandlers()
|
void wxXmlDocument::CleanUpHandlers()
|
||||||
{
|
{
|
||||||
delete sm_Handlers;
|
delete sm_handlers;
|
||||||
sm_Handlers = NULL;
|
sm_handlers = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -407,7 +407,8 @@ void wxXmlDocument::InitStandardHandlers()
|
|||||||
{
|
{
|
||||||
AddHandler(new wxXmlIOHandlerBin);
|
AddHandler(new wxXmlIOHandlerBin);
|
||||||
AddHandler(new wxXmlIOHandlerBinZ);
|
AddHandler(new wxXmlIOHandlerBinZ);
|
||||||
AddHandler(new wxXmlIOHandlerLibxml);
|
AddHandler(new wxXmlIOHandlerExpat);
|
||||||
|
AddHandler(new wxXmlIOHandlerWriter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
192
contrib/src/xml/xmlexpat.cpp
Normal file
192
contrib/src/xml/xmlexpat.cpp
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: xmlexpat.cpp
|
||||||
|
// Purpose: wxXmlDocument - XML reader via Expat
|
||||||
|
// Author: Vaclav Slavik
|
||||||
|
// Created: 2001/04/30
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2001 Vaclav Slavik
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
// nothing - already in xml.cpp
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/wfstream.h"
|
||||||
|
#include "wx/intl.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#include "wx/strconv.h"
|
||||||
|
#include "wx/xml/xmlio.h"
|
||||||
|
|
||||||
|
#include "xmlparse.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
- handle unknown encodings
|
||||||
|
- process all elements, including CDATA
|
||||||
|
- XML resources should automatically select desired encoding besed on
|
||||||
|
runtime environment (?) (would need BIN and BINZ formats modification,
|
||||||
|
too)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// converts Expat-produced string in UTF-8 into wxString.
|
||||||
|
inline static wxString CharToString(const char *s, size_t len = wxSTRING_MAXLEN)
|
||||||
|
{
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
return wxString(s, wxMBConvUTF8, len);
|
||||||
|
#else
|
||||||
|
return wxString(s, len);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxXmlIOHandlerExpat::CanLoad(wxInputStream& stream)
|
||||||
|
{
|
||||||
|
char cheader[7];
|
||||||
|
cheader[6] = 0;
|
||||||
|
stream.Read(cheader, 6);
|
||||||
|
stream.SeekI(-6, wxFromCurrent);
|
||||||
|
return (strcmp(cheader, "<?xml ") == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct wxXmlParsingContext
|
||||||
|
{
|
||||||
|
wxXmlNode *root;
|
||||||
|
wxXmlNode *node;
|
||||||
|
wxXmlNode *lastAsText;
|
||||||
|
wxString encoding;
|
||||||
|
wxString version;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void StartElementHnd(void *userData, const char *name, const char **atts)
|
||||||
|
{
|
||||||
|
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
|
||||||
|
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(name));
|
||||||
|
const char **a = atts;
|
||||||
|
while (*a)
|
||||||
|
{
|
||||||
|
node->AddProperty(CharToString(a[0]), CharToString(a[1]));
|
||||||
|
a += 2;
|
||||||
|
}
|
||||||
|
if (ctx->root == NULL)
|
||||||
|
ctx->root = node;
|
||||||
|
else
|
||||||
|
ctx->node->AddChild(node);
|
||||||
|
ctx->node = node;
|
||||||
|
ctx->lastAsText = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EndElementHnd(void *userData, const char *name)
|
||||||
|
{
|
||||||
|
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
|
||||||
|
|
||||||
|
ctx->node = ctx->node->GetParent();
|
||||||
|
ctx->lastAsText = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TextHnd(void *userData, const char *s, int len)
|
||||||
|
{
|
||||||
|
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
|
||||||
|
char *buf = new char[len + 1];
|
||||||
|
|
||||||
|
buf[len] = '\0';
|
||||||
|
memcpy(buf, s, (size_t)len);
|
||||||
|
|
||||||
|
if (ctx->lastAsText)
|
||||||
|
{
|
||||||
|
ctx->lastAsText->SetContent(ctx->lastAsText->GetContent() +
|
||||||
|
CharToString(buf));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool whiteOnly = TRUE;
|
||||||
|
for (char *c = buf; *c != '\0'; c++)
|
||||||
|
if (*c != ' ' && *c != '\t' && *c != '\n' && *c != '\r')
|
||||||
|
{
|
||||||
|
whiteOnly = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!whiteOnly)
|
||||||
|
{
|
||||||
|
ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"),
|
||||||
|
CharToString(buf));
|
||||||
|
ctx->node->AddChild(ctx->lastAsText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CommentHnd(void *userData, const char *data)
|
||||||
|
{
|
||||||
|
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
|
||||||
|
|
||||||
|
ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
|
||||||
|
wxT("comment"), CharToString(data)));
|
||||||
|
ctx->lastAsText = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DefaultHnd(void *userData, const char *s, int len)
|
||||||
|
{
|
||||||
|
// XML header:
|
||||||
|
if (len > 6 && memcmp(s, "<?xml ", 6) == 0)
|
||||||
|
{
|
||||||
|
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
|
||||||
|
|
||||||
|
wxString buf = CharToString(s, (size_t)len);
|
||||||
|
int pos;
|
||||||
|
pos = buf.Find(wxT("encoding="));
|
||||||
|
if (pos != wxNOT_FOUND)
|
||||||
|
ctx->encoding = buf.Mid(pos + 10).BeforeFirst(buf[pos+9]);
|
||||||
|
pos = buf.Find(wxT("version="));
|
||||||
|
if (pos != wxNOT_FOUND)
|
||||||
|
ctx->version = buf.Mid(pos + 9).BeforeFirst(buf[pos+8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxXmlIOHandlerExpat::Load(wxInputStream& stream, wxXmlDocument& doc)
|
||||||
|
{
|
||||||
|
const size_t BUFSIZE = 1024;
|
||||||
|
char buf[BUFSIZE];
|
||||||
|
wxXmlParsingContext ctx;
|
||||||
|
bool done;
|
||||||
|
XML_Parser parser = XML_ParserCreate(NULL);
|
||||||
|
|
||||||
|
ctx.root = ctx.node = NULL;
|
||||||
|
XML_SetUserData(parser, (void*)&ctx);
|
||||||
|
XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
|
||||||
|
XML_SetCharacterDataHandler(parser, TextHnd);
|
||||||
|
XML_SetCommentHandler(parser, CommentHnd);
|
||||||
|
XML_SetDefaultHandler(parser, DefaultHnd);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = stream.Read(buf, BUFSIZE).LastRead();
|
||||||
|
done = (len < BUFSIZE);
|
||||||
|
if (!XML_Parse(parser, buf, len, done))
|
||||||
|
{
|
||||||
|
wxLogError(_("XML parsing error: '%s' at line %d"),
|
||||||
|
XML_ErrorString(XML_GetErrorCode(parser)),
|
||||||
|
XML_GetCurrentLineNumber(parser));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
} while (!done);
|
||||||
|
|
||||||
|
doc.SetVersion(ctx.version);
|
||||||
|
doc.SetEncoding(ctx.encoding);
|
||||||
|
doc.SetRoot(ctx.root);
|
||||||
|
|
||||||
|
XML_ParserFree(parser);
|
||||||
|
return TRUE;
|
||||||
|
}
|
@@ -1,366 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: xmlpars.cpp
|
|
||||||
// Purpose: wxXmlDocument - XML parser
|
|
||||||
// Author: Vaclav Slavik
|
|
||||||
// Created: 2000/03/05
|
|
||||||
// RCS-ID: $Id$
|
|
||||||
// Copyright: (c) 2000 Vaclav Slavik
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
// nothing - already in xml.cpp
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx.h".
|
|
||||||
#include "wx/wxprec.h"
|
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
|
||||||
#pragma hdrstop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/wfstream.h"
|
|
||||||
#include "wx/intl.h"
|
|
||||||
#include "wx/log.h"
|
|
||||||
#include "wx/dynlib.h"
|
|
||||||
#include "wx/xml/xmlio.h"
|
|
||||||
|
|
||||||
#include <libxml/parser.h>
|
|
||||||
#include <libxml/SAX.h>
|
|
||||||
|
|
||||||
|
|
||||||
// wxWindows SAX handlers for bugs reporting:
|
|
||||||
|
|
||||||
static void wxXmlParserError(void *ctx, const char *msg, ...)
|
|
||||||
{
|
|
||||||
wxString text;
|
|
||||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
|
||||||
if (ctxt->input)
|
|
||||||
text.Printf( _("XML parser error at line %d: "), ctxt->input->line );
|
|
||||||
va_list args;
|
|
||||||
wxString tmp;
|
|
||||||
va_start(args, msg);
|
|
||||||
tmp.PrintfV( msg, args );
|
|
||||||
va_end(args);
|
|
||||||
text += tmp;
|
|
||||||
wxLogError( text.c_str() );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void wxXmlParserWarning(void *ctx, const char *msg, ...)
|
|
||||||
{
|
|
||||||
wxString text;
|
|
||||||
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
|
|
||||||
if (ctxt->input)
|
|
||||||
text.Printf( _("XML parser warning at line %d: "), ctxt->input->line );
|
|
||||||
va_list args;
|
|
||||||
wxString tmp;
|
|
||||||
va_start(args, msg);
|
|
||||||
tmp.PrintfV( msg, args );
|
|
||||||
va_end(args);
|
|
||||||
text += tmp;
|
|
||||||
wxLogWarning( text.c_str() );
|
|
||||||
}
|
|
||||||
|
|
||||||
static xmlSAXHandler gs_wxXmlSAXHandler;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dynamically loaded functions from libxml:
|
|
||||||
typedef xmlParserCtxtPtr (*type_xmlCreatePushParserCtxt)
|
|
||||||
(xmlSAXHandlerPtr sax, void *, const char *, int, const char *);
|
|
||||||
typedef xmlNodePtr (*type_xmlNewText)(const xmlChar *);
|
|
||||||
typedef xmlAttrPtr (*type_xmlSetProp)(xmlNodePtr, const xmlChar *, const xmlChar *);
|
|
||||||
typedef int (*type_xmlParseChunk)(xmlParserCtxtPtr, const char *, int, int);
|
|
||||||
typedef void (*type_xmlFreeParserCtxt)(xmlParserCtxtPtr);
|
|
||||||
typedef xmlDocPtr (*type_xmlNewDoc)(const xmlChar *);
|
|
||||||
typedef void (*type_xmlFreeDoc)(xmlDocPtr);
|
|
||||||
typedef xmlNodePtr (*type_xmlNewDocNode)(xmlDocPtr, xmlNsPtr, const xmlChar *, const xmlChar *);
|
|
||||||
typedef void (*type_xmlDocDumpMemory)(xmlDocPtr, xmlChar**, int *);
|
|
||||||
typedef xmlNodePtr (*type_xmlAddChild)(xmlNodePtr, xmlNodePtr);
|
|
||||||
typedef xmlNodePtr (*type_xmlNewChild)(xmlNodePtr, xmlNsPtr, const xmlChar *, const xmlChar *);
|
|
||||||
typedef xmlChar * (*type_xmlNodeListGetString)(xmlDocPtr, xmlNodePtr, int);
|
|
||||||
typedef xmlNodePtr (*type_xmlDocGetRootElement)(xmlDocPtr);
|
|
||||||
typedef xmlNodePtr (*type_xmlDocSetRootElement)(xmlDocPtr doc, xmlNodePtr root);
|
|
||||||
typedef void (*(*type_xmlFree))(void *);
|
|
||||||
typedef int (*type_xmlKeepBlanksDefault)(int);
|
|
||||||
typedef void (*type_xmlInitParser)(void);
|
|
||||||
typedef void (*type_xmlCleanupParser)(void);
|
|
||||||
typedef xmlSAXHandler *type_xmlDefaultSAXHandler;
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
wxDllType Handle;
|
|
||||||
|
|
||||||
type_xmlCreatePushParserCtxt xmlCreatePushParserCtxt;
|
|
||||||
type_xmlNewText xmlNewText;
|
|
||||||
type_xmlSetProp xmlSetProp;
|
|
||||||
type_xmlParseChunk xmlParseChunk;
|
|
||||||
type_xmlFreeParserCtxt xmlFreeParserCtxt;
|
|
||||||
type_xmlNewDoc xmlNewDoc;
|
|
||||||
type_xmlFreeDoc xmlFreeDoc;
|
|
||||||
type_xmlNewDocNode xmlNewDocNode;
|
|
||||||
type_xmlDocDumpMemory xmlDocDumpMemory;
|
|
||||||
type_xmlAddChild xmlAddChild;
|
|
||||||
type_xmlNewChild xmlNewChild;
|
|
||||||
type_xmlNodeListGetString xmlNodeListGetString;
|
|
||||||
type_xmlDocGetRootElement xmlDocGetRootElement;
|
|
||||||
type_xmlDocSetRootElement xmlDocSetRootElement;
|
|
||||||
type_xmlFree xmlFree;
|
|
||||||
type_xmlKeepBlanksDefault xmlKeepBlanksDefault;
|
|
||||||
type_xmlInitParser xmlInitParser;
|
|
||||||
type_xmlCleanupParser xmlCleanupParser;
|
|
||||||
type_xmlDefaultSAXHandler xmlDefaultSAXHandler;
|
|
||||||
} gs_libxmlDLL;
|
|
||||||
|
|
||||||
static bool gs_libxmlLoaded = FALSE;
|
|
||||||
static bool gs_libxmlLoadFailed = FALSE;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void ReleaseLibxml()
|
|
||||||
{
|
|
||||||
if (gs_libxmlLoaded)
|
|
||||||
{
|
|
||||||
// Check for CleanupParser ..may have failed before initialised
|
|
||||||
// during LOAD_SYMBOL in LoadLibxml()
|
|
||||||
if (gs_libxmlDLL.xmlCleanupParser)
|
|
||||||
gs_libxmlDLL.xmlCleanupParser();
|
|
||||||
wxDllLoader::UnloadLibrary(gs_libxmlDLL.Handle);
|
|
||||||
}
|
|
||||||
gs_libxmlLoaded = FALSE;
|
|
||||||
gs_libxmlLoadFailed = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static bool LoadLibxml()
|
|
||||||
{
|
|
||||||
if (gs_libxmlLoaded) return TRUE;
|
|
||||||
if (gs_libxmlLoadFailed) return FALSE;
|
|
||||||
gs_libxmlLoadFailed = TRUE;
|
|
||||||
|
|
||||||
{
|
|
||||||
wxLogNull lg;
|
|
||||||
#ifdef __UNIX__
|
|
||||||
gs_libxmlDLL.Handle =
|
|
||||||
wxDllLoader::LoadLibrary(wxT("wxlibxml.so.2"), &gs_libxmlLoaded);
|
|
||||||
if (!gs_libxmlLoaded) gs_libxmlDLL.Handle =
|
|
||||||
wxDllLoader::LoadLibrary(wxT("libxml.so.2"), &gs_libxmlLoaded);
|
|
||||||
#endif
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
gs_libxmlDLL.Handle =
|
|
||||||
wxDllLoader::LoadLibrary(wxT("wxlibxml2.dll"), &gs_libxmlLoaded);
|
|
||||||
if (!gs_libxmlLoaded) gs_libxmlDLL.Handle =
|
|
||||||
wxDllLoader::LoadLibrary(wxT("libxml2.dll"), &gs_libxmlLoaded);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gs_libxmlLoaded)
|
|
||||||
{
|
|
||||||
wxLogError(_("Failed to load libxml shared library."));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LOAD_SYMBOL(sym) \
|
|
||||||
gs_libxmlDLL.sym = \
|
|
||||||
(type_##sym)wxDllLoader::GetSymbol(gs_libxmlDLL.Handle, wxT(#sym)); \
|
|
||||||
if (!gs_libxmlDLL.sym) \
|
|
||||||
{ \
|
|
||||||
ReleaseLibxml(); \
|
|
||||||
wxLogError(_("Failed to load libxml shared library.")); \
|
|
||||||
return FALSE; \
|
|
||||||
}
|
|
||||||
|
|
||||||
LOAD_SYMBOL(xmlCreatePushParserCtxt)
|
|
||||||
LOAD_SYMBOL(xmlNewText)
|
|
||||||
LOAD_SYMBOL(xmlSetProp)
|
|
||||||
LOAD_SYMBOL(xmlParseChunk)
|
|
||||||
LOAD_SYMBOL(xmlFreeParserCtxt)
|
|
||||||
LOAD_SYMBOL(xmlNewDoc)
|
|
||||||
LOAD_SYMBOL(xmlFreeDoc)
|
|
||||||
LOAD_SYMBOL(xmlNewDocNode)
|
|
||||||
LOAD_SYMBOL(xmlDocDumpMemory)
|
|
||||||
LOAD_SYMBOL(xmlAddChild)
|
|
||||||
LOAD_SYMBOL(xmlNewChild)
|
|
||||||
LOAD_SYMBOL(xmlNodeListGetString)
|
|
||||||
LOAD_SYMBOL(xmlDocGetRootElement)
|
|
||||||
LOAD_SYMBOL(xmlDocSetRootElement)
|
|
||||||
LOAD_SYMBOL(xmlFree)
|
|
||||||
LOAD_SYMBOL(xmlKeepBlanksDefault)
|
|
||||||
LOAD_SYMBOL(xmlInitParser)
|
|
||||||
LOAD_SYMBOL(xmlCleanupParser)
|
|
||||||
LOAD_SYMBOL(xmlDefaultSAXHandler)
|
|
||||||
|
|
||||||
#undef LOAD_SYMBOL
|
|
||||||
|
|
||||||
gs_libxmlLoadFailed = FALSE;
|
|
||||||
|
|
||||||
gs_libxmlDLL.xmlInitParser();
|
|
||||||
memcpy(&gs_wxXmlSAXHandler, gs_libxmlDLL.xmlDefaultSAXHandler,
|
|
||||||
sizeof(xmlSAXHandler));
|
|
||||||
gs_wxXmlSAXHandler.error = wxXmlParserError;
|
|
||||||
gs_wxXmlSAXHandler.fatalError = wxXmlParserError;
|
|
||||||
gs_wxXmlSAXHandler.warning = wxXmlParserWarning;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wxXmlIOHandlerLibxml::CanLoad(wxInputStream& stream)
|
|
||||||
{
|
|
||||||
if (!LoadLibxml()) return FALSE;
|
|
||||||
char cheader[7];
|
|
||||||
cheader[6] = 0;
|
|
||||||
stream.Read(cheader, 6);
|
|
||||||
stream.SeekI(-6, wxFromCurrent);
|
|
||||||
return strcmp(cheader, "<?xml ") == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wxXmlIOHandlerLibxml::CanSave()
|
|
||||||
{
|
|
||||||
return LoadLibxml();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static wxXmlProperty *CreateWXProperty(xmlDocPtr doc, xmlAttrPtr attr)
|
|
||||||
{
|
|
||||||
if (attr == NULL) return NULL;
|
|
||||||
|
|
||||||
unsigned char *val =
|
|
||||||
gs_libxmlDLL.xmlNodeListGetString(doc, attr->children, 1);
|
|
||||||
wxXmlProperty *prop =
|
|
||||||
new wxXmlProperty(attr->name, val, CreateWXProperty(doc, attr->next));
|
|
||||||
(*gs_libxmlDLL.xmlFree)(val);
|
|
||||||
return prop;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static wxXmlNode *CreateWXNode(xmlDocPtr doc, wxXmlNode *parent, xmlNodePtr node)
|
|
||||||
{
|
|
||||||
if (node == NULL) return NULL;
|
|
||||||
|
|
||||||
wxXmlNode *nd = new wxXmlNode(parent, (wxXmlNodeType)node->type,
|
|
||||||
node->name, node->content,
|
|
||||||
CreateWXProperty(doc, node->properties),
|
|
||||||
CreateWXNode(doc, parent, node->next));
|
|
||||||
CreateWXNode(doc, nd, node->children);
|
|
||||||
return nd;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wxXmlIOHandlerLibxml::Load(wxInputStream& stream, wxXmlDocument& doc)
|
|
||||||
{
|
|
||||||
if (!LoadLibxml()) return FALSE;
|
|
||||||
|
|
||||||
xmlDocPtr dc;
|
|
||||||
xmlParserCtxtPtr ctxt;
|
|
||||||
|
|
||||||
char buffer[1024];
|
|
||||||
int res;
|
|
||||||
|
|
||||||
res = stream.Read(buffer, 4).LastRead();
|
|
||||||
if (res > 0)
|
|
||||||
{
|
|
||||||
bool okay = TRUE;
|
|
||||||
gs_libxmlDLL.xmlKeepBlanksDefault(0);
|
|
||||||
ctxt = gs_libxmlDLL.xmlCreatePushParserCtxt(&gs_wxXmlSAXHandler,
|
|
||||||
NULL, buffer, res, ""/*docname*/);
|
|
||||||
while ((res = stream.Read(buffer, 1024).LastRead()) > 0)
|
|
||||||
if (gs_libxmlDLL.xmlParseChunk(ctxt, buffer, res, 0) != 0)
|
|
||||||
okay = FALSE;
|
|
||||||
if (gs_libxmlDLL.xmlParseChunk(ctxt, buffer, 0, 1) != 0) okay = FALSE;
|
|
||||||
dc = ctxt->myDoc;
|
|
||||||
gs_libxmlDLL.xmlFreeParserCtxt(ctxt);
|
|
||||||
|
|
||||||
doc.SetVersion(dc->version);
|
|
||||||
doc.SetEncoding(dc->encoding);
|
|
||||||
doc.SetRoot(CreateWXNode(dc, NULL, gs_libxmlDLL.xmlDocGetRootElement(dc)));
|
|
||||||
|
|
||||||
gs_libxmlDLL.xmlFreeDoc(dc);
|
|
||||||
|
|
||||||
return okay;
|
|
||||||
}
|
|
||||||
else return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void CreateLibxmlNode(xmlNodePtr node, wxXmlNode *wxnode)
|
|
||||||
{
|
|
||||||
node->type = (xmlElementType)wxnode->GetType();
|
|
||||||
|
|
||||||
wxXmlProperty *prop = wxnode->GetProperties();
|
|
||||||
while (prop)
|
|
||||||
{
|
|
||||||
gs_libxmlDLL.xmlSetProp(node, (xmlChar*)prop->GetName().mb_str(),
|
|
||||||
(xmlChar*)prop->GetValue().mb_str());
|
|
||||||
prop = prop->GetNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxXmlNode *child = wxnode->GetChildren();
|
|
||||||
xmlNodePtr n;
|
|
||||||
xmlChar *content, *name;
|
|
||||||
|
|
||||||
while (child)
|
|
||||||
{
|
|
||||||
name = (xmlChar*)child->GetName().mb_str();
|
|
||||||
if (!child->GetContent()) content = NULL;
|
|
||||||
else content = (xmlChar*)child->GetContent().mb_str();
|
|
||||||
if (child->GetType() == wxXML_TEXT_NODE)
|
|
||||||
gs_libxmlDLL.xmlAddChild(node, n = gs_libxmlDLL.xmlNewText(content));
|
|
||||||
else
|
|
||||||
n = gs_libxmlDLL.xmlNewChild(node, NULL, name, content);
|
|
||||||
CreateLibxmlNode(n, child);
|
|
||||||
child = child->GetNext();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool wxXmlIOHandlerLibxml::Save(wxOutputStream& stream, const wxXmlDocument& doc)
|
|
||||||
{
|
|
||||||
if (!LoadLibxml()) return FALSE;
|
|
||||||
|
|
||||||
xmlDocPtr dc;
|
|
||||||
|
|
||||||
wxASSERT_MSG(doc.GetRoot() != NULL, _("Trying to save empty document!"));
|
|
||||||
|
|
||||||
gs_libxmlDLL.xmlKeepBlanksDefault(0);
|
|
||||||
dc = gs_libxmlDLL.xmlNewDoc((xmlChar*)doc.GetVersion().mb_str());
|
|
||||||
|
|
||||||
gs_libxmlDLL.xmlDocSetRootElement(dc,
|
|
||||||
gs_libxmlDLL.xmlNewDocNode(dc, NULL,
|
|
||||||
(xmlChar*)doc.GetRoot()->GetName().mb_str(), NULL));
|
|
||||||
CreateLibxmlNode(gs_libxmlDLL.xmlDocGetRootElement(dc), doc.GetRoot());
|
|
||||||
|
|
||||||
xmlChar *buffer;
|
|
||||||
int size;
|
|
||||||
|
|
||||||
gs_libxmlDLL.xmlDocDumpMemory(dc, &buffer, &size);
|
|
||||||
gs_libxmlDLL.xmlFreeDoc(dc);
|
|
||||||
stream.Write(buffer, size);
|
|
||||||
(*gs_libxmlDLL.xmlFree)(buffer);
|
|
||||||
return stream.LastWrite() == (unsigned)size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "wx/module.h"
|
|
||||||
|
|
||||||
class wxXmlLibxmlModule: public wxModule
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxXmlLibxmlModule)
|
|
||||||
public:
|
|
||||||
wxXmlLibxmlModule() {}
|
|
||||||
bool OnInit() { return TRUE; }
|
|
||||||
void OnExit() { ReleaseLibxml(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxXmlLibxmlModule, wxModule)
|
|
@@ -42,14 +42,14 @@ WX_DEFINE_OBJARRAY(wxXmlResourceDataRecords);
|
|||||||
|
|
||||||
wxXmlResource::wxXmlResource(bool use_locale)
|
wxXmlResource::wxXmlResource(bool use_locale)
|
||||||
{
|
{
|
||||||
m_Handlers.DeleteContents(TRUE);
|
m_handlers.DeleteContents(TRUE);
|
||||||
m_UseLocale = use_locale;
|
m_useLocale = use_locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxXmlResource::wxXmlResource(const wxString& filemask, bool use_locale)
|
wxXmlResource::wxXmlResource(const wxString& filemask, bool use_locale)
|
||||||
{
|
{
|
||||||
m_UseLocale = use_locale;
|
m_useLocale = use_locale;
|
||||||
m_Handlers.DeleteContents(TRUE);
|
m_handlers.DeleteContents(TRUE);
|
||||||
Load(filemask);
|
Load(filemask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ bool wxXmlResource::Load(const wxString& filemask)
|
|||||||
{
|
{
|
||||||
drec = new wxXmlResourceDataRecord;
|
drec = new wxXmlResourceDataRecord;
|
||||||
drec->File = fnd2;
|
drec->File = fnd2;
|
||||||
m_Data.Add(drec);
|
m_data.Add(drec);
|
||||||
fnd2 = fs2.FindNext();
|
fnd2 = fs2.FindNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ bool wxXmlResource::Load(const wxString& filemask)
|
|||||||
{
|
{
|
||||||
drec = new wxXmlResourceDataRecord;
|
drec = new wxXmlResourceDataRecord;
|
||||||
drec->File = fnd;
|
drec->File = fnd;
|
||||||
m_Data.Add(drec);
|
m_data.Add(drec);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iswild)
|
if (iswild)
|
||||||
@@ -117,7 +117,7 @@ bool wxXmlResource::Load(const wxString& filemask)
|
|||||||
|
|
||||||
void wxXmlResource::AddHandler(wxXmlResourceHandler *handler)
|
void wxXmlResource::AddHandler(wxXmlResourceHandler *handler)
|
||||||
{
|
{
|
||||||
m_Handlers.Append(handler);
|
m_handlers.Append(handler);
|
||||||
handler->SetParentResource(this);
|
handler->SetParentResource(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ void wxXmlResource::AddHandler(wxXmlResourceHandler *handler)
|
|||||||
|
|
||||||
void wxXmlResource::ClearHandlers()
|
void wxXmlResource::ClearHandlers()
|
||||||
{
|
{
|
||||||
m_Handlers.Clear();
|
m_handlers.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -259,20 +259,20 @@ void wxXmlResource::UpdateResources()
|
|||||||
wxFileSystem fsys;
|
wxFileSystem fsys;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
for (size_t i = 0; i < m_Data.GetCount(); i++)
|
for (size_t i = 0; i < m_data.GetCount(); i++)
|
||||||
{
|
{
|
||||||
modif = (m_Data[i].Doc == NULL);
|
modif = (m_data[i].Doc == NULL);
|
||||||
|
|
||||||
if (!modif)
|
if (!modif)
|
||||||
{
|
{
|
||||||
# if wxUSE_FILESYSTEM
|
# if wxUSE_FILESYSTEM
|
||||||
file = fsys.OpenFile(m_Data[i].File);
|
file = fsys.OpenFile(m_data[i].File);
|
||||||
modif = file && file->GetModificationTime() > m_Data[i].Time;
|
modif = file && file->GetModificationTime() > m_data[i].Time;
|
||||||
if (!file)
|
if (!file)
|
||||||
wxLogError(_("Cannot open file '%s'."), m_Data[i].File.c_str());
|
wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str());
|
||||||
wxDELETE(file);
|
wxDELETE(file);
|
||||||
# else
|
# else
|
||||||
modif = wxDateTime(wxFileModificationTime(m_Data[i].File)) > m_Data[i].Time;
|
modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,32 +281,32 @@ void wxXmlResource::UpdateResources()
|
|||||||
wxInputStream *stream = NULL;
|
wxInputStream *stream = NULL;
|
||||||
|
|
||||||
# if wxUSE_FILESYSTEM
|
# if wxUSE_FILESYSTEM
|
||||||
file = fsys.OpenFile(m_Data[i].File);
|
file = fsys.OpenFile(m_data[i].File);
|
||||||
if (file)
|
if (file)
|
||||||
stream = file->GetStream();
|
stream = file->GetStream();
|
||||||
# else
|
# else
|
||||||
stream = new wxFileInputStream(m_Data[i].File);
|
stream = new wxFileInputStream(m_data[i].File);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (stream)
|
if (stream)
|
||||||
{
|
{
|
||||||
delete m_Data[i].Doc;
|
delete m_data[i].Doc;
|
||||||
m_Data[i].Doc = new wxXmlDocument;
|
m_data[i].Doc = new wxXmlDocument;
|
||||||
}
|
}
|
||||||
if (!stream || !m_Data[i].Doc->Load(*stream))
|
if (!stream || !m_data[i].Doc->Load(*stream))
|
||||||
{
|
{
|
||||||
wxLogError(_("Cannot load resources from file '%s'."), m_Data[i].File.c_str());
|
wxLogError(_("Cannot load resources from file '%s'."), m_data[i].File.c_str());
|
||||||
wxDELETE(m_Data[i].Doc);
|
wxDELETE(m_data[i].Doc);
|
||||||
}
|
}
|
||||||
else if (m_Data[i].Doc->GetRoot()->GetName() != wxT("resource"))
|
else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
|
||||||
{
|
{
|
||||||
wxLogError(_("Invalid XML resource '%s': doesn't have root node 'resource'."), m_Data[i].File.c_str());
|
wxLogError(_("Invalid XML resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
|
||||||
wxDELETE(m_Data[i].Doc);
|
wxDELETE(m_data[i].Doc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessPlatformProperty(m_Data[i].Doc->GetRoot());
|
ProcessPlatformProperty(m_data[i].Doc->GetRoot());
|
||||||
m_Data[i].Time = file->GetModificationTime();
|
m_data[i].Time = file->GetModificationTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
# if wxUSE_FILESYSTEM
|
# if wxUSE_FILESYSTEM
|
||||||
@@ -325,10 +325,10 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name, const wxString& cla
|
|||||||
UpdateResources(); //ensure everything is up-to-date
|
UpdateResources(); //ensure everything is up-to-date
|
||||||
|
|
||||||
wxString dummy;
|
wxString dummy;
|
||||||
for (size_t f = 0; f < m_Data.GetCount(); f++)
|
for (size_t f = 0; f < m_data.GetCount(); f++)
|
||||||
{
|
{
|
||||||
if (m_Data[f].Doc == NULL || m_Data[f].Doc->GetRoot() == NULL) continue;
|
if (m_data[f].Doc == NULL || m_data[f].Doc->GetRoot() == NULL) continue;
|
||||||
for (wxXmlNode *node = m_Data[f].Doc->GetRoot()->GetChildren();
|
for (wxXmlNode *node = m_data[f].Doc->GetRoot()->GetChildren();
|
||||||
node; node = node->GetNext())
|
node; node = node->GetNext())
|
||||||
if (node->GetType() == wxXML_ELEMENT_NODE &&
|
if (node->GetType() == wxXML_ELEMENT_NODE &&
|
||||||
(!classname ||
|
(!classname ||
|
||||||
@@ -338,7 +338,7 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name, const wxString& cla
|
|||||||
dummy == name)
|
dummy == name)
|
||||||
{
|
{
|
||||||
#if wxUSE_FILESYSTEM
|
#if wxUSE_FILESYSTEM
|
||||||
m_CurFileSystem.ChangePathTo(m_Data[f].File);
|
m_curFileSystem.ChangePathTo(m_data[f].File);
|
||||||
#endif
|
#endif
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
@@ -357,7 +357,7 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, wx
|
|||||||
|
|
||||||
wxXmlResourceHandler *handler;
|
wxXmlResourceHandler *handler;
|
||||||
wxObject *ret;
|
wxObject *ret;
|
||||||
wxNode * ND = m_Handlers.GetFirst();
|
wxNode * ND = m_handlers.GetFirst();
|
||||||
while (ND)
|
while (ND)
|
||||||
{
|
{
|
||||||
handler = (wxXmlResourceHandler*)ND->GetData();
|
handler = (wxXmlResourceHandler*)ND->GetData();
|
||||||
@@ -384,32 +384,32 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, wx
|
|||||||
|
|
||||||
|
|
||||||
wxXmlResourceHandler::wxXmlResourceHandler()
|
wxXmlResourceHandler::wxXmlResourceHandler()
|
||||||
: m_Node(NULL), m_Parent(NULL), m_Instance(NULL),
|
: m_node(NULL), m_parent(NULL), m_instance(NULL),
|
||||||
m_ParentAsWindow(NULL), m_InstanceAsWindow(NULL)
|
m_parentAsWindow(NULL), m_instanceAsWindow(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent, wxObject *instance)
|
wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent, wxObject *instance)
|
||||||
{
|
{
|
||||||
wxXmlNode *myNode = m_Node;
|
wxXmlNode *myNode = m_node;
|
||||||
wxString myClass = m_Class;
|
wxString myClass = m_class;
|
||||||
wxObject *myParent = m_Parent, *myInstance = m_Instance;
|
wxObject *myParent = m_parent, *myInstance = m_instance;
|
||||||
wxWindow *myParentAW = m_ParentAsWindow, *myInstanceAW = m_InstanceAsWindow;
|
wxWindow *myParentAW = m_parentAsWindow, *myInstanceAW = m_instanceAsWindow;
|
||||||
|
|
||||||
m_Node = node;
|
m_node = node;
|
||||||
m_Class = node->GetPropVal(wxT("class"), wxEmptyString);
|
m_class = node->GetPropVal(wxT("class"), wxEmptyString);
|
||||||
m_Parent = parent;
|
m_parent = parent;
|
||||||
m_Instance = instance;
|
m_instance = instance;
|
||||||
m_ParentAsWindow = wxDynamicCast(m_Parent, wxWindow);
|
m_parentAsWindow = wxDynamicCast(m_parent, wxWindow);
|
||||||
m_InstanceAsWindow = wxDynamicCast(m_Instance, wxWindow);
|
m_instanceAsWindow = wxDynamicCast(m_instance, wxWindow);
|
||||||
|
|
||||||
wxObject *returned = DoCreateResource();
|
wxObject *returned = DoCreateResource();
|
||||||
|
|
||||||
m_Node = myNode;
|
m_node = myNode;
|
||||||
m_Class = myClass;
|
m_class = myClass;
|
||||||
m_Parent = myParent; m_ParentAsWindow = myParentAW;
|
m_parent = myParent; m_parentAsWindow = myParentAW;
|
||||||
m_Instance = myInstance; m_InstanceAsWindow = myInstanceAW;
|
m_instance = myInstance; m_instanceAsWindow = myInstanceAW;
|
||||||
|
|
||||||
return returned;
|
return returned;
|
||||||
}
|
}
|
||||||
@@ -417,8 +417,8 @@ wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent
|
|||||||
|
|
||||||
void wxXmlResourceHandler::AddStyle(const wxString& name, int value)
|
void wxXmlResourceHandler::AddStyle(const wxString& name, int value)
|
||||||
{
|
{
|
||||||
m_StyleNames.Add(name);
|
m_styleNames.Add(name);
|
||||||
m_StyleValues.Add(value);
|
m_styleValues.Add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -456,9 +456,9 @@ int wxXmlResourceHandler::GetStyle(const wxString& param, int defaults)
|
|||||||
while (tkn.HasMoreTokens())
|
while (tkn.HasMoreTokens())
|
||||||
{
|
{
|
||||||
fl = tkn.GetNextToken();
|
fl = tkn.GetNextToken();
|
||||||
index = m_StyleNames.Index(fl);
|
index = m_styleNames.Index(fl);
|
||||||
if (index != wxNOT_FOUND)
|
if (index != wxNOT_FOUND)
|
||||||
style |= m_StyleValues[index];
|
style |= m_styleValues[index];
|
||||||
else
|
else
|
||||||
wxLogError(_("Unknown style flag ") + fl);
|
wxLogError(_("Unknown style flag ") + fl);
|
||||||
}
|
}
|
||||||
@@ -495,7 +495,7 @@ wxString wxXmlResourceHandler::GetText(const wxString& param)
|
|||||||
else str2 << *dt;
|
else str2 << *dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Resource->GetUseLocale())
|
if (m_resource->GetUseLocale())
|
||||||
return wxGetTranslation(str2);
|
return wxGetTranslation(str2);
|
||||||
else
|
else
|
||||||
return str2;
|
return str2;
|
||||||
@@ -543,7 +543,7 @@ int wxXmlResourceHandler::GetID()
|
|||||||
|
|
||||||
wxString wxXmlResourceHandler::GetName()
|
wxString wxXmlResourceHandler::GetName()
|
||||||
{
|
{
|
||||||
return m_Node->GetPropVal(wxT("name"), wxT("-1"));
|
return m_node->GetPropVal(wxT("name"), wxT("-1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -623,7 +623,7 @@ wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, wxSize size)
|
|||||||
|
|
||||||
wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param)
|
wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param)
|
||||||
{
|
{
|
||||||
wxXmlNode *n = m_Node->GetChildren();
|
wxXmlNode *n = m_node->GetChildren();
|
||||||
|
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
@@ -656,7 +656,7 @@ wxString wxXmlResourceHandler::GetNodeContent(wxXmlNode *node)
|
|||||||
wxString wxXmlResourceHandler::GetParamValue(const wxString& param)
|
wxString wxXmlResourceHandler::GetParamValue(const wxString& param)
|
||||||
{
|
{
|
||||||
if (param.IsEmpty())
|
if (param.IsEmpty())
|
||||||
return GetNodeContent(m_Node);
|
return GetNodeContent(m_node);
|
||||||
else
|
else
|
||||||
return GetNodeContent(GetParamNode(param));
|
return GetNodeContent(GetParamNode(param));
|
||||||
}
|
}
|
||||||
@@ -682,10 +682,10 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param)
|
|||||||
|
|
||||||
if (is_dlg)
|
if (is_dlg)
|
||||||
{
|
{
|
||||||
if (m_InstanceAsWindow)
|
if (m_instanceAsWindow)
|
||||||
return wxDLG_UNIT(m_InstanceAsWindow, wxSize(sx, sy));
|
return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, sy));
|
||||||
else if (m_ParentAsWindow)
|
else if (m_parentAsWindow)
|
||||||
return wxDLG_UNIT(m_ParentAsWindow, wxSize(sx, sy));
|
return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, sy));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogError(_("Cannot convert dialog units: dialog unknown."));
|
wxLogError(_("Cannot convert dialog units: dialog unknown."));
|
||||||
@@ -723,10 +723,10 @@ wxCoord wxXmlResourceHandler::GetDimension(const wxString& param, wxCoord defaul
|
|||||||
|
|
||||||
if (is_dlg)
|
if (is_dlg)
|
||||||
{
|
{
|
||||||
if (m_InstanceAsWindow)
|
if (m_instanceAsWindow)
|
||||||
return wxDLG_UNIT(m_InstanceAsWindow, wxSize(sx, 0)).x;
|
return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, 0)).x;
|
||||||
else if (m_ParentAsWindow)
|
else if (m_parentAsWindow)
|
||||||
return wxDLG_UNIT(m_ParentAsWindow, wxSize(sx, 0)).x;
|
return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, 0)).x;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxLogError(_("Cannot convert dialog units: dialog unknown."));
|
wxLogError(_("Cannot convert dialog units: dialog unknown."));
|
||||||
@@ -747,8 +747,8 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
|
|||||||
return wxNullFont;
|
return wxNullFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxXmlNode *oldnode = m_Node;
|
wxXmlNode *oldnode = m_node;
|
||||||
m_Node = font_node;
|
m_node = font_node;
|
||||||
|
|
||||||
long size = GetLong(wxT("size"), 12);
|
long size = GetLong(wxT("size"), 12);
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Node = oldnode;
|
m_node = oldnode;
|
||||||
|
|
||||||
wxFont font(size, ifamily, istyle, iweight, underlined, facename, enc);
|
wxFont font(size, ifamily, istyle, iweight, underlined, facename, enc);
|
||||||
return font;
|
return font;
|
||||||
@@ -825,7 +825,7 @@ void wxXmlResourceHandler::SetupWindow(wxWindow *wnd)
|
|||||||
|
|
||||||
void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only)
|
void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only)
|
||||||
{
|
{
|
||||||
wxXmlNode *n = m_Node->GetChildren();
|
wxXmlNode *n = m_node->GetChildren();
|
||||||
|
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
@@ -835,7 +835,7 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only)
|
|||||||
if (this_hnd_only && CanHandle(n))
|
if (this_hnd_only && CanHandle(n))
|
||||||
CreateResource(n, parent, NULL);
|
CreateResource(n, parent, NULL);
|
||||||
else
|
else
|
||||||
m_Resource->CreateResFromNode(n, parent, NULL);
|
m_resource->CreateResFromNode(n, parent, NULL);
|
||||||
}
|
}
|
||||||
n = n->GetNext();
|
n = n->GetNext();
|
||||||
}
|
}
|
||||||
@@ -845,7 +845,7 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only)
|
|||||||
void wxXmlResourceHandler::CreateChildrenPrivately(wxObject *parent, wxXmlNode *rootnode)
|
void wxXmlResourceHandler::CreateChildrenPrivately(wxObject *parent, wxXmlNode *rootnode)
|
||||||
{
|
{
|
||||||
wxXmlNode *root;
|
wxXmlNode *root;
|
||||||
if (rootnode == NULL) root = m_Node; else root = rootnode;
|
if (rootnode == NULL) root = m_node; else root = rootnode;
|
||||||
wxXmlNode *n = root->GetChildren();
|
wxXmlNode *n = root->GetChildren();
|
||||||
|
|
||||||
while (n)
|
while (n)
|
||||||
|
152
contrib/src/xml/xmlwrite.cpp
Normal file
152
contrib/src/xml/xmlwrite.cpp
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: xmlwrite.cpp
|
||||||
|
// Purpose: wxXmlDocument - XML text writer
|
||||||
|
// Author: Vaclav Slavik
|
||||||
|
// Created: 2001/04/30
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2001 Vaclav Slavik
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
// nothing - already in xml.cpp
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/wfstream.h"
|
||||||
|
#include "wx/intl.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#include "wx/strconv.h"
|
||||||
|
#include "wx/xml/xml.h"
|
||||||
|
#include "wx/xml/xmlio.h"
|
||||||
|
|
||||||
|
// write string to output:
|
||||||
|
inline static void OutputString(wxOutputStream& stream, const wxString& str)
|
||||||
|
{
|
||||||
|
if (str.IsEmpty()) return;
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
char *buf = str.mb_str(wxMBConvUTF8);
|
||||||
|
stream.Write(buf, strlen(buf));
|
||||||
|
#else
|
||||||
|
stream.Write(str.mb_str(), str.Len());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as above, but create entities first.
|
||||||
|
// Translates '<' to "<", '>' to ">" and '&' to "&"
|
||||||
|
static void OutputStringEnt(wxOutputStream& stream, const wxString& str)
|
||||||
|
{
|
||||||
|
wxString buf;
|
||||||
|
size_t i, last, len;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
len = str.Len();
|
||||||
|
last = 0;
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
c = str.GetChar(i);
|
||||||
|
if (c == '<' || c == '>' ||
|
||||||
|
(c == '&' && str.Mid(i+1, 4) != wxT("amp;")))
|
||||||
|
{
|
||||||
|
OutputString(stream, str.Mid(last, i - last));
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '<': OutputString(stream, wxT("<")); break;
|
||||||
|
case '>': OutputString(stream, wxT(">")); break;
|
||||||
|
case '&': OutputString(stream, wxT("&")); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
last = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OutputString(stream, str.Mid(last, i - last));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static void OutputIndentation(wxOutputStream& stream, int indent)
|
||||||
|
{
|
||||||
|
wxString str = wxT("\n");
|
||||||
|
for (int i = 0; i < indent; i++)
|
||||||
|
str << wxT(' ') << wxT(' ');
|
||||||
|
OutputString(stream, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void OutputNode(wxOutputStream& stream, wxXmlNode *node, int indent)
|
||||||
|
{
|
||||||
|
wxXmlNode *n, *prev;
|
||||||
|
wxXmlProperty *prop;
|
||||||
|
|
||||||
|
switch (node->GetType())
|
||||||
|
{
|
||||||
|
case wxXML_TEXT_NODE:
|
||||||
|
OutputStringEnt(stream, node->GetContent());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxXML_ELEMENT_NODE:
|
||||||
|
OutputString(stream, wxT("<"));
|
||||||
|
OutputString(stream, node->GetName());
|
||||||
|
|
||||||
|
prop = node->GetProperties();
|
||||||
|
while (prop)
|
||||||
|
{
|
||||||
|
OutputString(stream, wxT(" ") + prop->GetName() +
|
||||||
|
wxT("=\"") + prop->GetValue() + wxT("\""));
|
||||||
|
// FIXME - what if prop contains '"'?
|
||||||
|
prop = prop->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node->GetChildren())
|
||||||
|
{
|
||||||
|
OutputString(stream, wxT(">"));
|
||||||
|
prev = NULL;
|
||||||
|
n = node->GetChildren();
|
||||||
|
while (n)
|
||||||
|
{
|
||||||
|
if (n && n->GetType() != wxXML_TEXT_NODE)
|
||||||
|
OutputIndentation(stream, indent + 1);
|
||||||
|
OutputNode(stream, n, indent + 1);
|
||||||
|
prev = n;
|
||||||
|
n = n->GetNext();
|
||||||
|
}
|
||||||
|
if (prev && prev->GetType() != wxXML_TEXT_NODE)
|
||||||
|
OutputIndentation(stream, indent);
|
||||||
|
OutputString(stream, wxT("</"));
|
||||||
|
OutputString(stream, node->GetName());
|
||||||
|
OutputString(stream, wxT(">"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
OutputString(stream, wxT("/>"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxXML_COMMENT_NODE:
|
||||||
|
OutputString(stream, wxT("<!--"));
|
||||||
|
OutputString(stream, node->GetContent());
|
||||||
|
OutputString(stream, wxT("-->"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG(wxT("unsupported node type"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxXmlIOHandlerWriter::Save(wxOutputStream& stream, const wxXmlDocument& doc)
|
||||||
|
{
|
||||||
|
if (!doc.IsOk())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxString s;
|
||||||
|
|
||||||
|
s = wxT("<?xml version=\"") + doc.GetVersion() +
|
||||||
|
wxT("\" encoding=\"utf-8\"?>\n");
|
||||||
|
OutputString(stream, s);
|
||||||
|
|
||||||
|
OutputNode(stream, doc.GetRoot(), 0);
|
||||||
|
OutputString(stream, wxT("\n"));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
Reference in New Issue
Block a user